<?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.7.2 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-seemann-quic-accurate-ack-ecn-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="QUIC Accurate ECN Acknowledgements">QUIC Accurate ECN Acknowledgements</title>
    <seriesInfo name="Internet-Draft" value="draft-seemann-quic-accurate-ack-ecn-00"/>
    <author fullname="Marten Seemann">
      <organization>Protocol Labs</organization>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="November" day="18"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>QUIC</keyword>
    <keyword>ECN</keyword>
    <abstract>
      <?line 36?>

<t>QUIC defines a variant of the ACK frame that carries cumulative count for
each of the three ECN codepoints (ECT(1), ECT(0) and CE). From this information,
the recipient of the ACK frame cannot deduce which ECN marking the individual
packets were received with.</t>
      <t>This document defines an alternative ACK frame that encodes enough information
to indicate which ECN mark each individual packet was received with.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://marten-seemann.github.io/draft-seemann-quic-accurate-ack-ecn/draft-seemann-quic-accurate-ack-ecn.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-seemann-quic-accurate-ack-ecn/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        QUIC Working Group mailing list (<eref target="mailto:quic@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/quic/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/marten-seemann/draft-seemann-quic-accurate-ack-ecn"/>.</t>
    </note>
  </front>
  <middle>
    <?line 46?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Some congestion control algorithms would benefit from not only knowing
that some packets were marked with Congestion Experienced (CE) bit,
but exactly which ones. In the general case,
this is not possible with the standard <xref target="RFC9000"/> ACK frame, since it only
contains cumulative ECN counts.</t>
      <t>This document defines an alternative ACK frame, the ACCURATE_ACK_ECN frame,
which encodes the corresponding ECN codepoint alongside the ACK range.
This encoding comes at a cost: In the presence of ECN markings, this will lead
to ACCURATE_ACK_ECN frames containing more ACK ranges compared to a regular
ACK frame. However, this is not expected to significantly inflate the size of
ACCURATE_ACK_ECN frames.
For example, in the steady state, L4S <xref target="RFC9331"/> applies the CE marking to two
packets per roundtrip. In the absence of packet loss, two of the
ACCURATE_ACK_ECN frames sent during that RTT would contain two ACK ranges
instead of one.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

</section>
    <section anchor="accurateackecn-frame">
      <name>ACCURATE_ACK_ECN Frame</name>
      <t>The ACCURATE_ACK_ECN frame looks similar to an <xref target="RFC9000"/> ACK frame. It uses a
different encoding for ACK ranges (see <xref target="first-ack-range"/> and <xref target="ack-ranges"/>).</t>
      <artwork><![CDATA[
ACCURATE_ACK_ECN Frame {
  Type (i) = 0x2051a5fa,
  Largest Acknowledged (i),
  ACK Delay (i),
  ACK Range Count (i),
  First ACK Range (..),
  ACK Range (..) ...,
}
]]></artwork>
      <t>Except for the two ACK Range fields, all the fields are the same as defined in
<xref section="19.3" sectionFormat="of" target="RFC9000"/>.</t>
      <t>All packets within an ACK range <bcp14>MUST</bcp14> have been received with the same ECN code point.
If a range of packets with contiguous packet numbers, but different ECN markings
is received, this <bcp14>MUST</bcp14> be reported using multiple ACK ranges.</t>
      <t>Similar to regular ACK frames, ACCURATE_ACK_ECN frames are not ack-eliciting
(see <xref section="13.2" sectionFormat="of" target="RFC9000"/>), nor are they congestion-controlled.</t>
      <section anchor="first-ack-range">
        <name>First ACK Range</name>
        <artwork><![CDATA[
First ACK Range {
  ACK Range Length (i),
  ECN Marking (8),
}
]]></artwork>
        <dl>
          <dt>ACK Range Length:</dt>
          <dd>
            <t>A variable-length integer indicating the number of contiguous packets
preceding the Largest Acknowledged that are being acknowledged with the same
ECN code point. That is, the smallest packet acknowledged in the range
with the same ECN code point is determined by subtracting the First ACK Range
Length value from the Largest Acknowledged field.</t>
          </dd>
          <dt>ECN Marking:</dt>
          <dd>
            <t>The ECN code point all packets in this range were received with: Non-ECT is
encoded as 0, ECT(1) as 1, ECT(0) as 2 and CE as 3. Values larger than or equal
to 4 are invalid, and the receiver <bcp14>MUST</bcp14> close the connection with a
FRAME_ENCODING_ERROR if it receives an ACK range with an invalid ECN marking value.</t>
          </dd>
        </dl>
      </section>
      <section anchor="ack-ranges">
        <name>ACK Ranges</name>
        <t>Each ACK Range consists of alternating Gap, ACK Range Length and ECN Marking
