<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.10 (Ruby 2.6.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-ack-frequency-02" category="std" consensus="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.7 -->
  <front>
    <title>QUIC Acknowledgement Frequency</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-ack-frequency-02"/>
    <author initials="J." surname="Iyengar" fullname="Jana Iyengar">
      <organization>Fastly</organization>
      <address>
        <email>jri.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett">
      <organization>Google</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <abstract>
      <t>This document describes a QUIC extension for an endpoint to control its peer's
delaying of acknowledgements.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <t>Discussion of this draft takes place on the QUIC working group mailing list
(quic@ietf.org), which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=quic"/>. Source
code and issues list for this draft can be found at
<eref target="https://github.com/quicwg/ack-frequency"/>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/quicwg"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes a QUIC extension for an endpoint to control its peer's
delaying of acknowledgements.</t>
      <section anchor="terms-and-definitions">
        <name>Terms and Definitions</name>
        <t>The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>
        <t>In the rest of this document, "sender" refers to a QUIC data sender (and
acknowledgement receiver). Similarly, "receiver" refers to a QUIC data receiver
(and acknowledgement sender).</t>
        <t>An "acknowledgement packet" refers to a QUIC packet that contains only an ACK
frame.</t>
        <t>This document uses terms, definitions, and notational conventions described in
Section <xref target="QUIC-TRANSPORT" section="1.2" sectionFormat="bare"/> and Section <xref target="QUIC-TRANSPORT" section="1.3" sectionFormat="bare"/> of <xref target="QUIC-TRANSPORT"/>.</t>
      </section>
    </section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>A receiver acknowledges received packets, but it can delay sending these
acknowledgements. The delaying of acknowledgements can impact connection
throughput, loss detection and congestion controller performance at a data
sender, and CPU utilization at both a data sender and a data receiver.</t>
      <t>Reducing the frequency of acknowledgement packets can improve connection and
endpoint performance in the following ways:</t>
      <ul spacing="normal">
        <li>Sending UDP packets can be noticeably CPU intensive on some
platforms. Reducing the number of packets that only contain acknowledgements
can therefore reduce the amount of CPU consumed at a data receiver. Experience
shows that this cost reduction can be significant for high bandwidth
connections.</li>
        <li>Similarly, receiving and processing UDP packets can also be CPU intensive, and
reducing acknowledgement frequency reduces this cost at a data sender.</li>
        <li>Severely asymmetric link technologies, such as DOCSIS, LTE, and satellite
links, connection throughput in the data direction becomes constrained when
the reverse bandwidth is filled by acknowledgment packets. When traversing
such links, reducing the number of acknowledgments allows connection
throughput to scale much further.</li>
      </ul>
      <t>As discussed in <xref target="implementation"/> however, there can be undesirable consequences
to congestion control and loss recovery if a receiver uniltaerally reduces the
acknowledgment frequency. A sender's constraints on the acknowledgement
frequency need to be taken into account to maximize congestion controller and
loss recovery performance.</t>
      <t><xref target="QUIC-TRANSPORT"/> currently specifies a simple delayed acknowledgement
mechanism that a receiver can use: send an acknowledgement for every other
packet, and for every packet that is received out of order (Section
13.2.1 of <xref target="QUIC-TRANSPORT"/>). This
simple mechanism does not allow a sender to signal its constraints. This
extension provides a mechanism to solve this problem.</t>
    </section>
    <section anchor="negotiating-extension-use">
      <name>Negotiating Extension Use</name>
      <t>Endpoints advertise their support of the extension described in this document by
sending the following transport parameter (<xref section="7.2" sectionFormat="of" target="QUIC-TRANSPORT"/>):</t>
      <dl>
        <dt>min_ack_delay (0xff03de1a):</dt>
        <dd>
          <t>A variable-length integer representing the minimum amount of time in
microseconds by which the endpoint can delay an acknowledgement. This limit
could be based on the receiver's clock or timer granularity.</t>
        </dd>
      </dl>
      <t>An endpoint's min_ack_delay MUST NOT be greater than its max_ack_delay.
Endpoints that support this extension MUST treat receipt of a min_ack_delay that
is greater than the received max_ack_delay as a connection error of type
TRANSPORT_PARAMETER_ERROR. Note that while the endpoint's max_ack_delay
transport parameter is in milliseconds (<xref section="18.2" sectionFormat="of" target="QUIC-TRANSPORT"/>),
min_ack_delay is specified in microseconds.</t>
      <t>The min_ack_delay transport parameter is a unilateral indication of support for
receiving ACK_FREQUENCY frames.  If an endpoint sends the transport parameter,
the peer is allowed to send ACK_FREQUENCY frames independent of whether it also
sends the min_ack_delay transport parameter or not.</t>
      <t>Receiving a min_ack_delay transport parameter indicates that the peer might send
ACK_FREQUENCY frames in the future. Until an ACK_FREQUENCY frame is received,
receiving this transport parameter does not cause the endpoint to
change its acknowledgement behavior.</t>
      <t>Endpoints MUST NOT remember the value of the min_ack_delay transport parameter
they received. Consequently, ACK_FREQUENCY frames cannot be sent in 0-RTT
packets, as per <xref section="7.4.1" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
      <t>This Transport Parameter is encoded as per <xref section="18" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
    </section>
    <section anchor="ackfrequency-frame">
      <name>ACK_FREQUENCY Frame</name>
      <t>Delaying acknowledgements as much as possible reduces both work done by the
endpoints and network load. An endpoint's loss detection and congestion control
mechanisms however need to be tolerant of this delay at the peer. An endpoint
signals the frequency it wants to receive ACK frames to its peer using an
ACK_FREQUENCY frame, shown below:</t>
      <artwork><![CDATA[
ACK_FREQUENCY Frame {
  Type (i) = 0xaf,
  Sequence Number (i),
  Ack-Eliciting Threshold (i),
  Request Max Ack Delay (i),
  Reserved (6),
  Ignore CE (1),
  Ignore Order (1)
}
]]></artwork>
      <t>Following the common frame format described in <xref section="12.4" sectionFormat="of" target="QUIC-TRANSPORT"/>, ACK_FREQUENCY frames have a type of 0xaf, and contain the
following fields:</t>
      <dl>
        <dt>Sequence Number:</dt>
        <dd>
          <t>A variable-length integer representing the sequence number assigned to the
ACK_FREQUENCY frame by the sender to allow receivers to ignore obsolete
frames, see <xref target="multiple-frames"/>.</t>
        </dd>
        <dt>Ack-Eliciting Threshold:</dt>
        <dd>
          <t>A variable-length integer representing the maximum number of ack-eliciting
packets the recipient of this frame can receive without sending an
acknowledgment. In other words, an acknowledgement is sent when more than this
number of ack-eliciting packets have been received. Since this is a maximum
value, a receiver can send an acknowledgement earlier. A value of 0 results in
a receiver immediately acknowledging every ack-eliciting packet.</t>
        </dd>
        <dt>Request Max Ack Delay:</dt>
        <dd>
          <t>A variable-length integer representing the value to which the endpoint
requests the peer update its <tt>max_ack_delay</tt>
(<xref section="18.2" sectionFormat="of" target="QUIC-TRANSPORT"/>). The value of this field is in
microseconds, unlike the 'max_ack_delay' transport parameter, which is in
milliseconds. Sending a value smaller than the <tt>min_ack_delay</tt> advertised
by the peer is invalid. Receipt of an invalid value MUST be treated as a
connection error of type PROTOCOL_VIOLATION.</t>
        </dd>
        <dt>Reserved:</dt>
        <dd>
          <t>This field has no meaning in this version of ACK_FREQUENCY.  The value of this
field MUST be 0x00. Receipt of any other value MUST be treated as a
connection error of type FRAME_ENCODING_ERROR.</t>
        </dd>
        <dt>Ignore CE:</dt>
        <dd>
          <t>A 1-bit field representing a boolean truth value. This field is
set to <tt>true</tt> by an endpoint that does not wish to receive an immediate
acknowledgement when the peer receives CE-marked packets (<xref target="out-of-order"/>).
0 represents 'false' and 1 represents 'true'.</t>
        </dd>
        <dt>Ignore Order:</dt>
        <dd>
          <t>A 1-bit field representing a boolean truth value. This field is
set to <tt>true</tt> by an endpoint that does not wish to receive an immediate
acknowledgement when the peer receives a packet out of order
(<xref target="out-of-order"/>). 0 represents 'false' and 1 represents 'true'.</t>
        </dd>
      </dl>
      <t>ACK_FREQUENCY frames are ack-eliciting. However, their loss does not require
retransmission if an ACK_FREQUENCY frame with a larger Sequence Number value
has been sent.</t>
      <t>An endpoint MAY send ACK_FREQUENCY frames multiple times during a connection and
with different values.</t>
      <t>An endpoint will have committed a <tt>max_ack_delay</tt> value to the peer, which
specifies the maximum amount of time by which the endpoint will delay sending
acknowledgments. When the endpoint receives an ACK_FREQUENCY frame, it MUST
update this maximum time to the value proposed by the peer in the Request Max
Ack Delay field.</t>
    </section>
    <section anchor="multiple-frames">
      <name>Multiple ACK_FREQUENCY Frames</name>
      <t>An endpoint can send multiple ACK_FREQUENCY frames, and each one of them can
have different values in all fields. An endpoint MUST use a sequence number of 0
for the first ACK_FREQUENCY frame it constructs and sends, and a strictly
increasing value thereafter.</t>
      <t>An endpoint MUST allow reordered ACK_FREQUENCY frames to be received and
processed, see <xref section="13.3" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
      <t>On the first received ACK_FREQUENCY frame in a connection, an endpoint MUST
immediately record all values from the frame. The sequence number of the frame
is recorded as the largest seen sequence number. The new Ack-Eliciting Threshold
and Request Max Ack Delay values MUST be immediately used for delaying
acknowledgements; see <xref target="sending"/>.</t>
      <t>On a subsequently received ACK_FREQUENCY frame, the endpoint MUST check if this
frame is more recent than any previous ones, as follows:</t>
      <ul spacing="normal">
        <li>If the frame's sequence number is not greater than the largest one seen so
far, the endpoint MUST ignore this frame.</li>
        <li>If the frame's sequence number is greater than the largest one seen so far,
the endpoint MUST immediately replace old recorded state with values received
in this frame. The endpoint MUST start using the new values immediately for
delaying acknowledgements; see <xref target="sending"/>. The endpoint MUST also replace the
recorded sequence number.</li>
      </ul>
    </section>
    <section anchor="immediateack-frame">
      <name>IMMEDIATE_ACK Frame</name>
      <t>A sender can use an ACK_FREQUENCY frame to reduce the number of acknowledgements
sent by a receiver, but doing so increases the chances that time-sensitive
feedback is delayed as well. For example, as described in <xref target="loss"/>, delaying
acknowledgements can increase the time it takes for a sender to detect packet
loss. The IMMEDIATE_ACK frame helps mitigate this problem.</t>
      <t>An IMMEDIATE_ACK frame can be useful in other situations as well. For example,
it can be used with a PING frame (Section 19.2 of <xref target="QUIC-TRANSPORT"/>) if a
sender wants an immediate RTT measurement or if a sender wants to establish
receiver liveness as quickly as possible.</t>
      <t>An endpoint SHOULD send a packet containing an ACK frame immediately upon
receiving an IMMEDIATE_ACK frame. An endpoint MAY delay sending an ACK frame
despite receiving an IMMEDIATE_ACK frame. For example, an endpoint might do this
if a large number of received packets contain an IMMEDIATE_ACK or if the
endpoint is under heavy load.</t>
      <artwork><![CDATA[
IMMEDIATE_ACK Frame {
  Type (i) = 0xac,
}
]]></artwork>
    </section>
    <section anchor="sending">
      <name>Sending Acknowledgments</name>
      <t>Prior to receiving an ACK_FREQUENCY frame, endpoints send acknowledgements as
specified in <xref section="13.2.1" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
      <t>On receiving an ACK_FREQUENCY frame and updating its recorded <tt>max_ack_delay</tt>
and <tt>Ack-Eliciting Threshold</tt> values (<xref target="multiple-frames"/>), the endpoint MUST send an
acknowledgement when one of the following conditions are met:</t>
      <ul spacing="normal">
        <li>Since the last acknowledgement was sent, the number of received ack-eliciting
packets is greater than or equal to the recorded <tt>Ack-Eliciting Threshold</tt>.</li>
        <li>Since the last acknowledgement was sent, <tt>max_ack_delay</tt> amount of time has
passed.</li>
      </ul>
      <t><xref target="out-of-order"/>, <xref target="congestion"/>, and <xref target="batch"/> describe exceptions to this
strategy.</t>
      <t>An endpoint is expected to bundle acknowledgements when possible. Every time an
acknowledgement is sent, bundled or otherwise, all counters and timers related
to delaying of acknowledgments are reset.</t>
      <t>The receiver of an ACK_FREQUENCY frame can continue to process multiple available
packets before determining whether to send an ACK frame in response, as stated in
<xref section="13.2.2" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
      <section anchor="out-of-order">
        <name>Response to Out-of-Order Packets</name>
        <t>As specified in <xref section="13.2.1" sectionFormat="of" target="QUIC-TRANSPORT"/>, endpoints are expected to
send an acknowledgement immediately on receiving a reordered ack-eliciting
packet. This extension modifies this behavior.</t>
        <t>If the endpoint has not yet received an ACK_FREQUENCY frame, or if the most
recent frame received from the peer has an <tt>Ignore Order</tt> value of <tt>false</tt>
(0x00), the endpoint MUST immediately acknowledge any subsequent packets that
are received out of order.</t>
        <t>If the most recent ACK_FREQUENCY frame received from the peer has an <tt>Ignore
Order</tt> value of <tt>true</tt> (0x01), the endpoint does not make this exception. That
is, the endpoint MUST NOT send an immediate acknowledgement in response to
packets received out of order, and instead continues to use the peer's
<tt>Ack-Eliciting Threshold</tt> and <tt>max_ack_delay</tt> thresholds for sending
acknowledgements.</t>
      </section>
      <section anchor="congestion">
        <name>Expediting Congestion Signals</name>
        <t>An endpoint SHOULD send an immediate acknowledgement when a packet marked
with the ECN Congestion Experienced (CE) codepoint in the IP header is
received and the previously received packet was not marked CE.</t>
        <t>Doing this maintains the peer's response time to congestion events, while also
reducing the ACK rate compared to <xref section="13.2.1" sectionFormat="of" target="QUIC-TRANSPORT"/> during
extreme congestion or when peers are using DCTCP <xref target="RFC8257"/> or other
congestion controllers that mark more frequently than classic ECN <xref target="RFC3168"/>.</t>
        <t>If the most recent ACK_FREQUENCY frame an endpoint has received from the peer
has an <tt>Ignore CE</tt> value of <tt>true</tt> (0x01), receipt of a CE marked packet
SHOULD NOT cause an endpoint to send an immediate acknowledgement.  The endpoint
still sends an immediate acknowledgement if it would have for a non CE marked
packet.  If an immediate acknowledgement is not sent, the CE marks are reported
in the next acknowledgement.</t>
        <t>The Ignore-CE bit SHOULD NOT be set if the sender sets ECT(1) in its outgoing
packets, such as with L4S, because it delays the congestion controller's ability
to quickly respond to congestion.</t>
      </section>
      <section anchor="batch">
        <name>Batch Processing of Packets</name>
        <t>For performance reasons, an endpoint can receive incoming packets from the
underlying platform in a batch of multiple packets. This batch can contain
enough packets to cause multiple acknowledgements to be sent.</t>
        <t>To avoid sending multiple acknowledgements in rapid succession, an endpoint MAY
process all packets in a batch before determining whether a threshold has been
met and an acknowledgement is to be sent in response.</t>
      </section>
    </section>
    <section anchor="computation-of-probe-timeout-period">
      <name>Computation of Probe Timeout Period</name>
      <t>On sending an update to the peer's <tt>max_ack_delay</tt>, an endpoint can use this new
value in later computations of its Probe Timeout (PTO) period; see <xref section="5.2.1" sectionFormat="of" target="QUIC-RECOVERY"/>. The endpoint MUST however wait until the ACK_FREQUENCY
frame that carries this new value is acknowledged by the peer.</t>
      <t>Until the frame is acknowledged, the endpoint MUST use the greater of the
current <tt>max_ack_delay</tt> and the value that is in flight when computing the PTO
period. Doing so avoids spurious PTOs that can be caused by an update that
increases the peer's <tt>max_ack_delay</tt>.</t>
      <t>While it is expected that endpoints will have only one ACK_FREQUENCY frame in
flight at any given time, this extension does not prohibit having more than one
in flight. When using <tt>max_ack_delay</tt> for PTO computations, endpoints MUST use
the maximum of the current value and all those in flight.</t>
      <t>When the number of in-flight ack-eliciting packets is larger than the
ACK-Eliciting Threshold, an endpoint can expect that the peer will not need to
wait for its <tt>max_ack_delay</tt> period before sending an acknowledgement. In such
cases, the endpoint MAY therefore exclude the peer's 'max_ack_delay' from its PTO
calculation.  When Ignore Order is enabled and loss causes the peer to not
receive enough packets to trigger an immediate acknowledgement, the receiver
will wait 'max_ack_delay', increasing the chances of a premature PTO.
Therefore, if Ignore Order is enabled, the PTO MUST be larger than the peer's
'max_ack_delay'.</t>
    </section>
    <section anchor="implementation">
      <name>Determining Acknowledgement Frequency</name>
      <t>This section provides some guidance on a sender's choice of acknowledgment
frequency and discusses some additional considerations. Implementers can select
an appropriate strategy to meet the needs of their applications and congestion
controllers.</t>
      <section anchor="congestion-control">
        <name>Congestion Control</name>
        <t>A sender needs to be responsive to notifications of congestion, such as
a packet loss or an ECN CE marking. Also, window-based congestion controllers
that strictly adhere to packet conservation, such as the one defined in
<xref target="QUIC-RECOVERY"/>, rely on receipt of acknowledgments to send additional data into
the network, and will suffer degraded performance if acknowledgments are delayed
excessively.</t>
        <t>To enable a sender to respond to potential network congestion, a sender SHOULD
cause a receiver to send an acknowledgement at least once per RTT if there are
unacknowledged ack-eliciting packets in flight. A sender can accomplish this by
sending an IMMEDIATE_ACK frame once per round-trip time (RTT), or it can set the
Ack-Eliciting Threshold and Request Max Ack Delay values to be no more than a
congestion window and an estimated RTT, respectively.</t>
      </section>
      <section anchor="burst-mitigation">
        <name>Burst Mitigation</name>
        <t>Receiving an acknowledgement can allow a sender to release new packets into the
network. If a sender is designed to rely on the timing of peer acknowledgments
("ACK clock"), delaying acknowledgments can cause undesirable bursts of data
into the network. A sender MUST limit such bursts. In keeping with Section 7.7
of <xref target="QUIC-RECOVERY"/>, a sender can either employ pacing or cause a receiver to
send an acknowledgement for at least each initial congestion window of received
data.</t>
      </section>
      <section anchor="loss">
        <name>Loss Detection and Timers</name>
        <t>Acknowledgements are fundamental to reliability in QUIC. Consequently,
delaying or reducing the frequency of acknowledgments can cause loss detection
at the sender to be delayed.</t>
        <t>A QUIC sender detects loss using packet thresholds on receiving an
acknowledgement (Section 6.1.1 of <xref target="QUIC-RECOVERY"/>); delaying the
acknowledgement therefore delays this method of detecting losses.</t>
        <t>Reducing acknowledgement frequency reduces the number of RTT samples that a
sender receives (Section 5 of <xref target="QUIC-RECOVERY"/>), making a sender's RTT estimate
less responsive to changes in the path's RTT. As a result, any mechanisms that
rely on an accurate RTT estimate, such as time-threshold loss detection (Section
6.1.2 of <xref target="QUIC-RECOVERY"/>) or Probe Timeout (Section 6.2 of <xref target="QUIC-RECOVERY"/>),
will be less responsive to changes in the path's RTT, resulting in either
delayed or unnecessary packet transmissions.</t>
        <t>To limit these consequences of reduced acknowledgement frequency, a sender
SHOULD cause a receiver to send an acknowledgement at least once per RTT if
there are unacknowledged ack-eliciting packets in flight. A sender can
accomplish this by sending an IMMEDIATE_ACK frame once per round-trip time
(RTT), or it can set the Ack-Eliciting Threshold and Request Max Ack Delay
values to be no more than a congestion window and an estimated RTT,
respectively.</t>
        <t>A sender might use timers to detect loss of PMTUD probe packets. A sender SHOULD
bundle an IMMEDIATE_ACK frame with any PTMUD probes to avoid triggering such
timers.</t>
      </section>
      <section anchor="migration">
        <name>Connection Migration</name>
        <t>To avoid additional delays to connection migration confirmation when using this
extension, a client can bundle an IMMEDIATE_ACK frame with the first non-probing
frame (<xref section="9.2" sectionFormat="of" target="QUIC-TRANSPORT"/>) it sends or it can send only an
IMMEDIATE_ACK frame, which is a non-probing frame.</t>
        <t>An endpoint's congestion controller and RTT estimator are reset upon
confirmation of migration (<xref section="9.4" sectionFormat="of" target="QUIC-TRANSPORT"/>), which can impact
the number of acknowledgements received after migration. An endpoint that has
sent an ACK_FREQUENCY frame earlier in the connection SHOULD update and send a
new ACK_FREQUENCY frame immediately upon confirmation of connection migration.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TBD.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>TBD.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="QUIC-TRANSPORT">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
              <organization>Fastly</organization>
            </author>
            <author initials="M." surname="Thomson" fullname="Martin Thomson" role="editor">
              <organization>Mozilla</organization>
            </author>
            <date year="2021" month="May"/>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="QUIC-RECOVERY">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
              <organization>Fastly</organization>
            </author>
            <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
              <organization>Google</organization>
            </author>
            <date year="2021" month="May"/>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8257">
          <front>
            <title>Data Center TCP (DCTCP): TCP Congestion Control for Data Centers</title>
            <author fullname="S. Bensley" initials="S." surname="Bensley">
              <organization/>
            </author>
            <author fullname="D. Thaler" initials="D." surname="Thaler">
              <organization/>
            </author>
            <author fullname="P. Balasubramanian" initials="P." surname="Balasubramanian">
              <organization/>
            </author>
            <author fullname="L. Eggert" initials="L." surname="Eggert">
              <organization/>
            </author>
            <author fullname="G. Judd" initials="G." surname="Judd">
              <organization/>
            </author>
            <date month="October" year="2017"/>
            <abstract>
              <t>This Informational RFC describes Data Center TCP (DCTCP): a TCP congestion control scheme for data-center traffic.  DCTCP extends the Explicit Congestion Notification (ECN) processing to estimate the fraction of bytes that encounter congestion rather than simply detecting that some congestion has occurred.  DCTCP then scales the TCP congestion window based on this estimate.  This method achieves high-burst tolerance, low latency, and high throughput with shallow- buffered switches.  This memo also discusses deployment issues related to the coexistence of DCTCP and conventional TCP, discusses the lack of a negotiating mechanism between sender and receiver, and presents some possible mitigations.  This memo documents DCTCP as currently implemented by several major operating systems.  DCTCP, as described in this specification, is applicable to deployments in controlled environments like data centers, but it must not be deployed over the public Internet without additional measures.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8257"/>
          <seriesInfo name="DOI" value="10.17487/RFC8257"/>
        </reference>
        <reference anchor="RFC3168">
          <front>
            <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
            <author fullname="K. Ramakrishnan" initials="K." surname="Ramakrishnan">
              <organization/>
            </author>
            <author fullname="S. Floyd" initials="S." surname="Floyd">
              <organization/>
            </author>
            <author fullname="D. Black" initials="D." surname="Black">
              <organization/>
            </author>
            <date month="September" year="2001"/>
            <abstract>
              <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </reference>
      </references>
    </references>
    <section anchor="change-log">
      <name>Change Log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section prior to publication of a
final version of this document.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The following people directly contributed key ideas that shaped this draft:
Bob Briscoe, Kazuho Oku, Marten Seemann.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAEC3zGIAA9VcW3PbOJZ+x6/AOg+xuyS17U7fPDU747aVac/EsddWZqpr
ayuBSEjCmiI1BBjH7fL89j0XgAApyp3Mbm3tpqrbkkjicq7fuYDj8Vg44wp9
Ivf+7d3FmTzN7srqvtD5Uq916eTrWv+90WX2sCfyKivVGu7Ma7VwY6PdYvz3
xmRjld2NF+G+caGctk7k8OdEPp6fzqZPIoMvy6p+OJHW5SKrSqtL29gT6epG
C7Op6ZN1x4eHPx4eC1VrdSJntSrtpqqduK/qu2VdNZsTiYsUwjpV5u9VUZUw
x4O2QqjGrar6REg5hv+kNCWM/ueJvHjQ5VLV9Buv/s+qVJ2fq3p5Il8r64oH
+q7XyhQn8j9rM8E9/nGJ3ydZte4OfjGRt/fauWToC1Umv9G4f6qqZaHTcQ3s
Cu/545Iu0cCirOq1cuajPhFwL25yPLs5fXt7fXUzO6GnUy6dyFP57vx6/JOy
OpeXTeHMptCf4DOQRd7qrKl1JN8ePc/8OD48Phoffku/WF0bbU25qHgGKW9e
w9A/Hh4e+u/nVxcn8uhwcvT9qx++/xquttciufHf2P8dJvszpB8iP/6rK9yr
zo2r6uE5LidytqrWtip7c1yq2ply6yLNcln9aopCDU8T6H4zPbv66/Tml22y
yzeVtfJcO505U5VE7LOqXIK441f46GDELyf38TPkPv6/Qe6OsMcZugLfDp8I
/TaZxXg8lmpuXa0yJ8RsZawE09KQucm1zWoz11Yq4obUnxyYCiTvoqqB4lKX
+aYycKurZMYUl8ZZudG6fmlFrgv1YMqlrBZSdW2ZnfDcZeX0+7f4P1e9v9Eq
1zUYkHNjs8bSTPCoo1WhnZNO3cFyNoXKtISLbqV5ZWiUcCIyTBJ1G78VBmzf
PprFP6LxmAA9DkbyfmWylYQhVZ2tQMtBUZ349//YXzm3sSdff41P+0uT8NjX
+MPXVtOfP5DxeI+j/x4HPwB+VE2daTCmuSZJNNY2sFC8hWiVbCEDus01/NqU
/ZmXxq2aORqhr3Hce5g2teYHQLO/+Y3+iTaKAky2CmjRG1c+N+6Bp/7a5DnI
hnghL5B5eUO69L8tBy9eyJmu15Yod64XpjS4DIvr0PJOPwB3cyv3Lt/dzvZG
/Fe+vaLPN1NY0c30HD/f/nz65k37Idxx+/PVuzdwXfhP8cmzq8vL6dtzfhh+
lb2fLk9/gT+4qL2r69nF1dvTN3tAcmKmaKkD/hG3DaQHAuh6U4NJAgbYlmw5
PvPT2bU8eiUfH/8FTMnx0dGPT0/+yw9gYZ6exP1KlzxZVRYPkr+CfD9ItdmA
3OEgqiiAzRvjVGFHOIVdVfelXOlaAxkvWB9qsIBRa/wqYTfg5UG59uD6AnQM
l+y5CdZRSb4q92EBoscieCLToAw1yrlZo3IUDzBg+HnXkOG6wEH7fPcToiCe
lnKvf3UDP2g3MDJfgM2BhKOkKbCITDEQw9Ozv4hFDcZw0hfhxoL0OhSyEfCl
lTAmONggUiFV4JAf4X681uGfeHy89Y7maHIcPLv//g2SuwsTnp5QrsHHAYxQ
rFOnLUFSWtjwa+63BmuaNw60hxSaNIdoheoD7LW6zx6LzlfL53SMhjJrmICI
VvLKhVuBEVmuNg2IR4HeNO940yx6U6/TBax9o2uyOSVYYOCBIl4L5iaT8+z6
nWwcWOBf2TDBXfPKrfytQdJIJrqCAiS70WCD/FZla/gG9hSoFbZWVx91sjcc
XrRWKV2zYS1ZwG6qe5zpXj1YAHpjYChTGcBcZ3TQbJAQk2k1BzHD3aGig/37
SD7IVmv0ruCTHE4C7OhsomzWc9gu7CCMSbJLIusFeItfMBxO7FCxYUzUaRhR
03hqDQaeFBxXgugdJDyPrIjUlNNPG4Q5sGsYEE2Fn5ssQ1ZZx+Om3sOaZWkW
Br6x31qZ5UrOgZj3JncrXFdLYvLgqUHgiXHfyFvgSKbBhQ8QFKwX2csOKUl2
YII6EK/P8CgNTA2b7CPunqWLl6aBChotg31Yr7WrTQYOubwDO5CtyqqolgAB
R9I2gAbAlp5fnd1e3I7km9mU5dgCaiwK45B6+BzcmwhYVJ4gUjR/bmp/w1yD
v9WWWATwypTAJbTqMBqbaVid1ZG4iEgWgIjhtvlDsvtU2ifybzAChGcKHwYq
IWNx/X599bDkdQez6EdQGBJTINP9gLW1mSq0XOPQi6ZGQURDDRaCgRn7tMdH
ULyCuEOaDi4NhAz3NWLZDVIFiATAdg36QzpqmZEQKTJc6FkZIj7ZIyAlqHX9
IA3sIZrPpjSFU7qGbaTCkFrGrsRMIERjwXiZ8MPZACF7oiaiqJUatsreHaFn
ifIKvijLSAnh41p9Ag34Ve+wlijT3a0ktghI+vjY9xsS4sUaFgFbsxudgTIS
7rJEarbyesubijWItCqNXbOGJ8RCFoD3OyECoJPc0itQc01Lq5BpgkWNVSBe
S/2uSZxW1ZAtAoCG6MH7RHH0zeR4coQXtjd4gP4KAJTfUVx5XsFOwdKyeMrW
U6A4gllSDCkT9vmBIhpFL2ByoldCEHi8Kj5qNhdwC0jhmrzzW70Euw6iCwoz
bQd5By5WTL3rgKFy2L8zlqyvqUHdNhjHM8LSCRTuwL0O+AJ9FokLT3yPC2kB
oC/iFodEjFDje4AaA9DiANzV2pTvgSXvGSDsH35aLA6/yfWRwouYkvioaoMK
Ny4g5ETrAoZ2CcPXGhCqRYzjVwMjmXWzThyLM2v0k2AU1iarKwuiWwL+nj/4
0In2HXxrRCnbssUMAuO0No58R1PkqEpzSpVUAa+ypKJqFlV2JzFcghXUEMyp
sgHnYtwDw8QwKdza3X+ICHDwZa0V0hFEtSSJARWNt04S1pIwB34SxyI3aUSH
Q/ECN0QZ1ZsXRxDwXGfOZFN5d3J0Myp1IrquK7LQ7mGjRcvi99enN6eX09n0
5v305ubqZiIxQub1AgsK3WHBy94WxZBUwSJBLMFXQ0jq+ZkI2tEPOyRt1BM0
GCZYpZwHjAIy4XitR6HhtSgy4kgzVGtQjYyxIqwhMARsj4iQAqD9+9cY7E3f
nv0iCeSD/suLRSf8RC0jVzA070jgBQxJaQWog2zcyTIOTYAr0xu0QqwY4L7R
RCI4Rwwj4nS/vWngM9g2grgtTPocWjFtdAvd/A7WAMx4v2LHytnUNK6B4FC+
A30vfIjUvzm156OE5KQRQ2tqDXWmGtuVRSCnQMO71KR6fV8z1yv10VQIJqIa
tspbw00EWXDEj6podLCyv0knQZFy2MUE03+MMhwi00EKgeHCPSDoxaUBwQ7H
N7OZaMMwhfmLWqbm+BU7tYFYjwxdm+WV16mwA5Kocs4JdAc8+mFn5Nhd8msc
TYjzEONtBXgw9Nrj2A3ADYNIKyAjCr4wQQaMKzWaccRKOno4DIG1ozuKSgH1
uqb2s0LDiEBsAIEd8FQBGlJlkphgexglujOrYIdve2Eg6N29IstdBV4joQJH
4deQdALIw4HIkHaMfN5krsEEgLv8xz/+IQboLR/BZ83AMMt9cyB/Lw8/qcUI
frr18FW+ZYANV/Hn0+xuPC1MZsizzlbgZVcV+Dt/+QafglDlUn3CW+U5O+5w
0eoa3cX+d/T9Ylli2Hc2lftH6Q9XDLOODsQTrVq8jlBihRh0vcakHK2eM4Nd
WJKI3vHkFTBD9IVvh7KA2gJMJjeFLCRSBEmgEBZFKuIacA9FjlF1j1Zfik1C
pBBiGWVRMFiqcEY5aM9YwhP4yIAyAA0WFCZoNQdsqCnE452CbGjg/OPa13HG
/DNp5Q4OfzHgwpABAFcnPhvrMDDmEtpMASEJszE6UR3eJOKuoAP3xq0QiAeQ
qRC7dYOhibwoGeBLyqaOhkIB9O74F8NUuUb6eEBjMCWxY73taklG5lqXiR2+
NWXmkTd5fb93GI3s+6gfqewKUrSqC0NGIjqGQ0x1ApssY9VkJAPhfm4wfE8D
aVwrBzND6yfPPKCiX8pdXh5I2DZWpuwGTWGjI282WJ0iw/WhA+M+wO2fA9E4
/Ze4S8ojgP4x5uuh+BEAr8Lcsdd+2Znw5SBoiuUSP1ZEkJM2Zab8/HatKOxt
cfCHjuf+EKMpTPV4PQ2IzJQwiMkxfxYBdxl+9jMQWECHQoibfKrqpKW6mFpe
31zNrs6u3rz/68XVm1NM4hOj2dwSb2eRYCuFuAZiR3BksKsQx1GuhcFpx9wA
/twiPRoSGiss9PDT4WFvSz7S/id39BpDg/cw/9X5xds/+QBBiNZleIE9Gs/B
XfJaOkKqABCAzUMG1Q1IMq1ikpKBdmE15Tc+YFPAB8pIpWUexKItDLw3dpW6
ZMrIeg3sGCLWZbIuLeP9QxZWPl6r+i4mwlH6waqNq8WY0gso6zDcYdyOlS8X
gBL0S3JFR50LuO6XkS7kOf+/kkaF9EuabWHz0CfQl5Jn0NtjSatjIyfy5ySx
Z2qPCcMu0aqZWkPsQBZkbbh0axa7Ig50WLAriO3RhvYBFZFdoDKSN8EVd+N/
eXn6yzNRW/DdlEaAZTY1M7dXHqBF5Gax0Jhv41ltb6J7MHfs2BBbGUcK2jfU
0eYH1nmrKWIGL3X8vUzLcF6FZu6Uf3rpzTYZnD4VRWaQ8COE0GhwhHc7ZN/C
umg1fhe8pU1dQTjBGeloqnnOxFuKCGhJTYCIWPwKbBjA1lY+vuhDrC7lWzSw
Hh4mwDUUba2AehjbcLi4xocFca3P3lBFZYDaiTnYEGNAq7ZwJ6INwXV8ANam
hm0PBtLOpyebzMdVlCEY+WKXxRIEtnoAKAJjTxGKFx3MlquF4zR7f00BvpKS
6x1Cz3FWm3dCAfclGIjqPahtscQ3O2uWV2Wyx3a0wc2WHZUadawgyVgKwzD/
XedEe8+JRV2tfXyHFVtypQN0b+8QnKZAIpCTxAtkQCwCX7ITnYd5xFLf74rM
BHJlOCzzSwyuOd1Ig+qAohAKrlv12N95anu1DWQF/jfzNinxLG1HXaWmZWQr
DcszHmW0iZs1lwczza6nJHgBZv6jqRqsb2hOZHBoxnXOi4SoL+0WzQ3b9K2U
ZqA16hnTu0Kwo+qh1frwKsYrk8+b+XNmpTl9Fa03a0fgfJcQOXkvNtah0SPD
71kc2CBkC/cSeewOD0/XzmcWnJetYFaSmRfUt5XvytVsi8fAVFQiDVvgSDdu
oifnZGwvLi+n5xens+l7TIj4fFGoeoUi0C53TAClrTAP1Q19XdpyNSOJtbhb
Ia9wp7Bkb9m8w8OMUNamLsG7jLHV1GBrpVhonc8VirSNVS0r73VRTORrrDt9
UlggGm210jw+IvrAVMVOFeSuAL8Wzgcbts/cQEZtS0mCgLNbHmVRwY6Z0qUq
E2uliw3WH5xZth40VpXAeA89FAqhVi8aTHj7CABo0SjuNhncuzAueTQPuOka
gL8feL+16T9yfDhQcCMg5ls0fAItxaHyZjbDmMc2NaNQWAAVXDtPAJVADyEE
BkQr2ki7gP+DjaHlY2vZHZXb2xxkz5v5BiwO8gOm9RkkzlvEdF7X6G6qMslM
q0Ei97w5QMRu90w6ugCJ2hgXHOZzg3ZlMZmBU/B5xRaZKEbWKlGgfm9P7Pjo
T8Y0TxOzqBgNMWCl1ccHTs1ysnJA2QeSldkoZAnBPoRI/bTXCvD4ItghIa5r
U9UxWok02/ZPMXvMzNzOR4tOnaiDPY53ZtGvyt+cm7AUoVcK0V0CCvr5E7zz
ww7n/yFY7v2BXN/BkEvzqamt7jiK2SL4TKq7mCQxXrtrrHQ77jPyOTF0bti7
0h9PcRZu1DPGEdrtyBb23SfK7d8bVQRIH+m0iyaTL1pePwrqhTUQv9HiEIBS
p0M3VB2BTMQyAn5Hdj0+zpXLVk9PrckH3cv0hqnovK5hA4DTy15VmEotn0Dq
nC87gPYUW80dlhnWWig5pZQgLXmAuybslkfLkapkuyGyR3uAHZm4bUwr4wao
co0yicXNXJBvGWrM82pC4M1S9nGW1MJ96mtI/NEdoBUxJYecHuTHMEl9xP5l
2FqoZIH3oCYydHL1mi1tqGSG6mfX8qIW2g2W0LjL1FFiqtsFiWo8mJDkht4b
PwDOcMWM5+LFtV/U44uOPFB30RebjNQQIS0T9otdqeTUr1Qde5OEWF0d8xli
TgTFHoF1lYfg3ti0tulxbiuYnFd08kG7NEIbNq2tJ4DxrRMe2zNn2ofb4Iki
chwfhvuQ5ro+xLzkB8oCfRD7mIsctG3DCXNNwUSMWjodjELVyXrSxFQkwLry
QWQ5HC9/1nbE1nY474a7Oervpk1JrdWdDj0d3n4g/6hdY4gCWH8OEhOR0Zbs
RM1AEQv0GCQDGzRTWqdV3qosGbFQNfft8bt9FHmwnpl14TLD2O3kUNpXjy2g
OQ+bHI659dXVxxeJBX4Gqj1HErKmLZjjDC6n1nCH07O36cSxIzWX+2fTA4mF
cW+8Od67uEa4k1M0KNJsBhPMB7Zp/OxnvleB8ZRDPpsCAc6rto9hjR1j1Cwe
CZ/w0me+krq2xj5wO/L9NtTu0emuRHOJXggTgxtVs8v5HJvl85HYtoZ4O50T
2MnOSZM7qbUPNs/PZmfXMPgf8LjA8bffwyDBDYnBvkMfciEtOEPga+iYeCBs
kBVYSs2IPzzuN0ff/UDG+zN1N0XCqLDDuix6pulsuluRO31WZ1PZqQaIeHjD
t530jp38pqT6ak1sMXCYYeUWnueVfkGNB9S8RklFjh5LPGUWVtm6CN+R9Mxo
LKYR4fkxAhjA8huM59WhBCnZ2ghjBaboGB7HakZCHupoccGJ+CDOop2ans32
jw5Q1RA3g7FaVtG9Ja3QpL5vXt2OsImZiG0c4xgf1w/JHOiTmpvCuAdEPSEY
ZBXLu8rFtuknRHryOvaJA+MjOmAciB0O3TMHGNL7kxvdZHEosQB8rdZpXToI
pKBoqiAsFrr1OYtJc+H0LYhq+63J5fP1gLzAikCQhs3S0SFWXigjCuujTs7P
+lrGrAKYVpm8jU13P4cuR23w1iYjQm2lWk9/CZlegqNtOBB39gwAVNGfyFBx
ERCpcMp6sEUg7iT1h5yGOgNj2Li2lw+YC7fOwLqiZ7wG21/lFOUlMXmoRFSp
Ze45vW1uswtFZdL3gi0KLIY6Cski+0VYXAUKe3cl+9ezqwMUK1hPyMcFy/0t
Gm4RDHc4gDqcpgudTvcKFKShHjvvG6K99LlaPrGk6roFjG36kFojIp071RYg
67t23Dbrm949hGYCwAjxIIemwreWb0du3r2GYgT3eAM9FwXlOMgpMVWD+wMC
CqbfRJ6H7B/JNMJ48HCYfoabbNg4JbFISXJfMm1LUAjKOnnDYSHA04/kjE0v
1MMJYhwQS3Z0xgYj8+HyhfC7w355wLlLTGUREhjJXjNwiypBz1YGzS1CfVTb
tkcGphEtwXxljp13n9joPYAwHSlN45jAQJGWDH1uITCQGUUqWqBoVFZHdhGd
fGEwpg9MOQ77HezewT5tLseG3DvWhodg6bYyMitkt0OV+IBE822AgpQEdz/Q
6+J1MViqxDxsefGLkvyUyFBc+sJ/+gvX0mgUQP5Fk6dQe6vjhXwD2QeQ50wV
WVMojhWYhZ2+O2rlxMg6j0dUSKKTdh4wY7DngFzltp9wtVku6WTIbpAwCvka
Pj9JlCTq9ZY/kkklMU24E4QCsLxW2P6Lm5sgZmC6jBAa7NjYKCh3W/vqCUWI
WXorYet/njiY057jaN9dAb69d2zId89ab4DbUxx4sk4uG5OT46/KNiWNRwVW
lcn0dk4lObuDPArnlfxgKueEHJ/0tDBLzQoIYhXWhOiZi88FLEigCG6wDl4T
p0Lqic7+aO08StO59Tpqary/8A3tttcuKxKMziho+50FSd2GBw6lXXK0KFUs
ZHROr3VycY4Wx4k2LCNR5aPaFJEx5KTGjlOIbCDKMWVe3Y/5YMZwSCH4uISv
YQMp6YQXZqDaPD52VanOEog8aILp0G1IIvU8K0L/JBnjQ4BeqqyF+JGFdOAO
D2QJZgK1MHPYTSpjGyz+w9TLWmHes3MMdDgZ5ytRApMGFmldPDBcY/3oFI0S
aLupHLYQwZpCI3XKjvYhBunCxy8x25eEL328BSQvtKICaKapfRyrNYztsUun
RljbAQ87zHv0TZ2qIB5lA8mnNiWCuvGo0nBBJC6kxjcNjEEeNhw/78PKDjh/
Fdo3HPuRHZ3Rv1l/Z8HHjrzWz6o04GWpDVAVf1xTphIWMiL2oEXxPMSAo8Gm
hkuu3NGZ7Ju02NAnPR9V7R9FA1GloiKit0hc34/suT+hKDA8RAXO2LccZN1X
JX3gQ86jJ5Fifw/JTqei9g5GQyXlWO1koUpPWs5xu2Qb6Ih2WKRsF9kKAtl6
OqXFestPkqu903pD8QKGhPEgxPcilhpTRVapbGlDIYYG+aroBCHttZYD8r8z
W0uxdtAB6vOhs/tswHtykBRJ8I1Hirk+8J6YGSfpH19QIZkau3vlK0yZAC0V
OanCs834+BaVCXfeO2aSvOai7p7E3XGQvc+87kEL4cFUFL15a5+w8MHvQ/BX
+Sl/VoNxZ3tis00XdrPd27WOtpb83eSoc3ozcvjgd1EK3WrrXQQJ+GrTBZh8
g1gTwB1KIu8O381SoVtOj/xvsX7gwHeKaNEQWqrL+iCjrXG3XXDtjr4d3s0I
88Sc+2+RBQ4bTIkotLU9z8vHm9oTVhvlVvwUKJQlqcam9BHFFMmhGApzgu6z
4W3qUH0P8yV+E7slYmjeO4PTHrRFTh0P7w2lsBf1Rv7ueGbEWBNh3xdsfOT3
7HumWe1FaOqo8MB2qdGfquQgcdIoatnFsgFy+I6Lzilx1muUgO23iLQyEk1P
yBT+T3hZ0XpZ+d/xsmLby8p/0suKXV525/mjnV5WPONlB6zroJcVPS/b7pqb
IxqfW+czN77LhsHoQl5fzt6dU+tMkm877WGlUMQdphL3w4CiXc8uw1j8thjK
rvlYi7ITGDLyUlrcHZqBL82SwwBsSg2fn5IsXYo5vVmr0m7i9iH8cWHCG5nu
YxLAdQ6qo7BmhQkg4zP2GHsyy6oc4z4xcetbgGLu6scdZ0RQVjjTncpNeNcQ
COjAxOmLstJZ236+7inBne8/SA0cOvNQ8uamng7BMAPbkrKzrVfDp5P9EuPr
bcTzDWxJ9RWbbeNs3d4h8ibYv0BJzh2FeH8kKZjDRBy8AfL5rdAGDO6JmlGH
clG9VifZp8qQrE18Xw+4EcQkZ514Vsx+OqdzpBenb0971zAAV6V68vfge8Cw
EY/St3x09021FOJf5Vdf3bw+k1N6VRxwGM+gn3z1lbxmAFzrdRXeqhBDd99B
tGnmRXKmW8FoEP+B/iRnaTrvSODd9LqTxOMJ81Lnv9+jIvbeExc/YpPNRlf0
Ygx674p/p05t5g1aqDsNWC3XKhz1X6kN5QvDu9hOxE/VXP5UG5tVIO9/Ub82
q0pe3TUjenMhaO+t1hAvAq3/C4KrX4GcUwAA

-->

</rfc>
