diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index d2b559a..7a26fae 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -7890,8 +7890,7 @@
 }
 
 TEST_P(QuicConnectionTest, AcceptPacketNumberZero) {
-  if (!GetQuicRestartFlag(quic_uint64max_uninitialized_pn) ||
-      version().transport_version != QUIC_VERSION_99) {
+  if (version().transport_version != QUIC_VERSION_99) {
     return;
   }
   // Set first_sending_packet_number to be 0 to allow successfully processing
diff --git a/quic/core/quic_framer.cc b/quic/core/quic_framer.cc
index 08c0121..333fe59 100644
--- a/quic/core/quic_framer.cc
+++ b/quic/core/quic_framer.cc
@@ -345,9 +345,7 @@
 
 bool IsValidFullPacketNumber(uint64_t full_packet_number,
                              QuicTransportVersion version) {
-  return full_packet_number > 0 ||
-         (GetQuicRestartFlag(quic_uint64max_uninitialized_pn) &&
-          version == QUIC_VERSION_99);
+  return full_packet_number > 0 || version == QUIC_VERSION_99;
 }
 
 // Convert a stream ID to a count of streams, for IETF QUIC/Version 99 only.
diff --git a/quic/core/quic_packet_number.cc b/quic/core/quic_packet_number.cc
index 3996993..345a056 100644
--- a/quic/core/quic_packet_number.cc
+++ b/quic/core/quic_packet_number.cc
@@ -47,11 +47,7 @@
 QuicPacketNumber& QuicPacketNumber::operator++() {
 #ifndef NDEBUG
   DCHECK(IsInitialized());
-  if (GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
-    DCHECK_LT(ToUint64(), std::numeric_limits<uint64_t>::max() - 1);
-  } else {
-    DCHECK_LT(ToUint64(), std::numeric_limits<uint64_t>::max());
-  }
+  DCHECK_LT(ToUint64(), std::numeric_limits<uint64_t>::max() - 1);
 #endif
   packet_number_++;
   return *this;
@@ -60,11 +56,7 @@
 QuicPacketNumber QuicPacketNumber::operator++(int) {
 #ifndef NDEBUG
   DCHECK(IsInitialized());
-  if (GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
-    DCHECK_LT(ToUint64(), std::numeric_limits<uint64_t>::max() - 1);
-  } else {
-    DCHECK_LT(ToUint64(), std::numeric_limits<uint64_t>::max());
-  }
+  DCHECK_LT(ToUint64(), std::numeric_limits<uint64_t>::max() - 1);
 #endif
   QuicPacketNumber previous(*this);
   packet_number_++;
@@ -74,11 +66,7 @@
 QuicPacketNumber& QuicPacketNumber::operator--() {
 #ifndef NDEBUG
   DCHECK(IsInitialized());
-  if (GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
-    DCHECK_GE(ToUint64(), 1UL);
-  } else {
-    DCHECK_GT(ToUint64(), 1UL);
-  }
+  DCHECK_GE(ToUint64(), 1UL);
 #endif
   packet_number_--;
   return *this;
@@ -87,11 +75,7 @@
 QuicPacketNumber QuicPacketNumber::operator--(int) {
 #ifndef NDEBUG
   DCHECK(IsInitialized());
-  if (GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
-    DCHECK_GE(ToUint64(), 1UL);
-  } else {
-    DCHECK_GT(ToUint64(), 1UL);
-  }
+  DCHECK_GE(ToUint64(), 1UL);
 #endif
   QuicPacketNumber previous(*this);
   packet_number_--;
@@ -101,11 +85,7 @@
 QuicPacketNumber& QuicPacketNumber::operator+=(uint64_t delta) {
 #ifndef NDEBUG
   DCHECK(IsInitialized());
-  if (GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
-    DCHECK_GT(std::numeric_limits<uint64_t>::max() - ToUint64(), delta);
-  } else {
-    DCHECK_GE(std::numeric_limits<uint64_t>::max() - ToUint64(), delta);
-  }
+  DCHECK_GT(std::numeric_limits<uint64_t>::max() - ToUint64(), delta);
 #endif
   packet_number_ += delta;
   return *this;
@@ -114,11 +94,7 @@
 QuicPacketNumber& QuicPacketNumber::operator-=(uint64_t delta) {
 #ifndef NDEBUG
   DCHECK(IsInitialized());
-  if (GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
-    DCHECK_GE(ToUint64(), delta);
-  } else {
-    DCHECK_GT(ToUint64(), delta);
-  }
+  DCHECK_GE(ToUint64(), delta);
 #endif
   packet_number_ -= delta;
   return *this;
@@ -135,9 +111,7 @@
 
 // static
 uint64_t QuicPacketNumber::UninitializedPacketNumber() {
-  return GetQuicRestartFlag(quic_uint64max_uninitialized_pn)
-             ? std::numeric_limits<uint64_t>::max()
-             : 0;
+  return std::numeric_limits<uint64_t>::max();
 }
 
 }  // namespace quic
diff --git a/quic/core/quic_packet_number.h b/quic/core/quic_packet_number.h
index a6559d9..5348abd 100644
--- a/quic/core/quic_packet_number.h
+++ b/quic/core/quic_packet_number.h
@@ -126,11 +126,7 @@
 inline QuicPacketNumber operator+(QuicPacketNumber lhs, uint64_t delta) {
 #ifndef NDEBUG
   DCHECK(lhs.IsInitialized());
-  if (GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
-    DCHECK_GT(std::numeric_limits<uint64_t>::max() - lhs.ToUint64(), delta);
-  } else {
-    DCHECK_GE(std::numeric_limits<uint64_t>::max() - lhs.ToUint64(), delta);
-  }
+  DCHECK_GT(std::numeric_limits<uint64_t>::max() - lhs.ToUint64(), delta);
 #endif
   return QuicPacketNumber(lhs.packet_number_ + delta);
 }
@@ -138,11 +134,7 @@
 inline QuicPacketNumber operator-(QuicPacketNumber lhs, uint64_t delta) {
 #ifndef NDEBUG
   DCHECK(lhs.IsInitialized());
-  if (GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
-    DCHECK_GE(lhs.ToUint64(), delta);
-  } else {
-    DCHECK_GT(lhs.ToUint64(), delta);
-  }
+  DCHECK_GE(lhs.ToUint64(), delta);
 #endif
   return QuicPacketNumber(lhs.packet_number_ - delta);
 }
diff --git a/quic/core/quic_packet_number_test.cc b/quic/core/quic_packet_number_test.cc
index 9c0b6d8..e0184a8 100644
--- a/quic/core/quic_packet_number_test.cc
+++ b/quic/core/quic_packet_number_test.cc
@@ -32,16 +32,6 @@
   num2.UpdateMax(QuicPacketNumber(9));
   EXPECT_EQ(9u, num2.ToUint64());
 
-  if (!GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
-    QuicPacketNumber num3(std::numeric_limits<uint64_t>::max());
-    EXPECT_TRUE(num3.IsInitialized());
-    EXPECT_EQ(std::numeric_limits<uint64_t>::max(), num3.ToUint64());
-    EXPECT_EQ(std::numeric_limits<uint64_t>::max(), num3.Hash());
-    num3.Clear();
-    EXPECT_FALSE(num3.IsInitialized());
-    return;
-  }
-
   QuicPacketNumber num4(0);
   EXPECT_TRUE(num4.IsInitialized());
   EXPECT_EQ(0u, num4.ToUint64());
@@ -60,20 +50,6 @@
   EXPECT_EQ(QuicPacketNumber(101), ++num);
   EXPECT_EQ(QuicPacketNumber(100), --num);
 
-  if (!GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
-    QuicPacketNumber num2(std::numeric_limits<uint64_t>::max());
-    EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max()), num2--);
-    EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 1), num2);
-    EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 2),
-              --num2);
-
-    EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 2),
-              num2++);
-    EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 1), num2);
-    EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max()), ++num2);
-    return;
-  }
-
   QuicPacketNumber num3(0);
   EXPECT_EQ(QuicPacketNumber(0), num3++);
   EXPECT_EQ(QuicPacketNumber(1), num3);