values in descending packet number order. ACK Ranges can be repeated. The number
of ranges is determined by the ACK Range Count field; one of each value is
present for each value in the ACK Range Count field.</t>
        <t>ACK Ranges are structured as shown in <xref target="ack-range-format"/>.</t>
        <figure anchor="ack-range-format">
          <name>ACK Ranges</name>
          <artwork><![CDATA[
ACK Range {
  Gap (i),
  ACK Range Length (i),
  ECN Marking (8),
}
]]></artwork>
        </figure>
        <t>The fields that form each ACK Range are:</t>
        <dl>
          <dt>Gap:</dt>
          <dd>
            <t>A variable-length integer indicating the number of contiguous unacknowledged
packets preceding the packet number given by the smallest in the preceding ACK
Range. Note that this definition differs by one from the Gap definition of
the standard QUIC ACK frame in <xref section="19.3.1" sectionFormat="of" target="RFC9000"/>. This is
necessary to allow encoding of contiguous ranges of packet numbers that were
received with different ECN markings.</t>
          </dd>
          <dt>ACK Range Length:</dt>
          <dd>
            <t>A variable-length integer indicating the number of contiguous acknowledged
packets preceding the largest packet number, as determined by the
preceding Gap.</t>
          </dd>
          <dt>ECN Marking:</dt>
          <dd>
            <t>The ECN code point all packets in this range were received with, as defined in
<xref target="first-ack-range"/>.</t>
          </dd>
        </dl>
        <t>As described in <xref section="19.3.1" sectionFormat="of" target="RFC9000"/>, given a largest packet number for
an ACK range, the smallest value is determined by:</t>
        <artwork><![CDATA[
smallest = largest - ack_range
]]></artwork>
        <t>To calculate the largest value for a subsequent ACK Range, the formula differs
from the standard QUIC ACK frame which can be calculated using:</t>
        <artwork><![CDATA[
largest = previous_smallest - gap - 1
]]></artwork>
        <t>If any computed packet number is negative, an endpoint <bcp14>MUST</bcp14> generate a connection
error of type FRAME_ENCODING_ERROR.</t>
      </section>
      <section anchor="example">
        <name>Example</name>
        <t>Consider a scenario where 10 packets (from packet number 1 to 10) were sent with
ECT(1) but receiver received a total of 9 packets where packet number 8 was lost
and packet number 6 and 9 were CE marked. The ACCURATE_ACK_ECN frame would look
like below.</t>
        <artwork><![CDATA[
ACCURATE_ACK_ECN Frame {
  Type (i) = 0x2051a5fa,
  Largest Acknowledged (10),
  ACK Delay (i),
  ACK Range Count (4),
  First ACK Range {
    ACK Range Length (0),
    ECN Marking (1),
  },
  ACK Range {
    Gap (0),
    ACK Range Length (0),
    ECN Marking (3),
  }
  ACK Range {
    Gap (1),
    ACK Range Length (0),
    ECN Marking (1),
  }
  ACK Range {
    Gap (0),
    ACK Range Length (0),
    ECN Marking (3),
  }
  ACK Range {
    Gap (0),
    ACK Range Length (4),
    ECN Marking (1),
  }
}
]]></artwork>
      </section>
    </section>
    <section anchor="negotiate-extension">
      <name>Negotiating Extension Use</name>
      <t>Endpoints advertise their support of the extension by sending the
accurate_ack_ecn (0x2051a5fa8648af) transport parameter (<xref section="7.4" sectionFormat="of" target="RFC9000"/>) with an empty value. Implementations that understand this transport
parameter <bcp14>MUST</bcp14> treat the receipt of a non-empty value as a connection error of
type TRANSPORT_PARAMETER_ERROR.</t>
      <t>After negotiating this extension, endpoints <bcp14>MUST</bcp14> report received packets using
the ACCURATE_ACK_ECN frame. This only applies to the application data packet
number space. Initial and Handshake packets are acknowledged using the regular
ACK frame.</t>
      <t>It is invalid to send regular ACK frames in the application data packet number
space after negotiating this extension. Endpoints <bcp14>MUST</bcp14> close the connection
using a PROTOCOL_VIOLATION error when they receive an ACK frame in the
application data packet number space after this extension was negotiated.</t>
      <t>When using 0-RTT, both endpoints <bcp14>MUST</bcp14> remember the value of this transport
