Sync from Piper @446230931

PROTOBUF_SYNC_PIPER
diff --git a/CHANGES.txt b/CHANGES.txt
index 5f6e297..4ef9bdb 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -14,6 +14,7 @@
   * Refactor generated message class layout
   * Optimize tokenizer ParseInteger by removing division
   * Reserve exactly the right amount of capacity in ExtensionSet::MergeFrom
+  * Parse FLT_MAX correctly when represented in JSON
 
   Compiler
   * Protoc outputs the list of suggested field numbers when invalid field
diff --git a/kokoro/release/collect_all_artifacts.sh b/kokoro/release/collect_all_artifacts.sh
index 3372a01..6e0d152 100755
--- a/kokoro/release/collect_all_artifacts.sh
+++ b/kokoro/release/collect_all_artifacts.sh
@@ -50,6 +50,9 @@
 # TODO(jtattermusch): use "mono:5.14" docker image instead so we don't have to apt-get install
 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
 echo "deb https://download.mono-project.com/repo/ubuntu stable-xenial main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
+# NVidia has stopped publishing Cuda packages for Ubuntu 16.04, so we need to
+# delete this file to allow the apt update to run successfully.
+sudo rm -f /etc/apt/sources.list.d/cuda.list
 sudo apt update
 sudo apt-get install -y nuget
 
diff --git a/protobuf_release.bzl b/protobuf_release.bzl
index c5d5f2b..327ae9a 100644
--- a/protobuf_release.bzl
+++ b/protobuf_release.bzl
@@ -4,11 +4,11 @@
 
 load("@rules_pkg//:providers.bzl", "PackageVariablesInfo")
 load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
-load(":protobuf_version.bzl", "PROTOBUF_VERSION")
+load(":protobuf_version.bzl", "PROTOC_VERSION")
 
 def _package_naming_impl(ctx):
   values = {}
-  values["version"] = PROTOBUF_VERSION
+  values["version"] = PROTOC_VERSION
 
   # infer from the current cpp toolchain.
   toolchain = find_cpp_toolchain(ctx)
diff --git a/protobuf_version.bzl b/protobuf_version.bzl
index 98cf837..8da8329 100644
--- a/protobuf_version.bzl
+++ b/protobuf_version.bzl
@@ -1 +1,2 @@
-PROTOBUF_VERSION = '3.20.1'
+PROTOC_VERSION = '3.20.1'
+PROTOBUF_JAVA_VERSION = '3.20.1'
diff --git a/src/google/protobuf/parse_context.h b/src/google/protobuf/parse_context.h
index cd97596..7aea50c 100644
--- a/src/google/protobuf/parse_context.h
+++ b/src/google/protobuf/parse_context.h
@@ -630,7 +630,7 @@
             *out = 0;
             return nullptr;
           }
-          *out = RotateLeft(res, 28);
+          *out = static_cast<uint32_t>(RotateLeft(res, 28));
 #if defined(__GNUC__)
           // Note: this asm statement prevents the compiler from
           // trying to share the "return ptr + constant" among all
@@ -639,16 +639,16 @@
 #endif
           return ptr + 5;
         }
-        *out = RotateLeft(res, 21);
+        *out = static_cast<uint32_t>(RotateLeft(res, 21));
         return ptr + 4;
       }
-      *out = RotateLeft(res, 14);
+      *out = static_cast<uint32_t>(RotateLeft(res, 14));
       return ptr + 3;
     }
-    *out = RotateLeft(res, 7);
+    *out = static_cast<uint32_t>(RotateLeft(res, 7));
     return ptr + 2;
   }
-  *out = res;
+  *out = static_cast<uint32_t>(res);
   return ptr + 1;
 }
 
diff --git a/src/google/protobuf/wire_format_lite.h b/src/google/protobuf/wire_format_lite.h
index 32fe0c7..a7e64bf 100644
--- a/src/google/protobuf/wire_format_lite.h
+++ b/src/google/protobuf/wire_format_lite.h
@@ -41,6 +41,7 @@
 #define GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_H__
 
 
+#include <limits>
 #include <string>
 
 #include <google/protobuf/stubs/common.h>