parameter. This allows acknowledging 0-RTT packets using ACCURATE_ACK_ECN
frames. If 0-RTT data is accepted by the server, the server <bcp14>MUST NOT</bcp14> disable
this extension on the resumed connection.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The sender of an ACCURATE_ACK_ECN frame might be able to burden its peer by
encoding a large number of ACK ranges. With the ACK frame defined in <xref target="RFC9000"/>
it is not possible to split a contiguous sequence of packet numbers into
multiple ranges, which becomes possible when using the ACCURATE_ACK_ECN frame.
The number of ACK ranges is implicitely by the requirement that each frame fits
into a QUIC packet. Receivers <bcp14>SHOULD</bcp14> make sure that they can process an
ACCURATE_ACK_ECN frame containing a few hundred ACK ranges efficiently.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO consider IANA</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC9000">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
          <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9000"/>
        <seriesInfo name="DOI" value="10.17487/RFC9000"/>
      </reference>
      <reference anchor="RFC9331">
        <front>
          <title>The Explicit Congestion Notification (ECN) Protocol for Low Latency, Low Loss, and Scalable Throughput (L4S)</title>
          <author fullname="K. De Schepper" initials="K." surname="De Schepper"/>
          <author fullname="B. Briscoe" initials="B." role="editor" surname="Briscoe"/>
          <date month="January" year="2023"/>
          <abstract>
            <t>This specification defines the protocol to be used for a new network service called Low Latency, Low Loss, and Scalable throughput (L4S). L4S uses an Explicit Congestion Notification (ECN) scheme at the IP layer that is similar to the original (or 'Classic') ECN approach, except as specified within. L4S uses 'Scalable' congestion control, which induces much more frequent control signals from the network, and it responds to them with much more fine-grained adjustments so that very low (typically sub-millisecond on average) and consistently low queuing delay becomes possible for L4S traffic without compromising link utilization. Thus, even capacity-seeking (TCP-like) traffic can have high bandwidth and very low delay at the same time, even during periods of high traffic load.</t>
            <t>The L4S identifier defined in this document distinguishes L4S from 'Classic' (e.g., TCP-Reno-friendly) traffic. Then, network bottlenecks can be incrementally modified to distinguish and isolate existing traffic that still follows the Classic behaviour, to prevent it from degrading the low queuing delay and low loss of L4S traffic. This Experimental specification defines the rules that L4S transports and network elements need to follow, with the intention that L4S flows neither harm each other's performance nor that of Classic traffic. It also suggests open questions to be investigated during experimentation. Examples of new Active Queue Management (AQM) marking algorithms and new transports (whether TCP-like or real time) are specified separately.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9331"/>
        <seriesInfo name="DOI" value="10.17487/RFC9331"/>
      </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"/>
          <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"/>
          <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>
    <?line 274?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7VabXMbtxH+jl+BUl+kDnkSLSWx1TgJQ1GxprLkUnQymU5H
A96BJEZHHAPciVY0ym/pb+kv67MA7o2kXGXG/WLxcMBisfvs7rM493o9lqs8
lae884+PF0M+iOPCiFzy0fAKD3c6W6cymcul1LntMDGdGnn/wskxXs0z83DK
bZ4wlmSxFkvslBgxy3tWyqXQuvdboeKeCJLw464nY907OmK2mC6VtSrT+cMK
yy5Gk3PO97hIbQYNlE7kSuIfnXe6vCMTlWdGiZQeLgY/4k9m8Gs8Oe8wXSyn
0pyyBFucsjjTVmpb2FOem0IynOeYCSMFpE6M0HaVmbzD1pm5m5usWIXjdtid
fMBgcsp4j9MI/cXR2b3UBeRy3p7OuVe88wskKT3nP9FrGl8KlWKcjv6Dkvks
ysycxoWJFxhf5PnKnh4e0jQaUvcyKqcd0sDh1GRrKw9JwCEtnKt8UUyxdClM
LnVp3MMXmJqWp3i2eWvnppjIi49U9hKBL5kTLfJl2mFMFPkiM2RQaMH5rEhT
j5HOe6cBv/FSOu41ji+0+l3kwMQp/2CyPIuzlF+KqXXvZbCr1z4o8MOcRqM4
W2I/nZkllt/DW0zpWeOJ9Xo9DkG5EXHOmMN3ImdKS8sFvxeAls55NuP5QvLB
8O98ZqAonkTOY2GMwry4WBapE8jjrMB0bMCkiBflunxhpI+WOAN6M4U44fuj
4WS/f9Dl9PfogAud8OHoIOLnJltiibK8UjXTXUaCjIzVSsldGsU4c5ZD96SI
JV8vFLanHWEUB0KajdhR9yopRMpW8IiEFmtpnFgJ7RO+hsMjxia0OeK2oIiu
zaERg7k02h91wxhS09ks/mbFfNFUneWZ25nywoZi3FmpVot7tfha2C2lyFFL
lSSpZGyPX+jcZDiq24DdZGSBTM8BZwzQT7xOoS8SEZYvcdCsSBM+lRqngYfI
xmSvTKcPnDIYbMTcQSzJapmHNA168GG9yejTSsL/Osa7fXiOT1XeZdMCtvgE
MEGuP2wG40VQ2LlgDgUMDhoLK8mn5GXrNFllSHrTVPp9aK7NgQlhEv74+Jfx
+fDN0dHR01Nt9y63Cptz5U9B+S0XSrfw6DEHTNo/7dZuANjw43gwGd1i/Jak
+XfMH610Os2MM2MkciicCbi1wI4NYDarElmBFvl2LiOvkpNCixCspBDm4ycl
pmC0FQSTnQn1DUzbrg+TtUpTnkqRENJ2K2x5sA5ts8xMQwl6tVyhDiQcywVw
N4f1DKsMEfF32VreSxO2C/6ScH+c+1VWzbWaAeGa3A7sU2b1PlS/k9rsGbUi
do5yBbwsVyksrnRwPA7zQP7PMXh5clMi4Pi4DwSI1SpVwerDUR3hGc/XWRXZ
ACdH4dFJbtSqwh9SXWnJEGspcNellSGnPKcqtw41hfHZBF4aTyYhrIJxnZTa
sEi17iQkGEEABCJwEUComxRA1qW8M4Khcs+EUMlRbTmVW4ti8PFmQnWd/vKr
a/d7PEKOHo/O6PfNu8HlZfWDhRk3764/Xp7Vv+qVw+v370dXZ34xRnlriHXe
D37FG9Kqc/1hcnF9NbjseJ80AwdQIVtPKZ8ibgBOQoGwDJEQGzXFA9b8OPzw
n3/3T4LnXvX7b+A5//C6/80JHtYLqf1uLgn5RzjggcHBUhiSIlJKFSuVg/1g
LpywyNaaL5CWYM6//pMs869T/u00XvVPvgsDdODWYGmz1qCz2fbI1mJvxB1D
O7aprNka37B0W9/Br63n0u6NwW+/T5GoeK//+vvvHIS2AHpOAPXo2Q1egDy7
g/HUkpiVi3P9TFZFpOS8sJSHWKJmM1ha53WKQlVrpo59sA0Imiljc0dy3DjF
qKa0XY3Yp6cDOOyPP/7YDi+nPX8ElZmAN/J9dcDf8qNPr46+6ouvZqKLF5fC
UNVpku2EJtI70uZMpuKhOTCmTRFrxEbC8Dnp2Hi5H0Ub02mER1HUZU9OUzb6
FMuVozOexoTo9rNnSqYJgRIQpbf+2UcH5TA6FADrywyFBHt8vJGuYPP+m+iY
skJlf9hmkKZ12UUJJPTr2tbcIXshUKKmEgyxRQ/qHcu6w13hidjFjFK6E1Cl
PC/fJS01L7LClqnQ9ws4ExXx2vnNksNUzUxCPXCKTYlFUQMBjQrrqkyR5gpZ
vQEXnPKmhmAoNDX0sPFzuZesSkXH8ehUxUiY4CsBfZVVj6NXLauCXIL5li55
aDCkXmBIgBKU2tvbQsfj3iamPXq35rUQdCn1HJYNiCP934fitP/6oILV5nzQ
8FM+8GQbBKiXeimUXefSlNyxJLHeSXTOLQdatiLfJOXUnWHjSheZZCppnmi+
a2GJbWCJT2ilsp4Y2SWAT8IDdlpyQh13hmOfAyiRiQT1wyxdkExR9Iup60XK
M2wYnAUT34u0kJ7GPntSF5Fwb8MPztSUJzfUEI3gKwuej5rtBuGUXwFA6Fqg
PPMMkMofP/KtTP+AHvp1X2P5q9Dc0O/jiP9Mult0n4bcC39o6tnlb9SXIC5O
nHeUxhFV4gtk6H1IB+PjLQZtkYF3ah0CwFlasPPx4P3odnQ1vD67uPrpdjQe
X4+5mhFRDkJsO7X4dbrcs9U3OUP7GKmcYBEejdQOC1MbU8OabhqUhSkB0opb
00WAWHW3o4UO2HARu/fmgRuIUEjPp1sZCuZKpImaCoF6hhwkQRqTyDnZz2bQ
IpSrLbSVdLxZLxxs/kaMjfR3HZpHm3Lx5WgglYTmG/28pKgR8D6RodlG41YY
DxvPaJRulsuebx5dXfA1s5lvYMbtWvei1PN4yvc2N+HuIuxtp1ay8+S5RKho
LmHQXH/iekucBfEEbb5AAit0M4HgBBWNb2W0NgzmgLIu3VglJFU1TWEhNIZA
p3OE2M1Dx+5ZbUW/Q8GzJI98X+UWMndjGpoZ3m5P/aVgdR3gXNms9FG/Xev5
xLdRkIPIldYK8+A4WZpm65pqtQ0UEFz3LaFY+7NQloK4NinYXcGj/0sBepH3
0pClWyfoepa0EZUko1oLD3z5NN7dYGd8F48lY1neamw+69tuwKTYfVZ3M9ZM
vRu1tMwzbXuc+iRQzXpbCe+R3W99mXXUYpIhE6ZxUfXf5cxQL4kNUYm1qDYE
jAoJXhGKcqwtQ4FVMfAc1v01SEi+1c6BAga9SxXekkfvFdByWx2lx+eIrh7v
e/WJreoHdyFRkJi28ejiQc7dNQ2VRURK4t3uKqK/WcKxRaMkMmlM5rBKd9J8
V2X0tW3kryAYG1LtQnUhO6H4ICQyak2Bnv5Rha19Z5i2dn0K4T4KvoOaqxIE
MxY4AVHqqoRXQBRYhN6WFHxTs3O3XVv6a3cniKKfM6qX7Zdfuxr6xu8cbkTK
GvhMQ+jvLagtZKm6IzKI3PPFOzSY42Ut2snOFu3RXW9v1zgvdaPK9d3gU1u8
l+AKZrnoheKOvbjnpPX/nLT+56V9Wd2el3byOd1Cd7LHr+Q8y5VP+KNP9EmB
st1HS12RDu9kT5ZviP+FSEQdSIDvXHluqgxyzYq6wvK+vlrkqH7gdpTuyy8l
t5TQZKxxigpfr78+eS1mBzwvP1IB/oRIpEi+X6fjb6ITKs5191fxWrlc5Q+B
yfILinO6yBL+Es7Vz0Ij5F2S80Wj2orVW7kskxvpqEMoJit3MoE2U/cau1Bp
aaYhXqYh5tLQZDy4uvlwPZ7cfhhQRpqMxlUuGsxoL91wgVOoMly3Snuh8/Zt
d51SyiziUjB7/g470BB391bdqGb+kpQeY+FZkchFkBm+J3KLRzIkESLkLjLa
O/xjF+Ku/nJARLfVE/pbAW+5zRtmZH7XCpYNCF0p45g7rghKdveMiiXldypy
8T9sGfFR25a7uirmFRf8w/h6cj28vrz9+eL6ckDXdMGtdHPpLxiCE8ruquKD
DuGf1Zg3NW5r6TJ/FXfUT/xCG3q1jnrjyaTLp1m+2AbGUjrRdB4PSxeFu+Ed
4OA4aJPOVZu0gbUFKhYu9DlquJ/vDkkiY7pFq/stK034mFD+5uWtLYiHJQbK
NiyQhfsEaYulTBrOoeLNkQAKoxB7Ze0Wjet0wpFnq84pO4vhUs0XOTEY2tvd
bRdoMNGUuc8IWD19YBUtD9SuQYMbF1z8l/Kyo/Z/zTHBHavsxFS+9eWLYA+Q
+O8/FbX2XK31zaLk/nB2xqqLNq9DN5CyqfSfk+rvajVqPpMV2GSx+2wuPpcr
d/kmkTOCNw20U8Yl1PAhlJpEf/IZDMhIRxzIEUevfsTHgQhZHq7Sl5Q6bGGq
1oxu6+CwlcmoQYLvnvks0/yuJfhMrvkCuZxa64bmcjaD1pI+TjnAXAyuBttg
uT679jcXhBea4r+5TqGzu3WvQsL9Pw/00t5KMnnbmYnUStc2k5BG2ovYfwGr
kNckayIAAA==

-->

</rfc>
