<?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.17 (Ruby 3.0.2) -->
<?rfc docindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-qlog-quic-events-05" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title>QUIC event definitions for qlog</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-05"/>
    <author initials="R." surname="Marx" fullname="Robin Marx" role="editor">
      <organization>Akamai</organization>
      <address>
        <email>rmarx@akamai.com</email>
      </address>
    </author>
    <author initials="L." surname="Niccolini" fullname="Luca Niccolini" role="editor">
      <organization>Meta</organization>
      <address>
        <email>lniccolini@meta.com</email>
      </address>
    </author>
    <author initials="M." surname="Seemann" fullname="Marten Seemann" role="editor">
      <organization>Protocol Labs</organization>
      <address>
        <email>marten@protocol.ai</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes concrete qlog event definitions and their metadata for
QUIC events. These events can then be embedded in the higher level schema defined
in <xref target="QLOG-MAIN"/>.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <ul empty="true">
        <li>
          <t>Note to RFC editor: Please remove this section before publication.</t>
        </li>
      </ul>
      <t>Feedback and discussion are welcome at
<eref target="https://github.com/quicwg/qlog">https://github.com/quicwg/qlog</eref>. Readers are
advised to refer to the "editor's draft" at that URL for an up-to-date version
of this document.</t>
      <t>Concrete examples of integrations of this schema in
various programming languages can be found at
<eref target="https://github.com/quiclog/qlog/">https://github.com/quiclog/qlog/</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes the values of the qlog name ("category" + "event") and
"data" fields and their semantics for the QUIC protocol (see
<xref target="QUIC-TRANSPORT"/>, <xref target="QUIC-RECOVERY"/>, and
<xref target="QUIC-TLS"/>) and some of its extensions (see
<xref target="QUIC-DATAGRAM"/> and <xref target="GREASEBIT"/>).</t>
      <section anchor="notational-conventions">
        <name>Notational Conventions</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>
        <t>The event and data structure definitions in ths document are expressed
in the Concise Data Definition Language <xref target="CDDL"/> and its
extensions described in <xref target="QLOG-MAIN"/>.</t>
        <t>The following fields from <xref target="QLOG-MAIN"/> are imported and used: name, category,
type, data, group_id, protocol_type, importance, RawInfo, and time-related
fields.</t>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>This document describes how the QUIC protocol is can be expressed in qlog using
the schema defined in <xref target="QLOG-MAIN"/>. QUIC protocol events are defined with a
category, a name (the concatenation of "category" and "event"), an "importance",
an optional "trigger", and "data" fields.</t>
      <t>Some data fields use complex datastructures. These are represented as enums or
re-usable definitions, which are grouped together on the bottom of this document
for clarity.</t>
      <t>When any event from this document is included in a qlog trace, the
"protocol_type" qlog array field <bcp14>MUST</bcp14> contain an entry with the value "QUIC".</t>
      <t>When the qlog "group_id" field is used, it is recommended to use QUIC's Original
Destination Connection ID (ODCID, the CID chosen by the client when first
contacting the server), as this is the only value that does not change over the
course of the connection and can be used to link more advanced QUIC packets (e.g.,
Retry, Version Negotiation) to a given connection. Similarly, the ODCID should be
used as the qlog filename or file identifier, potentially suffixed by the
vantagepoint type (For example, abcd1234_server.qlog would contain the server-side
trace of the connection with ODCID abcd1234).</t>
      <section anchor="raw-packet-and-frame-information">
        <name>Raw packet and frame information</name>
        <t>QUIC packets always include an AEAD authentication tag at the end.
In general, the length of the AEAD tag depends on the TLS cipher
suite, although all cipher suites used in QUIC v1 use a 16 byte tag.</t>
        <dl>
          <dt>Note:</dt>
          <dd>
            <t>As QUIC appends an authentication tag after the packet payload, the packet
header_lengths can be calculated as:</t>
          </dd>
          <dt/>
          <dd>
            <t>header_length = length - payload_length - 16</t>
          </dd>
          <dt/>
          <dd>
            <t>For UDP datagrams, the calculation is simpler:</t>
          </dd>
          <dt/>
          <dd>
            <t>header_length = length - payload_length</t>
          </dd>
          <dt>Note:</dt>
          <dd>
            <t>In some cases, the length fields are also explicitly reflected inside of packet
headers. For example, the QUIC STREAM frame has a "length" field indicating its
payload size. Similarly, the QUIC Long Header has a "length" field which is equal
to the payload length plus the packet number length. In these cases, those fields
are intentionally preserved in the event definitions. Even though this can lead to
duplicate data when the full RawInfo is logged, it allows a more direct mapping of
the QUIC specifications to qlog, making it easier for users to interpret.</t>
          </dd>
        </dl>
      </section>
      <section anchor="handling-unknown-connections">
        <name>Events not belonging to a single connection</name>
        <t>A single qlog event trace is typically associated with a single QUIC connection.
However, for several types of events (for example, a <xref target="quic-packetdropped"/>
event with trigger value of "connection_unknown"), it can be impossible to tie
them to a specific QUIC connection, especially on the server.</t>
        <t>There are various ways to handle these events, each making certain tradeoffs
between file size overhead, flexibility, ease of use, or ease of
implementation. Some options include:</t>
        <ul spacing="normal">
          <li>Log them in a separate endpoint-wide trace (or use a special group_id value)
not associated with a single connection.</li>
          <li>Log them in the most recently used trace.</li>
          <li>Use additional heuristics for connection identification (for example use the
four-tuple in addition to the Connection ID).</li>
          <li>Buffer events until they can be assigned to a connection (for example for
version negotiation and retry events).</li>
        </ul>
      </section>
    </section>
    <section anchor="quic-event-overview">
      <name>QUIC Event Overview</name>
      <t>QUIC connections consist of different phases and interaction events. In order to
model this, QUIC event types are divided into general categories: connectivity
(<xref target="conn-ev"/>), security (<xref target="sec-ev"/>), quic <xref target="quic-ev"/>, and recovery
<xref target="rec-ev"/>.</t>
      <t>As described in <xref section="3.4.2" sectionFormat="of" target="QLOG-MAIN"/>, the qlog "name" field is the
concatenation of category and type.</t>
      <t><xref target="quic-events"/> summarizes the name value of each event type that is defined in
this specification.</t>
      <table anchor="quic-events">
        <name>QUIC Events</name>
        <thead>
          <tr>
            <th align="left">Name value</th>
            <th align="left">Importance</th>
            <th align="left">Definition</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">connectivity:server_listening</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="connectivity-serverlistening"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:connection_started</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="connectivity-connectionstarted"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:connection_closed</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="connectivity-connectionclosed"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:connection_id_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="connectivity-connectionidupdated"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:spin_bit_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="connectivity-spinbitupdated"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:connection_state_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="connectivity-connectionstateupdated"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:mtu_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="connectivity-mtuupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:version_information</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-versioninformation"/></td>
          </tr>
          <tr>
            <td align="left">quic:alpn_information</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-alpninformation"/></td>
          </tr>
          <tr>
            <td align="left">quic:parameters_set</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-parametersset"/></td>
          </tr>
          <tr>
            <td align="left">quic:parameters_restored</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-parametersrestored"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_sent</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-packetsent"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_received</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-packetreceived"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_dropped</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-packetdropped"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_buffered</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-packetbuffered"/></td>
          </tr>
          <tr>
            <td align="left">quic:packets_acked</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-packetsacked"/></td>
          </tr>
          <tr>
            <td align="left">quic:datagrams_sent</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-datagramssent"/></td>
          </tr>
          <tr>
            <td align="left">quic:datagrams_received</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-datagramsreceived"/></td>
          </tr>
          <tr>
            <td align="left">quic:datagram_dropped</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-datagramdropped"/></td>
          </tr>
          <tr>
            <td align="left">quic:stream_state_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-streamstateupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:frames_processed</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-framesprocessed"/></td>
          </tr>
          <tr>
            <td align="left">quic:stream_data_moved</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-streamdatamoved"/></td>
          </tr>
          <tr>
            <td align="left">quic:datagram_data_moved</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-datagramdatamoved"/></td>
          </tr>
          <tr>
            <td align="left">security:key_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="security-keyupdated"/></td>
          </tr>
          <tr>
            <td align="left">security:key_discarded</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="security-keydiscarded"/></td>
          </tr>
          <tr>
            <td align="left">recovery:parameters_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="recovery-parametersset"/></td>
          </tr>
          <tr>
            <td align="left">recovery:metrics_updated</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="recovery-metricsupdated"/></td>
          </tr>
          <tr>
            <td align="left">recovery:congestion_state_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="recovery-congestionstateupdated"/></td>
          </tr>
          <tr>
            <td align="left">recovery:loss_timer_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="recovery-losstimerupdated"/></td>
          </tr>
          <tr>
            <td align="left">recovery:packet_lost</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="recovery-packetlost"/></td>
          </tr>
          <tr>
            <td align="left">recovery:marked_for_retransmit</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="recovery-markedforretransmit"/></td>
          </tr>
        </tbody>
      </table>
      <t>QUIC events extend the <tt>$ProtocolEventBody</tt> extension point defined in
<xref target="QLOG-MAIN"/>.</t>
      <figure anchor="quicevents-def">
        <name>QuicEvents definition and ProtocolEventBody extension</name>
        <sourcecode type="cddl"><![CDATA[
QuicEvents = ConnectivityServerListening /
             ConnectivityConnectionStarted /
             ConnectivityConnectionClosed /
             ConnectivityConnectionIDUpdated /
             ConnectivitySpinBitUpdated /
             ConnectivityConnectionStateUpdated /
             ConnectivityMTUUpdated /
             SecurityKeyUpdated /
             SecurityKeyDiscarded /
             QUICVersionInformation /
             QUICALPNInformation /
             QUICParametersSet /
             QUICParametersRestored /
             QUICPacketSent /
             QUICPacketReceived /
             QUICPacketDropped /
             QUICPacketBuffered /
             QUICPacketsAcked /
             QUICDatagramsSent /
             QUICDatagramsReceived /
             QUICDatagramDropped /
             QUICStreamStateUpdated /
             QUICFramesProcessed /
             QUICStreamDataMoved /
             QUICDatagramDataMoved /
             RecoveryParametersSet /
             RecoveryMetricsUpdated /
             RecoveryCongestionStateUpdated /
             RecoveryLossTimerUpdated /
             RecoveryPacketLost

$ProtocolEventBody /= QuicEvents
]]></sourcecode>
      </figure>
    </section>
    <section anchor="conn-ev">
      <name>Connectivity events</name>
      <section anchor="connectivity-serverlistening">
        <name>server_listening</name>
        <t>Importance: Extra</t>
        <t>Emitted when the server starts accepting connections.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-serverlistening-def">
          <name>ConnectivityServerListening definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityServerListening = {
    ? ip_v4: IPAddress
    ? ip_v6: IPAddress
    ? port_v4: uint16
    ? port_v6: uint16

    ; the server will always answer client initials with a retry
    ; (no 1-RTT connection setups by choice)
    ? retry_required: bool
}
]]></sourcecode>
        </figure>
        <t>Some QUIC stacks do not handle sockets directly and are thus unable to log
IP and/or port information.</t>
      </section>
      <section anchor="connectivity-connectionstarted">
        <name>connection_started</name>
        <t>Importance: Base</t>
        <t>Used for both attempting (client-perspective) and accepting (server-perspective)
new connections. Note that this event has overlap with connection_state_updated
and this is a separate event mainly because of all the additional data that should
be logged.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-connectionstarted-def">
          <name>ConnectivityConnectionStarted definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityConnectionStarted = {
    ? ip_version: IPVersion
    src_ip: IPAddress
    dst_ip: IPAddress

    ; transport layer protocol
    ? protocol: text .default "QUIC"
    ? src_port: uint16
    ? dst_port: uint16
    ? src_cid: ConnectionID
    ? dst_cid: ConnectionID
}
]]></sourcecode>
        </figure>
        <t>Some QUIC stacks do not handle sockets directly and are thus unable to log
IP and/or port information.</t>
      </section>
      <section anchor="connectivity-connectionclosed">
        <name>connection_closed</name>
        <t>Importance: Base</t>
        <t>Used for logging when a connection was closed, typically when an error or timeout
occurred. Note that this event has overlap with
connectivity:connection_state_updated, as well as the CONNECTION_CLOSE frame.
However, in practice, when analyzing large deployments, it can be useful to have a
single event representing a connection_closed event, which also includes an
additional reason field to provide additional information. Additionally, it is
useful to log closures due to timeouts, which are difficult to reflect using the
other options.</t>
        <t>In QUIC there are two main connection-closing error categories: connection and
application errors. They have well-defined error codes and semantics. Next to
these however, there can be internal errors that occur that may or may not get
mapped to the official error codes in implementation-specific ways. As such,
multiple error codes can be set on the same event to reflect this.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-connectionclosed-def">
          <name>ConnectivityConnectionClosed definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityConnectionClosed = {

    ; which side closed the connection
    ? owner: Owner
    ? connection_code: TransportError /
                       CryptoError /
                       uint32
    ? application_code: $ApplicationError /
                        uint32
    ? internal_code: uint32
    ? reason: text
    ? trigger:
        "clean" /
        "handshake_timeout" /
        "idle_timeout" /
        ; this is called the "immediate close" in the QUIC RFC
        "error" /
        "stateless_reset" /
        "version_mismatch" /
        ; for example HTTP/3's GOAWAY frame
        "application"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="connectivity-connectionidupdated">
        <name>connection_id_updated</name>
        <t>Importance: Base</t>
        <t>This event is emitted when either party updates their current Connection ID. As
this typically happens only sparingly over the course of a connection, this event
allows loggers to be more efficient than logging the observed CID with each packet
in the .header field of the "packet_sent" or "packet_received" events.</t>
        <t>This is viewed from the perspective of the endpoint applying the new id. As such,
when the endpoint receives a new connection id from the peer, it will see the
dst_ fields are set. When the endpoint updates its own connection id
(e.g., NEW_CONNECTION_ID frame), it logs the src_ fields.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-connectionidupdated-def">
          <name>ConnectivityConnectionIDUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityConnectionIDUpdated = {
    owner: Owner
    ? old: ConnectionID
    ? new: ConnectionID
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="connectivity-spinbitupdated">
        <name>spin_bit_updated</name>
        <t>Importance: Base</t>
        <t>To be emitted when the spin bit changes value. It <bcp14>SHOULD NOT</bcp14> be emitted if the
spin bit is set without changing its value.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-spinbitupdated-def">
          <name>ConnectivitySpinBitUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivitySpinBitUpdated = {
    state: bool
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="connectivity-connectionstateupdated">
        <name>connection_state_updated</name>
        <t>Importance: Base</t>
        <t>This event is used to track progress through QUIC's complex handshake and
connection close procedures. It is intended to provide exhaustive options to log
each state individually, but also provides a more basic, simpler set for
implementations less interested in tracking each smaller state transition. As
such, users should not expect to see -all- these states reflected in all qlogs and
implementers should focus on support for the SimpleConnectionState set.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-connectionstateupdated-def">
          <name>ConnectivityConnectionStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityConnectionStateUpdated = {
    ? old: ConnectionState /
           SimpleConnectionState
    new: ConnectionState /
         SimpleConnectionState
}

ConnectionState =
    ; initial sent/received
    "attempted" /
    ; peer address validated by: client sent Handshake packet OR
    ; client used CONNID chosen by the server.
    ; transport-draft-32, section-8.1
    "peer_validated" /
    "handshake_started" /
    ; 1 RTT can be sent, but handshake isn't done yet
    "early_write" /
    ; TLS handshake complete: Finished received and sent
    ; tls-draft-32, section-4.1.1
    "handshake_complete" /
    ; HANDSHAKE_DONE sent/received (connection is now "active", 1RTT
    ; can be sent). tls-draft-32, section-4.1.2
    "handshake_confirmed" /
    "closing" /
    ; connection_close sent/received
    "draining" /
    ; draining period done, connection state discarded
    "closed"

SimpleConnectionState =
    "attempted" /
    "handshake_started" /
    "handshake_confirmed" /
    "closed"
]]></sourcecode>
        </figure>
        <t>These states correspond to the following transitions for both client and server:</t>
        <t><strong>Client:</strong></t>
        <ul spacing="normal">
          <li>
            <t>send initial
            </t>
            <ul spacing="normal">
              <li>state = attempted</li>
            </ul>
          </li>
          <li>
            <t>get initial
            </t>
            <ul spacing="normal">
              <li>state = validated <em>(not really "needed" at the client, but somewhat useful to indicate progress nonetheless)</em></li>
            </ul>
          </li>
          <li>
            <t>get first Handshake packet
            </t>
            <ul spacing="normal">
              <li>state = handshake_started</li>
            </ul>
          </li>
          <li>
            <t>get Handshake packet containing ServerFinished
            </t>
            <ul spacing="normal">
              <li>state = handshake_complete</li>
            </ul>
          </li>
          <li>
            <t>send ClientFinished
            </t>
            <ul spacing="normal">
              <li>state = early_write
  (1RTT can now be sent)</li>
            </ul>
          </li>
          <li>
            <t>get HANDSHAKE_DONE
            </t>
            <ul spacing="normal">
              <li>state = handshake_confirmed</li>
            </ul>
          </li>
        </ul>
        <t><strong>Server:</strong></t>
        <ul spacing="normal">
          <li>
            <t>get initial
            </t>
            <ul spacing="normal">
              <li>state = attempted</li>
            </ul>
          </li>
          <li>send initial <em>(TODO don't think this needs a separate state, since some handshake will always be sent in the same flight as this?)</em></li>
          <li>
            <t>send handshake EE, CERT, CV, ...
            </t>
            <ul spacing="normal">
              <li>state = handshake_started</li>
            </ul>
          </li>
          <li>
            <t>send ServerFinished
            </t>
            <ul spacing="normal">
              <li>state = early_write
  (1RTT can now be sent)</li>
            </ul>
          </li>
          <li>
            <t>get first handshake packet / something using a server-issued CID of min length
            </t>
            <ul spacing="normal">
              <li>state = validated</li>
            </ul>
          </li>
          <li>
            <t>get handshake packet containing ClientFinished
            </t>
            <ul spacing="normal">
              <li>state = handshake_complete</li>
            </ul>
          </li>
          <li>
            <t>send HANDSHAKE_DONE
            </t>
            <ul spacing="normal">
              <li>state = handshake_confirmed</li>
            </ul>
          </li>
        </ul>
        <dl>
          <dt>Note:</dt>
          <dd>
            <t>connection_state_changed with a new state of "attempted" is the same
conceptual event as the connection_started event above from the client's
perspective. Similarly, a state of "closing" or "draining" corresponds to the
connection_closed event.</t>
          </dd>
        </dl>
      </section>
      <section anchor="connectivity-mtuupdated">
        <name>mtu_updated</name>
        <t>Importance: Extra</t>
        <figure anchor="connectivity-mtuupdated-def">
          <name>ConnectivityMTUUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityMTUUpdated = {
  ? old: uint16
  new: uint16

  ; at some point, MTU discovery stops, as a "good enough"
  ; packet size has been found
  ? done: bool .default false
}
]]></sourcecode>
        </figure>
        <t>This event indicates that the estimated Path MTU was updated. This happens as
part of the Path MTU discovery process.</t>
      </section>
    </section>
    <section anchor="quic-ev">
      <name>QUIC events</name>
      <section anchor="quic-versioninformation">
        <name>version_information</name>
        <t>Importance: Core</t>
        <t>QUIC endpoints each have their own list of of QUIC versions they support. The
client uses the most likely version in their first initial. If the server does
support that version, it replies with a version_negotiation packet, containing
supported versions. From this, the client selects a version. This event aggregates
all this information in a single event type. It also allows logging of supported
versions at an endpoint without actual version negotiation needing to happen.</t>
        <t>Definition:</t>
        <figure anchor="quic-versioninformation-def">
          <name>QUICVersionInformation definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICVersionInformation = {
    ? server_versions: [+ QuicVersion]
    ? client_versions: [+ QuicVersion]
    ? chosen_version: QuicVersion
}
]]></sourcecode>
        </figure>
        <t>Intended use:</t>
        <ul spacing="normal">
          <li>When sending an initial, the client logs this event with client_versions and
chosen_version set</li>
          <li>Upon receiving a client initial with a supported version, the server logs this
event with server_versions and chosen_version set</li>
          <li>Upon receiving a client initial with an unsupported version, the server logs
this event with server_versions set and client_versions to the
single-element array containing the client's attempted version. The absence of
chosen_version implies no overlap was found.</li>
          <li>Upon receiving a version negotiation packet from the server, the client logs
this event with client_versions set and server_versions to the versions in
the version negotiation packet and chosen_version to the version it will use for
the next initial packet</li>
        </ul>
      </section>
      <section anchor="quic-alpninformation">
        <name>alpn_information</name>
        <t>Importance: Core</t>
        <t>QUIC implementations each have their own list of application level protocols and
versions thereof they support. The client includes a list of their supported
options in its first initial as part of the TLS Application Layer Protocol
Negotiation (alpn) extension. If there are common option(s), the server chooses
the most optimal one and communicates this back to the client. If not, the
connection is closed.</t>
        <t>Definition:</t>
        <figure anchor="quic-alpninformation-def">
          <name>QUICALPNInformation definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICALPNInformation = {
    ? server_alpns: [* text]
    ? client_alpns: [* text]
    ? chosen_alpn: text
}
]]></sourcecode>
        </figure>
        <t>Intended use:</t>
        <ul spacing="normal">
          <li>When sending an initial, the client logs this event with client_alpns set</li>
          <li>When receiving an initial with a supported alpn, the server logs this event with
server_alpns set, client_alpns equalling the client-provided list, and
chosen_alpn to the value it will send back to the client.</li>
          <li>When receiving an initial with an alpn, the client logs this event with
chosen_alpn to the received value.</li>
          <li>Alternatively, a client can choose to not log the first event, but wait for the
receipt of the server initial to log this event with both client_alpns and
chosen_alpn set.</li>
        </ul>
      </section>
      <section anchor="quic-parametersset">
        <name>parameters_set</name>
        <t>Importance: Core</t>
        <t>This event groups settings from several different sources (transport parameters,
TLS ciphers, etc.) into a single event. This is done to minimize the amount of
events and to decouple conceptual setting impacts from their underlying mechanism
for easier high-level reasoning.</t>
        <t>All these settings are typically set once and never change. However, they are
typically set at different times during the connection, so there will typically be
several instances of this event with different fields set.</t>
        <t>Note that some settings have two variations (one set locally, one requested by the
remote peer). This is reflected in the "owner" field. As such, this field <bcp14>MUST</bcp14> be
correct for all settings included a single event instance. If you need to log
settings from two sides, you <bcp14>MUST</bcp14> emit two separate event instances.</t>
        <t>In the case of connection resumption and 0-RTT, some of the server's parameters
are stored up-front at the client and used for the initial connection startup.
They are later updated with the server's reply. In these cases, utilize the
separate <tt>parameters_restored</tt> event to indicate the initial values, and this
event to indicate the updated values, as normal.</t>
        <t>Definition:</t>
        <figure anchor="quic-parametersset-def">
          <name>QUICParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICParametersSet = {
    ? owner: Owner

    ; true if valid session ticket was received
    ? resumption_allowed: bool

    ; true if early data extension was enabled on the TLS layer
    ? early_data_enabled: bool

    ; e.g., "AES_128_GCM_SHA256"
    ? tls_cipher: text

    ; RFC9000
    ? original_destination_connection_id: ConnectionID
    ? initial_source_connection_id: ConnectionID
    ? retry_source_connection_id: ConnectionID
    ? stateless_reset_token: StatelessResetToken
    ? disable_active_migration: bool
    ? max_idle_timeout: uint64
    ? max_udp_payload_size: uint32
    ? ack_delay_exponent: uint16
    ? max_ack_delay: uint16
    ? active_connection_id_limit: uint32
    ? initial_max_data: uint64
    ? initial_max_stream_data_bidi_local: uint64
    ? initial_max_stream_data_bidi_remote: uint64
    ? initial_max_stream_data_uni: uint64
    ? initial_max_streams_bidi: uint64
    ? initial_max_streams_uni: uint64
    ? preferred_address: PreferredAddress

    ; RFC9221
    ? max_datagram_frame_size: uint64

    ; RFC9287
    ; true if present, absent or false if extension not negotiated
    ? grease_quic_bit: bool
}

PreferredAddress = {
    ip_v4: IPAddress
    ip_v6: IPAddress
    port_v4: uint16
    port_v6: uint16
    connection_id: ConnectionID
    stateless_reset_token: StatelessResetToken
}
]]></sourcecode>
        </figure>
        <t>Additionally, this event can contain any number of unspecified fields. This is to
reflect setting of for example unknown (greased) transport parameters or employed
(proprietary) extensions.</t>
      </section>
      <section anchor="quic-parametersrestored">
        <name>parameters_restored</name>
        <t>Importance: Base</t>
        <t>When using QUIC 0-RTT, clients are expected to remember and restore the server's
transport parameters from the previous connection. This event is used to indicate
which parameters were restored and to which values when utilizing 0-RTT. Note that
not all transport parameters should be restored (many are even prohibited from
being re-utilized). The ones listed here are the ones expected to be useful for
correct 0-RTT usage.</t>
        <t>Definition:</t>
        <figure anchor="quic-parametersrestored-def">
          <name>QUICParametersRestored definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICParametersRestored = {
    ? disable_active_migration: bool
    ? max_idle_timeout: uint64
    ? max_udp_payload_size: uint32
    ? active_connection_id_limit: uint32
    ? initial_max_data: uint64
    ? initial_max_stream_data_bidi_local: uint64
    ? initial_max_stream_data_bidi_remote: uint64,
    ? initial_max_stream_data_uni: uint64
    ? initial_max_streams_bidi: uint64
    ? initial_max_streams_uni: uint64
}
]]></sourcecode>
        </figure>
        <t>Note that, like parameters_set above, this event can contain any number of
unspecified fields to allow for additional/custom parameters.</t>
      </section>
      <section anchor="quic-packetsent">
        <name>packet_sent</name>
        <t>Importance: Core</t>
        <t>Definition:</t>
        <figure anchor="quic-packetsent-def">
          <name>QUICPacketSent definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketSent = {
    header: PacketHeader
    ? frames: [* $QuicFrame]
    ? is_coalesced: bool .default false

    ; only if header.packet_type === "retry"
    ? retry_token: Token

    ; only if header.packet_type === "stateless_reset"
    ; is always 128 bits in length.
    ? stateless_reset_token: StatelessResetToken

    ; only if header.packet_type === "version_negotiation"
    ? supported_versions: [+ QuicVersion]
    ? raw: RawInfo
    ? datagram_id: uint32
    ? is_mtu_probe_packet: bool .default false
    ? trigger:
      ; draft-23 5.1.1
      "retransmit_reordered" /
      ; draft-23 5.1.2
      "retransmit_timeout" /
      ; draft-23 5.3.1
      "pto_probe" /
      ; draft-19 6.2
      "retransmit_crypto" /
      ; needed for some CCs to figure out bandwidth allocations
      ; when there are no normal sends
      "cc_bandwidth_probe"
}
]]></sourcecode>
        </figure>
        <t>The encryption_level and packet_number_space are not logged explicitly:
the header.packet_type specifies this by inference (assuming correct
implementation)</t>
        <t>For more details on "datagram_id", see <xref target="quic-datagramssent"/>. It is only needed
when keeping track of packet coalescing.</t>
      </section>
      <section anchor="quic-packetreceived">
        <name>packet_received</name>
        <t>Importance: Core</t>
        <t>Definition:</t>
        <figure anchor="quic-packetreceived-def">
          <name>QUICPacketReceived definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketReceived = {
    header: PacketHeader
    ? frames: [* $QuicFrame]
    ? is_coalesced: bool .default false

    ; only if header.packet_type === "retry"
    ? retry_token: Token

    ; only if header.packet_type === "stateless_reset"
    ; Is always 128 bits in length.
    ? stateless_reset_token: StatelessResetToken

    ; only if header.packet_type === "version_negotiation"
    ? supported_versions: [+ QuicVersion]
    ? raw: RawInfo
    ? datagram_id: uint32
    ? trigger:
        ; if packet was buffered because it couldn't be
        ; decrypted before
        "keys_available"
}
]]></sourcecode>
        </figure>
        <t>The encryption_level and packet_number_space are not logged explicitly:
the header.packet_type specifies this by inference (assuming correct
implementation)</t>
        <t>For more details on "datagram_id", see <xref target="quic-datagramssent"/>. It is only needed
when keeping track of packet coalescing.</t>
      </section>
      <section anchor="quic-packetdropped">
        <name>packet_dropped</name>
        <t>Importance: Base</t>
        <t>This event indicates a QUIC-level packet was dropped.</t>
        <t>The trigger field indicates a general reason category for dropping the packet,
while the details field can contain additional implementation-specific
information.</t>
        <t>Definition:</t>
        <figure anchor="quic-packetdropped-def">
          <name>QUICPacketDropped definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketDropped = {

    ; Primarily packet_type should be filled here,
    ; as other fields might not be decrypteable or parseable
    ? header: PacketHeader
    ? raw: RawInfo
    ? datagram_id: uint32
    ? details: {* text => any}
    ? trigger:
        "internal_error" /
        "rejected" /
        "unsupported" /
        "invalid" /
        "connection_unknown" /
        "decryption_failure" /
        "general"
}
]]></sourcecode>
        </figure>
        <t>Some example situations for each of the trigger categories include:</t>
        <ul spacing="normal">
          <li>internal_error: not initialized, out of memory</li>
          <li>rejected: limits reached, DDoS protection, unwilling to track more paths, duplicate packet</li>
          <li>unsupported: unknown or unsupported version. See also <xref target="handling-unknown-connections"/>.</li>
          <li>invalid: packet parsing or validation error</li>
          <li>connection_unknown: packet does not relate to a known connection or Connection ID</li>
          <li>decryption_failure: decryption key was unavailable, decryption failed</li>
          <li>general: situations not clearly covered in the other categories</li>
        </ul>
        <t>For more details on "datagram_id", see <xref target="quic-datagramssent"/>.</t>
      </section>
      <section anchor="quic-packetbuffered">
        <name>packet_buffered</name>
        <t>Importance: Base</t>
        <t>This event is emitted when a packet is buffered because it cannot be processed
yet. Typically, this is because the packet cannot be parsed yet, and thus only
the full packet contents can be logged when it was parsed in a packet_received
event.</t>
        <t>Definition:</t>
        <figure anchor="quic-packetbuffered-def">
          <name>QUICPacketBuffered definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketBuffered = {

    ; primarily packet_type and possible packet_number should be
    ; filled here as other elements might not be available yet
    ? header: PacketHeader
    ? raw: RawInfo
    ? datagram_id: uint32
    ? trigger:
        ; indicates the parser cannot keep up, temporarily buffers
        ; packet for later processing
        "backpressure" /
        ; if packet cannot be decrypted because the proper keys were
        ; not yet available
        "keys_unavailable"
}
]]></sourcecode>
        </figure>
        <t>For more details on "datagram_id", see <xref target="quic-datagramssent"/>. It is only needed
when keeping track of packet coalescing.</t>
      </section>
      <section anchor="quic-packetsacked">
        <name>packets_acked</name>
        <t>Importance: Extra</t>
        <t>This event is emitted when a (group of) sent packet(s) is acknowledged by the
remote peer <em>for the first time</em>. This information could also be deduced from the
contents of received ACK frames. However, ACK frames require additional processing
logic to determine when a given packet is acknowledged for the first time, as QUIC
uses ACK ranges which can include repeated ACKs. Additionally, this event can be
used by implementations that do not log frame contents.</t>
        <t>Definition:</t>
        <figure anchor="quic-packetsacked-def">
          <name>QUICPacketsAcked definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketsAcked = {
    ? packet_number_space: PacketNumberSpace
    ? packet_numbers: [+ uint64]
}
]]></sourcecode>
        </figure>
        <t>If packet_number_space is omitted, it assumes the default value of
PacketNumberSpace.application_data, as this is by far the most prevalent packet
number space a typical QUIC connection will use.</t>
      </section>
      <section anchor="quic-datagramssent">
        <name>datagrams_sent</name>
        <t>Importance: Extra</t>
        <t>When one or more UDP-level datagrams are passed to the socket. This is useful
for determining how QUIC packet buffers are drained to the OS.</t>
        <t>Definition:</t>
        <figure anchor="quic-datagramssent-def">
          <name>QUICDatagramsSent definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramsSent = {

    ; to support passing multiple at once
    ? count: uint16

    ; The RawInfo fields do not include the UDP headers,
    ; only the UDP payload
    ? raw: [+ RawInfo]
    ? datagram_ids: [+ uint32]
}
]]></sourcecode>
        </figure>
        <t>Since QUIC implementations rarely control UDP logic directly, the raw data
excludes UDP-level headers in all fields.</t>
        <t>The "datagram_id" is a qlog-specific concept to allow tracking of QUIC packet
coalescing inside UDP datagrams. Since QUIC generates many UDP datagrams, unique
identifiers are required to be able to track them individually in qlog traces.
However, neither UDP nor QUIC exchanges datagram identifiers on the wire.
Selecting identifier values is thus left to qlog implementations, which should
consider how to generate unique values within the scope of their created traces.</t>
      </section>
      <section anchor="quic-datagramsreceived">
        <name>datagrams_received</name>
        <t>Importance: Extra</t>
        <t>When one or more UDP-level datagrams are received from the socket. This is
useful for determining how datagrams are passed to the user space stack from
the OS.</t>
        <t>Definition:</t>
        <figure anchor="quic-datagramsreceived-def">
          <name>QUICDatagramsReceived definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramsReceived = {

    ; to support passing multiple at once
    ? count: uint16

    ; The RawInfo fields do not include the UDP headers,
    ; only the UDP payload
    ? raw: [+ RawInfo]
    ? datagram_ids: [+ uint32]
}
]]></sourcecode>
        </figure>
        <t>For more details on "datagram_ids", see <xref target="quic-datagramssent"/>.</t>
      </section>
      <section anchor="quic-datagramdropped">
        <name>datagram_dropped</name>
        <t>Importance: Extra</t>
        <t>When a UDP-level datagram is dropped. This is typically done if it does not
contain a valid QUIC packet. If it does, but the QUIC packet is dropped for
other reasons, packet_dropped (<xref target="quic-packetdropped"/>) should be used instead.</t>
        <t>Definition:</t>
        <figure anchor="quic-datagramdropped-def">
          <name>QUICDatagramDropped definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramDropped = {

    ; The RawInfo fields do not include the UDP headers,
    ; only the UDP payload
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-streamstateupdated">
        <name>stream_state_updated</name>
        <t>Importance: Base</t>
        <t>This event is emitted whenever the internal state of a QUIC stream is updated, as
described in QUIC transport draft-23 section 3. Most of this can be inferred from
several types of frames going over the wire, but it's much easier to have explicit
signals for these state changes.</t>
        <t>Definition:</t>
        <figure anchor="quic-streamstateupdated-def">
          <name>QUICStreamStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
StreamType = "unidirectional" /
             "bidirectional"

QUICStreamStateUpdated = {
    stream_id: uint64

    ; mainly useful when opening the stream
    ? stream_type: StreamType
    ? old: StreamState
    new: StreamState
    ? stream_side: "sending" /
                   "receiving"
}

StreamState =
    ; bidirectional stream states, draft-23 3.4.
    "idle" /
    "open" /
    "half_closed_local" /
    "half_closed_remote" /
    "closed" /
    ; sending-side stream states, draft-23 3.1.
    "ready" /
    "send" /
    "data_sent" /
    "reset_sent" /
    "reset_received" /
    ; receive-side stream states, draft-23 3.2.
    "receive" /
    "size_known" /
    "data_read" /
    "reset_read" /
    ; both-side states
    "data_received" /
    ; qlog-defined:
    ; memory actually freed
    "destroyed"
]]></sourcecode>
        </figure>
        <t>QUIC implementations <bcp14>SHOULD</bcp14> mainly log the simplified bidirectional
(HTTP/2-alike) stream states (e.g., idle, open, closed) instead of the more
fine-grained stream states (e.g., data_sent, reset_received). These latter ones are
mainly for more in-depth debugging. Tools <bcp14>SHOULD</bcp14> be able to deal with both types
equally.</t>
      </section>
      <section anchor="quic-framesprocessed">
        <name>frames_processed</name>
        <t>Importance: Extra</t>
        <t>This event's main goal is to prevent a large proliferation of specific purpose
events (e.g., packets_acknowledged, flow_control_updated, stream_data_received).
Implementations have the opportunity to (selectively) log this type of
signal without having to log packet-level details (e.g., in packet_received).
Since for almost all cases, the effects of applying a frame to the internal state
of an implementation can be inferred from that frame's contents, these events
are aggregated into this single "frames_processed" event.</t>
        <t>This event can be used to signal internal state change not resulting
directly from the actual "parsing" of a frame (e.g., the frame could have been
parsed, data put into a buffer, then later processed, then logged with this
event).</t>
        <t>Implementations logging "packet_received" and which include all of the
packet's constituent frames therein, are not expected to emit this
"frames_processed" event. Rather, implementations not wishing to log full packets
or that wish to explicitly convey extra information about when frames are
processed (if not directly tied to their reception) can use this event.</t>
        <t>Note that for some events, this approach will lose some information (e.g., for which
encryption level are packets being acknowledged?). If this information is
important, the packet_received event can be used instead.</t>
        <t>In some implementations, it can be difficult to log frames directly, even
when using packet_sent and packet_received events. For these cases, this event
also contains the packet_numbers field, which can be used to more explicitly
link this event to the packet_sent/received events. The field is an array, which
supports using a single "frames_processed" event for multiple frames received
over multiple packets. To map between frames and packets, the position and order
of entries in the "frames" and "packet_numbers" is used. If the optional "packet_numbers"
field is used, each frame <bcp14>MUST</bcp14> have a corresponding packet number at the same
index.</t>
        <t>Definition:</t>
        <figure anchor="quic-framesprocessed-def">
          <name>QUICFramesProcessed definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICFramesProcessed = {
    frames: [* $QuicFrame]
    ? packet_numbers: [* uint64]
}
]]></sourcecode>
        </figure>
        <t>For example, an instance of this event that represents four STREAM frames
received over two packets would have the fields serialized as:</t>
        <artwork><![CDATA[
"frames":[
  {"frame_type":"stream","stream_id":0,"offset":0,"length":500},
  {"frame_type":"stream","stream_id":0,"offset":500,"length":200},
  {"frame_type":"stream","stream_id":1,"offset":0,"length":300},
  {"frame_type":"stream","stream_id":1,"offset":300,"length":50}
  ],
"packet_numbers":[
  1,
  1,
  2,
  2
]
]]></artwork>
      </section>
      <section anchor="quic-streamdatamoved">
        <name>stream_data_moved</name>
        <t>Importance: Base</t>
        <t>Used to indicate when QUIC stream data moves between the different layers (for
example passing from the application protocol (e.g., HTTP) to QUIC stream
buffers and vice versa) or between the application protocol (e.g., HTTP) and the
actual user application on top (for example a browser engine). This helps make
clear the flow of data, how long data remains in various buffers and the
overheads introduced by individual layers.</t>
        <t>For example, this helps make clear whether received data on a QUIC stream is
moved to the application protocol immediately (for example per received packet)
or in larger batches (for example, all QUIC packets are processed first and
afterwards the application layer reads from the streams with newly available
data). This in turn can help identify bottlenecks, flow control issues or
scheduling problems.</t>
        <t>This event is only for data in QUIC streams. For data in QUIC Datagram Frames,
see <xref target="quic-datagramdatamoved"/>.</t>
        <t>Definition:</t>
        <figure anchor="quic-streamdatamoved-def">
          <name>QUICStreamDataMoved definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICStreamDataMoved = {
    ? stream_id: uint64
    ? offset: uint64

    ; byte length of the moved data
    ? length: uint64
    ? from: "user" /
            "application" /
            "transport" /
            "network" /
            text
    ? to: "user" /
          "application" /
          "transport" /
          "network" /
          text
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-datagramdatamoved">
        <name>datagram_data_moved</name>
        <t>Importance: Base</t>
        <t>Used to indicate when QUIC Datagram Frame data (see <xref target="RFC9221"/>) moves between
the different layers (for example passing from the application protocol (e.g.,
WebTransport) to QUIC Datagram Frame buffers and vice versa) or between the
application protocol and the actual user application on top (for example a
gaming engine or media playback software). This helps make clear the flow of
data, how long data remains in various buffers and the overheads introduced by
individual layers.</t>
        <t>For example, this helps make clear whether received data in a QUIC Datagram
Frame is moved to the application protocol immediately (for example per received
packet) or in larger batches (for example, all QUIC packets are processed first
and afterwards the application layer reads all Datagrams at once). This in turn
can help identify bottlenecks or scheduling problems.</t>
        <t>This event is only for data in QUIC Datagram Frames. For data in QUIC streams,
see <xref target="quic-streamdatamoved"/>.</t>
        <t>Definition:</t>
        <figure anchor="quic-datagramdatamoved-def">
          <name>QUICDatagramDataMoved definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramDataMoved = {
    ; byte length of the moved data
    ? length: uint64
    ? from: "user" /
            "application" /
            "transport" /
            "network" /
            text
    ? to: "user" /
          "application" /
          "transport" /
          "network" /
          text
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="sec-ev">
      <name>Security Events</name>
      <section anchor="security-keyupdated">
        <name>key_updated</name>
        <t>Importance: Base</t>
        <t>Definition:</t>
        <figure anchor="security-keyupdated-def">
          <name>SecurityKeyUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
SecurityKeyUpdated = {
    key_type: KeyType
    ? old: hexstring
    new: hexstring

    ; needed for 1RTT key updates
    ? generation: uint32
    ? trigger:
        ; (e.g., initial, handshake and 0-RTT keys
        ; are generated by TLS)
        "tls" /
        "remote_update" /
        "local_update"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="security-keydiscarded">
        <name>key_discarded</name>
        <t>Importance: Base</t>
        <t>Definition:</t>
        <figure anchor="security-keydiscarded-def">
          <name>SecurityKeyDiscarded definition</name>
          <sourcecode type="cddl"><![CDATA[
SecurityKeyDiscarded = {
    key_type: KeyType
    ? key: hexstring

    ; needed for 1RTT key updates
    ? generation: uint32
    ? trigger:
        ; (e.g., initial, handshake and 0-RTT keys
        ; are generated by TLS)
        "tls" /
        "remote_update" /
        "local_update"
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="rec-ev">
      <name>Recovery events</name>
      <t>Most of the events in this category are kept generic to support different
recovery approaches and various congestion control algorithms. Tool creators
<bcp14>SHOULD</bcp14> make an effort to support and visualize even unknown data in these events
(e.g., plot unknown congestion states by name on a timeline visualization).</t>
      <section anchor="recovery-parametersset">
        <name>parameters_set</name>
        <t>Importance: Base</t>
        <t>This event groups initial parameters from both loss detection and congestion
control into a single event. All these settings are typically set once and never
change. Implementation that do, for some reason, change these parameters during
execution, <bcp14>MAY</bcp14> emit the parameters_set event twice.</t>
        <t>Definition:</t>
        <figure anchor="recovery-parametersset-def">
          <name>RecoveryParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryParametersSet = {

    ; Loss detection, see recovery draft-23, Appendix A.2
    ; in amount of packets
    ? reordering_threshold: uint16

    ; as RTT multiplier
    ? time_threshold: float32

    ; in ms
    timer_granularity: uint16

    ; in ms
    ? initial_rtt:float32

    ; congestion control, Appendix B.1.
    ; in bytes. Note that this could be updated after pmtud
    ? max_datagram_size: uint32

    ; in bytes
    ? initial_congestion_window: uint64

    ; Note that this could change when max_datagram_size changes
    ; in bytes
    ? minimum_congestion_window: uint64
    ? loss_reduction_factor: float32

    ; as PTO multiplier
    ? persistent_congestion_threshold: uint16
}
]]></sourcecode>
        </figure>
        <t>Additionally, this event can contain any number of unspecified fields to support
different recovery approaches.</t>
      </section>
      <section anchor="recovery-metricsupdated">
        <name>metrics_updated</name>
        <t>Importance: Core</t>
        <t>This event is emitted when one or more of the observable recovery metrics changes
value. This event <bcp14>SHOULD</bcp14> group all possible metric updates that happen at or
around the same time in a single event (e.g., if min_rtt and smoothed_rtt change
at the same time, they should be bundled in a single metrics_updated entry, rather
than split out into two). Consequently, a metrics_updated event is only guaranteed
to contain at least one of the listed metrics.</t>
        <t>Definition:</t>
        <figure anchor="recovery-metricsupdated-def">
          <name>RecoveryMetricsUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryMetricsUpdated = {

    ; Loss detection, see recovery draft-23, Appendix A.3
    ; all following rtt fields are expressed in ms
    ? min_rtt: float32
    ? smoothed_rtt: float32
    ? latest_rtt: float32
    ? rtt_variance: float32
    ? pto_count: uint16

    ; Congestion control, Appendix B.2.
    ; in bytes
    ? congestion_window: uint64
    ? bytes_in_flight: uint64

    ; in bytes
    ? ssthresh: uint64

    ; qlog defined
    ; sum of all packet number spaces
    ? packets_in_flight: uint64

    ; in bits per second
    ? pacing_rate: uint64
}
]]></sourcecode>
        </figure>
        <t>In order to make logging easier, implementations <bcp14>MAY</bcp14> log values even if they are the
same as previously reported values (e.g., two subsequent RecoveryMetricsUpdated entries can
both report the exact same value for min_rtt). However, applications <bcp14>SHOULD</bcp14> try to
log only actual updates to values.</t>
        <t>Additionally, this event can contain any number of unspecified fields to support
different recovery approaches.</t>
      </section>
      <section anchor="recovery-congestionstateupdated">
        <name>congestion_state_updated</name>
        <t>Importance: Base</t>
        <t>This event signifies when the congestion controller enters a significant new state
and changes its behaviour. This event's definition is kept generic to support
different Congestion Control algorithms. For example, for the algorithm defined in
the Recovery draft ("enhanced" New Reno), the following states are defined:</t>
        <ul spacing="normal">
          <li>slow_start</li>
          <li>congestion_avoidance</li>
          <li>application_limited</li>
          <li>recovery</li>
        </ul>
        <t>Definition:</t>
        <figure anchor="recovery-congestionstateupdated-def">
          <name>RecoveryCongestionStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryCongestionStateUpdated = {
    ? old: text
    new: text
    ? trigger:
        "persistent_congestion" /
        "ECN"
}
]]></sourcecode>
        </figure>
        <t>The "trigger" field <bcp14>SHOULD</bcp14> be logged if there are multiple ways in which a state change
can occur but <bcp14>MAY</bcp14> be omitted if a given state can only be due to a single event
occurring (e.g., slow start is exited only when ssthresh is exceeded).</t>
      </section>
      <section anchor="recovery-losstimerupdated">
        <name>loss_timer_updated</name>
        <t>Importance: Extra</t>
        <t>This event is emitted when a recovery loss timer changes state. The three main
event types are:</t>
        <ul spacing="normal">
          <li>set: the timer is set with a delta timeout for when it will trigger next</li>
          <li>expired: when the timer effectively expires after the delta timeout</li>
          <li>cancelled: when a timer is cancelled (e.g., all outstanding packets are
acknowledged, start idle period)</li>
        </ul>
        <t>In order to indicate an active timer's timeout update, a new "set" event is used.</t>
        <t>Definition:</t>
        <figure anchor="recovery-losstimerupdated-def">
          <name>RecoveryLossTimerUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryLossTimerUpdated = {

    ; called "mode" in draft-23 A.9.
    ? timer_type: "ack" /
                  "pto"
    ? packet_number_space: PacketNumberSpace
    event_type: "set" /
                "expired" /
                "cancelled"

    ; if event_type === "set": delta time is in ms from
    ; this event's timestamp until when the timer will trigger
    ? delta: float32
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="recovery-packetlost">
        <name>packet_lost</name>
        <t>Importance: Core</t>
        <t>This event is emitted when a packet is deemed lost by loss detection. It is
<bcp14>RECOMMENDED</bcp14> to populate the optional "trigger" field in order to help
disambiguate among the various possible causes of a loss declaration.</t>
        <t>Definition:</t>
        <figure anchor="recovery-packetlost-def">
          <name>RecoveryPacketLost definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryPacketLost = {

    ; should include at least the packet_type and packet_number
    ? header: PacketHeader

    ; not all implementations will keep track of full
    ; packets, so these are optional
    ? frames: [* $QuicFrame]
    ? is_mtu_probe_packet: bool .default false
    ? trigger:
        "reordering_threshold" /
        "time_threshold" /
        ; RFC 9002 Section 6.2.4 paragraph 6, MAY
        "pto_expired"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="recovery-markedforretransmit">
        <name>marked_for_retransmit</name>
        <t>Importance: Extra</t>
        <t>This event indicates which data was marked for retransmit upon detecting a packet
loss (see packet_lost). Similar to the reasoning for the "frames_processed" event,
in order to keep the amount of different events low, this signal is grouped into
in a single event based on existing QUIC frame definitions for all types of
retransmittable data.</t>
        <t>Implementations retransmitting full packets or frames directly can just log the
constituent frames of the lost packet here (or do away with this event and use the
contents of the packet_lost event instead). Conversely, implementations that have
more complex logic (e.g., marking ranges in a stream's data buffer as in-flight),
or that do not track sent frames in full (e.g., only stream offset + length), can
translate their internal behaviour into the appropriate frame instance here even
if that frame was never or will never be put on the wire.</t>
        <t>Much of this data can be inferred if implementations log packet_sent events
(e.g., looking at overlapping stream data offsets and length, one can determine
when data was retransmitted).</t>
        <t>Definition:</t>
        <figure anchor="recovery-markedforretransmit-def">
          <name>RecoveryMarkedForRetransmit definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryMarkedForRetransmit = {
    frames: [+ $QuicFrame]
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="quic-data-field-definitions">
      <name>QUIC data field definitions</name>
      <section anchor="quicversion">
        <name>QuicVersion</name>
        <figure anchor="quicversion-def">
          <name>QuicVersion definition</name>
          <sourcecode type="cddl"><![CDATA[
QuicVersion = hexstring
]]></sourcecode>
        </figure>
      </section>
      <section anchor="connectionid">
        <name>ConnectionID</name>
        <figure anchor="connectionid-def">
          <name>ConnectionID definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectionID = hexstring
]]></sourcecode>
        </figure>
      </section>
      <section anchor="owner">
        <name>Owner</name>
        <figure anchor="owner-def">
          <name>Owner definition</name>
          <sourcecode type="cddl"><![CDATA[
Owner = "local" /
        "remote"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="ipaddress-and-ipversion">
        <name>IPAddress and IPVersion</name>
        <figure anchor="ipaddress-def">
          <name>IPAddress definition</name>
          <sourcecode type="cddl"><![CDATA[
; an IPAddress can either be a "human readable" form
; (e.g., "127.0.0.1" for v4 or
; "2001:0db8:85a3:0000:0000:8a2e:0370:7334" for v6) or
; use a raw byte-form (as the string forms can be ambiguous)
IPAddress = text /
            hexstring
]]></sourcecode>
        </figure>
        <figure anchor="ipversion-def">
          <name>IPVersion definition</name>
          <sourcecode type="cddl"><![CDATA[
IPVersion = "v4" /
            "v6"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="packettype">
        <name>PacketType</name>
        <figure anchor="packettype-def">
          <name>PacketType definition</name>
          <sourcecode type="cddl"><![CDATA[
PacketType = "initial" /
             "handshake" /
             "0RTT" /
             "1RTT" /
             "retry" /
             "version_negotiation" /
             "stateless_reset" /
             "unknown"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="packetnumberspace">
        <name>PacketNumberSpace</name>
        <figure anchor="packetnumberspace-def">
          <name>PacketNumberSpace definition</name>
          <sourcecode type="cddl"><![CDATA[
PacketNumberSpace = "initial" /
                    "handshake" /
                    "application_data"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="packetheader">
        <name>PacketHeader</name>
        <figure anchor="packetheader-def">
          <name>PacketHeader definition</name>
          <sourcecode type="cddl"><![CDATA[
PacketHeader = {
    ? quic_bit: bool .default true
    packet_type: PacketType

    ; only if packet_type === "initial" || "handshake" || "0RTT" ||
    ;                         "1RTT"
    ? packet_number: uint64

    ; the bit flags of the packet headers (spin bit, key update bit,
    ; etc. up to and including the packet number length bits
    ; if present
    ? flags: uint8

    ; only if packet_type === "initial"
    ? token: Token

    ; only if packet_type === "initial" || "handshake" || "0RTT"
    ; Signifies length of the packet_number plus the payload
    ? length: uint16

    ; only if present in the header
    ; if correctly using transport:connection_id_updated events,
    ; dcid can be skipped for 1RTT packets
    ? version: QuicVersion
    ? scil: uint8
    ? dcil: uint8
    ? scid: ConnectionID
    ? dcid: ConnectionID
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="token">
        <name>Token</name>
        <figure anchor="token-def">
          <name>Token definition</name>
          <sourcecode type="cddl"><![CDATA[
Token = {
    ? type: "retry" /
            "resumption"

    ; decoded fields included in the token
    ; (typically: peer's IP address, creation time)
    ? details: {
      * text => any
    }
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
        <t>The token carried in an Initial packet can either be a retry token from a Retry
packet, or one originally provided by the server in a NEW_TOKEN frame used when
resuming a connection (e.g., for address validation purposes). Retry and
resumption tokens typically contain encoded metadata to check the token's
validity when it is used, but this metadata and its format is implementation
specific. For that, this event includes a general-purpose "details" field.</t>
      </section>
      <section anchor="stateless-reset-token">
        <name>Stateless Reset Token</name>
        <figure anchor="stateless-reset-token-def">
          <name>Stateless Reset Token definition</name>
          <sourcecode type="cddl"><![CDATA[
StatelessResetToken = hexstring .size 16
]]></sourcecode>
        </figure>
        <t>The stateless reset token is carried in stateless reset packets, in transport
parameters and in NEW_CONNECTION_ID frames.</t>
      </section>
      <section anchor="keytype">
        <name>KeyType</name>
        <figure anchor="keytype-def">
          <name>KeyType definition</name>
          <sourcecode type="cddl"><![CDATA[
KeyType = "server_initial_secret" /
          "client_initial_secret" /
          "server_handshake_secret" /
          "client_handshake_secret" /
          "server_0rtt_secret" /
          "client_0rtt_secret" /
          "server_1rtt_secret" /
          "client_1rtt_secret"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-frames">
        <name>QUIC Frames</name>
        <t>The generic <tt>$QuicFrame</tt> is defined here as a CDDL extension point (a "socket"
or "plug"). It can be extended to support additional QUIC frame types.</t>
        <figure anchor="quicframe-def">
          <name>QuicFrame plug definition</name>
          <sourcecode type="cddl"><![CDATA[
; The QuicFrame is any key-value map (e.g., JSON object)
$QuicFrame /= {
    * text => any
}
]]></sourcecode>
        </figure>
        <t>The QUIC frame types defined in this document are as follows:</t>
        <figure anchor="quicbaseframe-def">
          <name>QuicBaseFrames definition</name>
          <sourcecode type="cddl"><![CDATA[
QuicBaseFrames /= PaddingFrame /
                  PingFrame /
                  AckFrame /
                  ResetStreamFrame /
                  StopSendingFrame /
                  CryptoFrame /
                  NewTokenFrame /
                  StreamFrame /
                  MaxDataFrame /
                  MaxStreamDataFrame /
                  MaxStreamsFrame /
                  DataBlockedFrame /
                  StreamDataBlockedFrame /
                  StreamsBlockedFrame /
                  NewConnectionIDFrame /
                  RetireConnectionIDFrame /
                  PathChallengeFrame /
                  PathResponseFrame /
                  ConnectionCloseFrame /
                  HandshakeDoneFrame /
                  UnknownFrame /
                  DatagramFrame

$QuicFrame /= QuicBaseFrames
]]></sourcecode>
        </figure>
        <section anchor="paddingframe">
          <name>PaddingFrame</name>
          <t>In QUIC, PADDING frames are simply identified as a single byte of value 0. As
such, each padding byte could be theoretically interpreted and logged as an
individual PaddingFrame.</t>
          <t>However, as this leads to heavy logging overhead, implementations <bcp14>SHOULD</bcp14> instead
emit just a single PaddingFrame and set the payload_length property to the amount
of PADDING bytes/frames included in the packet.</t>
          <figure anchor="paddingframe-def">
            <name>PaddingFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PaddingFrame = {
    frame_type: "padding"

    ; total frame length, including frame header
    ? length: uint32
    payload_length: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="pingframe">
          <name>PingFrame</name>
          <figure anchor="pingframe-def">
            <name>PingFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PingFrame = {
    frame_type: "ping"

    ; total frame length, including frame header
    ? length: uint32
    ? payload_length: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ackframe">
          <name>AckFrame</name>
          <figure anchor="ackframe-def">
            <name>AckFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
; either a single number (e.g., [1]) or two numbers (e.g., [1,2]).
; For two numbers:
; the first number is "from": lowest packet number in interval
; the second number is "to": up to and including the highest
; packet number in the interval
AckRange = [1*2 uint64]

AckFrame = {
    frame_type: "ack"

    ; in ms
    ? ack_delay: float32

    ; e.g., looks like [[1,2],[4,5], [7], [10,22]] serialized
    ? acked_ranges: [+ AckRange]

    ; ECN (explicit congestion notification) related fields
    ; (not always present)
    ? ect1: uint64
    ? ect0:uint64
    ? ce: uint64

    ; total frame length, including frame header
    ? length: uint32
    ? payload_length: uint32
}
]]></sourcecode>
          </figure>
          <t>Note that the packet ranges in AckFrame.acked_ranges do not necessarily have to be
ordered (e.g., [[5,9],[1,4]] is a valid value).</t>
          <t>Note that the two numbers in the packet range can be the same (e.g., [120,120] means
that packet with number 120 was ACKed). However, in that case, implementers <bcp14>SHOULD</bcp14>
log [120] instead and tools <bcp14>MUST</bcp14> be able to deal with both notations.</t>
        </section>
        <section anchor="resetstreamframe">
          <name>ResetStreamFrame</name>
          <figure anchor="resetstreamframe-def">
            <name>ResetStreamFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
ResetStreamFrame = {
    frame_type: "reset_stream"
    stream_id: uint64
    error_code: $ApplicationError /
                uint32

    ; in bytes
    final_size: uint64

    ; total frame length, including frame header
    ? length: uint32
    ? payload_length: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="stopsendingframe">
          <name>StopSendingFrame</name>
          <figure anchor="stopsendingframe-def">
            <name>StopSendingFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StopSendingFrame = {
    frame_type: "stop_sending"
    stream_id: uint64
    error_code: $ApplicationError /
                uint32

    ; total frame length, including frame header
    ? length: uint32
    ? payload_length: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="cryptoframe">
          <name>CryptoFrame</name>
          <figure anchor="cryptoframe-def">
            <name>CryptoFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
CryptoFrame = {
    frame_type: "crypto"
    offset: uint64
    length: uint64
    ? payload_length: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="newtokenframe">
          <name>NewTokenFrame</name>
          <figure anchor="newtokenframe-def">
            <name>NewTokenFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
NewTokenFrame = {
  frame_type: "new_token"
  token: Token
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="streamframe">
          <name>StreamFrame</name>
          <figure anchor="streamframe-def">
            <name>StreamFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StreamFrame = {
    frame_type: "stream"
    stream_id: uint64

    ; These two MUST always be set
    ; If not present in the Frame type, log their default values
    offset: uint64
    length: uint64

    ; this MAY be set any time,
    ; but MUST only be set if the value is true
    ; if absent, the value MUST be assumed to be false
    ? fin: bool .default false
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="maxdataframe">
          <name>MaxDataFrame</name>
          <figure anchor="maxdataframe-def">
            <name>MaxDataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
MaxDataFrame = {
  frame_type: "max_data"
  maximum: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="maxstreamdataframe">
          <name>MaxStreamDataFrame</name>
          <figure anchor="maxstreamdataframe-def">
            <name>MaxStreamDataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
MaxStreamDataFrame = {
  frame_type: "max_stream_data"
  stream_id: uint64
  maximum: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="maxstreamsframe">
          <name>MaxStreamsFrame</name>
          <figure anchor="maxstreamsframe-def">
            <name>MaxStreamsFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
MaxStreamsFrame = {
  frame_type: "max_streams"
  stream_type: StreamType
  maximum: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="datablockedframe">
          <name>DataBlockedFrame</name>
          <figure anchor="datablockedframe-def">
            <name>DataBlockedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
DataBlockedFrame = {
  frame_type: "data_blocked"
  limit: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="streamdatablockedframe">
          <name>StreamDataBlockedFrame</name>
          <figure anchor="streamdatablockedframe-def">
            <name>StreamDataBlockedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StreamDataBlockedFrame = {
  frame_type: "stream_data_blocked"
  stream_id: uint64
  limit: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="streamsblockedframe">
          <name>StreamsBlockedFrame</name>
          <figure anchor="streamsblockedframe-def">
            <name>StreamsBlockedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StreamsBlockedFrame = {
  frame_type: "streams_blocked"
  stream_type: StreamType
  limit: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="newconnectionidframe">
          <name>NewConnectionIDFrame</name>
          <figure anchor="newconnectionidframe-def">
            <name>NewConnectionIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
NewConnectionIDFrame = {
  frame_type: "new_connection_id"
  sequence_number: uint32
  retire_prior_to: uint32

  ; mainly used if e.g., for privacy reasons the full
  ; connection_id cannot be logged
  ? connection_id_length: uint8
  connection_id: ConnectionID
  ? stateless_reset_token: StatelessResetToken
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="retireconnectionidframe">
          <name>RetireConnectionIDFrame</name>
          <figure anchor="retireconnectionid-def">
            <name>RetireConnectionIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
RetireConnectionIDFrame = {
  frame_type: "retire_connection_id"
  sequence_number: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="pathchallengeframe">
          <name>PathChallengeFrame</name>
          <figure anchor="pathchallengeframe-def">
            <name>PathChallengeFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PathChallengeFrame = {
  frame_type: "path_challenge"

  ; always 64-bit
  ? data: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="pathresponseframe">
          <name>PathResponseFrame</name>
          <figure anchor="pathresponseframe-def">
            <name>PathResponseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PathResponseFrame = {
  frame_type: "path_response"

  ; always 64-bit
  ? data: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="connectioncloseframe">
          <name>ConnectionCloseFrame</name>
          <t>The error_code_value field is the numerical value without VLIE encoding. This is
useful because some error types are spread out over a range of codes (e.g.,
QUIC's crypto_error).</t>
          <figure anchor="connectioncloseframe-def">
            <name>ConnectionCloseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
ErrorSpace = "transport" /
             "application"

ConnectionCloseFrame = {
    frame_type: "connection_close"
    ? error_space: ErrorSpace
    ? error_code: TransportError /
                  $ApplicationError /
                  uint32
    ? error_code_value: uint64
    ? reason: text

    ; For known frame types, the appropriate "frame_type" string
    ; For unknown frame types, the hex encoded frame identifier value
    ? trigger_frame_type: uint64 /
                          text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="handshakedoneframe">
          <name>HandshakeDoneFrame</name>
          <figure anchor="handshakedoneframe-def">
            <name>HandshakeDoneFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HandshakeDoneFrame = {
  frame_type: "handshake_done";
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="unknownframe">
          <name>UnknownFrame</name>
          <t>The frame_type_value field is the numerical value without VLIE encoding.</t>
          <figure anchor="unknownframe-def">
            <name>UnknownFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
UnknownFrame = {
    frame_type: "unknown"
    frame_type_value: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="datagramframe">
          <name>DatagramFrame</name>
          <t>The QUIC DATAGRAM frame is defined in <xref section="4" sectionFormat="of" target="RFC9221"/>.</t>
          <figure anchor="datagramframe-def">
            <name>DatagramFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
DatagramFrame = {
    frame_type: "datagram"
    ? length: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="transporterror">
          <name>TransportError</name>
          <figure anchor="transporterror-def">
            <name>TransportError definition</name>
            <sourcecode type="cddl"><![CDATA[
TransportError = "no_error" /
                 "internal_error" /
                 "connection_refused" /
                 "flow_control_error" /
                 "stream_limit_error" /
                 "stream_state_error" /
                 "final_size_error" /
                 "frame_encoding_error" /
                 "transport_parameter_error" /
                 "connection_id_limit_error" /
                 "protocol_violation" /
                 "invalid_token" /
                 "application_error" /
                 "crypto_buffer_exceeded" /
                 "key_update_error" /
                 "aead_limit_reached" /
                 "no_viable_path"
                 ; there is no value to reflect CRYPTO_ERROR
                 ; use the CryptoError type instead
]]></sourcecode>
          </figure>
        </section>
        <section anchor="applicationerror">
          <name>ApplicationError</name>
          <t>By definition, an application error is defined by the application-level
protocol running on top of QUIC (e.g., HTTP/3).</t>
          <t>As such, it cannot be defined here directly. Applications <bcp14>MAY</bcp14> use the provided
extension point through the use of the CDDL "socket" mechanism.</t>
          <t>Application-level qlog definitions that wish to define new ApplicationError strings <bcp14>MUST</bcp14> do so by extending the $ApplicationError socket as such:</t>
          <artwork><![CDATA[
$ApplicationError /= "new_error_name" /
                     "another_new_error_name"
]]></artwork>
        </section>
        <section anchor="cryptoerror">
          <name>CryptoError</name>
          <t>These errors are defined in the TLS document as "A TLS alert is turned into a QUIC
connection error by converting the one-byte alert description into a QUIC error
code. The alert description is added to 0x100 to produce a QUIC error code from
the range reserved for CRYPTO_ERROR."</t>
          <t>This approach maps badly to a pre-defined enum. As such, the crypto_error
string is defined as having a dynamic component here, which should include the
hex-encoded and zero-padded value of the TLS alert description.</t>
          <figure anchor="cryptoerror-def">
            <name>CryptoError definition</name>
            <sourcecode type="cddl"><![CDATA[
; all strings from "crypto_error_0x100" to "crypto_error_0x1ff"
CryptoError = text .regexp "crypto_error_0x1[0-9a-f][0-9a-f]"
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>The security and privacy considerations discussed in <xref target="QLOG-MAIN"/> apply to this
document as well.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TBD</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="QLOG-MAIN">
        <front>
          <title>Main logging schema for qlog</title>
          <author fullname="Robin Marx" initials="R." surname="Marx">
            <organization>Akamai</organization>
          </author>
          <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
            <organization>Meta</organization>
          </author>
          <author fullname="Marten Seemann" initials="M." surname="Seemann">
            <organization>Protocol Labs</organization>
          </author>
          <author fullname="Lucas Pardue" initials="L." surname="Pardue">
            <organization>Cloudflare</organization>
          </author>
          <date day="13" month="February" year="2023"/>
          <abstract>
            <t>   This document describes a high-level schema for a standardized
   logging format called qlog.  This format allows easy sharing of data
   and the creation of reusable visualization and debugging tools.  The
   high-level schema in this document is intended to be protocol-
   agnostic.  Separate documents specify how the format should be used
   for specific protocol data.  The schema is also format-agnostic, and
   can be represented in for example JSON, csv or protobuf.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-05"/>
      </reference>
      <reference anchor="QUIC-TRANSPORT">
        <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="QUIC-RECOVERY">
        <front>
          <title>QUIC Loss Detection and Congestion Control</title>
          <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
          <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9002"/>
        <seriesInfo name="DOI" value="10.17487/RFC9002"/>
      </reference>
      <reference anchor="QUIC-TLS">
        <front>
          <title>Extended BGP Administrative Shutdown Communication</title>
          <author fullname="J. Snijders" initials="J." surname="Snijders"/>
          <author fullname="J. Heitz" initials="J." surname="Heitz"/>
          <author fullname="J. Scudder" initials="J." surname="Scudder"/>
          <author fullname="A. Azimov" initials="A." surname="Azimov"/>
          <date month="January" year="2021"/>
          <abstract>
            <t>This document enhances the BGP Cease NOTIFICATION message "Administrative Shutdown" and "Administrative Reset" subcodes for operators to transmit a short free-form message to describe why a BGP session was shut down or reset. This document updates RFC 4486 and obsoletes RFC 8203 by defining an Extended BGP Administrative Shutdown Communication of up to 255 octets to improve communication using multibyte character sets.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9003"/>
        <seriesInfo name="DOI" value="10.17487/RFC9003"/>
      </reference>
      <reference anchor="QUIC-DATAGRAM">
        <front>
          <title>An Unreliable Datagram Extension to QUIC</title>
          <author fullname="T. Pauly" initials="T." surname="Pauly"/>
          <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <date month="March" year="2022"/>
          <abstract>
            <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9221"/>
        <seriesInfo name="DOI" value="10.17487/RFC9221"/>
      </reference>
      <reference anchor="GREASEBIT">
        <front>
          <title>Greasing the QUIC Bit</title>
          <author fullname="M. Thomson" initials="M." surname="Thomson"/>
          <date month="August" year="2022"/>
          <abstract>
            <t>This document describes a method for negotiating the ability to send an arbitrary value for the second-most significant bit in QUIC packets.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9287"/>
        <seriesInfo name="DOI" value="10.17487/RFC9287"/>
      </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>
      <reference anchor="CDDL">
        <front>
          <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
          <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
          <author fullname="C. Vigano" initials="C." surname="Vigano"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="June" year="2019"/>
          <abstract>
            <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8610"/>
        <seriesInfo name="DOI" value="10.17487/RFC8610"/>
      </reference>
      <reference anchor="RFC9221">
        <front>
          <title>An Unreliable Datagram Extension to QUIC</title>
          <author fullname="T. Pauly" initials="T." surname="Pauly"/>
          <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <date month="March" year="2022"/>
          <abstract>
            <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9221"/>
        <seriesInfo name="DOI" value="10.17487/RFC9221"/>
      </reference>
    </references>
    <section anchor="change-log">
      <name>Change Log</name>
      <section anchor="since-draft-ietf-qlog-quic-events-04">
        <name>Since draft-ietf-qlog-quic-events-04:</name>
        <ul spacing="normal">
          <li>Updated guidance on logging events across connections (#279)</li>
          <li>Renamed 'transport' category to 'quic' (#302)</li>
          <li>Added support for multiple packet numbers in 'quic:frames_processed' (#307)</li>
          <li>Added definitions for RFC9287 (QUIC GREASE Bit extension) (#311)</li>
          <li>Added definitions for RFC9221 (QUIC Datagram Frame extension) (#310)</li>
          <li>(Temporarily) removed definitions for connection migration events (#317)</li>
          <li>Editorial and formatting changes (#298, #299, #304, #306, #327)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-qlog-quic-events-03">
        <name>Since draft-ietf-qlog-quic-events-03:</name>
        <ul spacing="normal">
          <li>Ensured consistent use of RawInfo to indicate raw wire bytes (#243)</li>
          <li>Renamed UnknownFrame:raw_frame_type to :frame_type_value (#54)</li>
          <li>Renamed ConnectionCloseFrame:raw_error_code to :error_code_value (#54)</li>
          <li>Changed triggers for packet_dropped (#278)</li>
          <li>Added entries to TransportError enum (#285)</li>
          <li>Changed minimum_congestion_window to uint64 (#288)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-qlog-quic-events-02">
        <name>Since draft-ietf-qlog-quic-events-02:</name>
        <ul spacing="normal">
          <li>Renamed key_retired to key_discarded (#185)</li>
          <li>Added fields and events for DPLPMTUD (#135)</li>
          <li>Made packet_number optional in PacketHeader (#244)</li>
          <li>Removed connection_retried event placeholder (#255)</li>
          <li>Changed QuicFrame to a CDDL plug type (#257)</li>
          <li>Moved data definitions out of the appendix into separate sections</li>
          <li>Added overview Table of Contents</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-qlog-quic-events-01">
        <name>Since draft-ietf-qlog-quic-events-01:</name>
        <ul spacing="normal">
          <li>Added Stateless Reset Token type (#122)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-qlog-quic-events-00">
        <name>Since draft-ietf-qlog-quic-events-00:</name>
        <ul spacing="normal">
          <li>Change the data definition language from TypeScript to CDDL (#143)</li>
        </ul>
      </section>
      <section anchor="since-draft-marx-qlog-event-definitions-quic-h3-02">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-02:</name>
        <ul spacing="normal">
          <li>These changes were done in preparation of the adoption of the drafts by the QUIC
working group (#137)</li>
          <li>Split QUIC and HTTP/3 events into two separate documents</li>
          <li>Moved RawInfo, Importance, Generic events and Simulation events to the main
schema document.</li>
          <li>Changed to/from value options of the <tt>data_moved</tt> event</li>
        </ul>
      </section>
      <section anchor="since-draft-marx-qlog-event-definitions-quic-h3-01">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-01:</name>
        <t>Major changes:</t>
        <ul spacing="normal">
          <li>Moved data_moved from http to transport. Also made the "from" and "to" fields
flexible strings instead of an enum (#111,#65)</li>
          <li>Moved packet_type fields to PacketHeader. Moved packet_size field out of
PacketHeader to RawInfo:length (#40)</li>
          <li>Made events that need to log packet_type and packet_number use a header field
instead of logging these fields individually</li>
          <li>Added support for logging retry, stateless reset and initial tokens (#94,#86,#117)</li>
          <li>Moved separate general event categories into a single category "generic" (#47)</li>
          <li>Added "transport:connection_closed" event (#43,#85,#78,#49)</li>
          <li>Added version_information and alpn_information events (#85,#75,#28)</li>
          <li>Added parameters_restored events to help clarify 0-RTT behaviour (#88)</li>
        </ul>
        <t>Smaller changes:</t>
        <ul spacing="normal">
          <li>Merged loss_timer events into one loss_timer_updated event</li>
          <li>Field data types are now strongly defined (#10,#39,#36,#115)</li>
          <li>Renamed qpack instruction_received and instruction_sent to instruction_created
and instruction_parsed (#114)</li>
          <li>Updated qpack:dynamic_table_updated.update_type. It now has the value "inserted"
instead of "added" (#113)</li>
          <li>Updated qpack:dynamic_table_updated. It now has an "owner" field to
differentiate encoder vs decoder state (#112)</li>
          <li>Removed push_allowed from http:parameters_set (#110)</li>
          <li>Removed explicit trigger field indications from events, since this was moved to
be a generic property of the "data" field (#80)</li>
          <li>Updated transport:connection_id_updated to be more in line with other similar
events. Also dropped importance from Core to Base (#45)</li>
          <li>Added length property to PaddingFrame (#34)</li>
          <li>Added packet_number field to transport:frames_processed (#74)</li>
          <li>Added a way to generically log packet header flags (first 8 bits) to
PacketHeader</li>
          <li>Added additional guidance on which events to log in which situations (#53)</li>
          <li>Added "simulation:scenario" event to help indicate simulation details</li>
          <li>Added "packets_acked" event (#107)</li>
          <li>Added "datagram_ids" to the datagram_X and packet_X events to allow tracking of
coalesced QUIC packets (#91)</li>
          <li>Extended connection_state_updated with more fine-grained states (#49)</li>
        </ul>
      </section>
      <section anchor="since-draft-marx-qlog-event-definitions-quic-h3-00">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-00:</name>
        <ul spacing="normal">
          <li>Event and category names are now all lowercase</li>
          <li>Added many new events and their definitions</li>
          <li>"type" fields have been made more specific (especially important for PacketType
fields, which are now called packet_type instead of type)</li>
          <li>Events are given an importance indicator (issue #22)</li>
          <li>Event names are more consistent and use past tense (issue #21)</li>
          <li>Triggers have been redefined as properties of the "data" field and updated for most events (issue #23)</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Much of the initial work by Robin Marx was done at the Hasselt and KU Leuven
Universities.</t>
      <t>Thanks to Jana Iyengar, Brian Trammell, Dmitri Tikhonov, Stephen Petrides, Jari
Arkko, Marcus Ihlar, Victor Vasiliev, Mirja Kuehlewind, Jeremy Laine, Kazu
Yamamoto, and Christian Huitema for their feedback and suggestions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1923Yb15Xge33FaShrmXQAiqRkWYZHndAkbbOtW0gq6SxH
Cy4Ch2RFhSqkqkAKkdXfMq/zD/M0/WOzr+dSVQApd5LuNT3uji2hznWfffbZ
9z0ajZIma3I7Nr97c3Jo7I0tGjOzl1mRNVlZ1OayrMxf8vIqmZXTIp1Dw1mV
XjajzDaXo78ss+kIv/KfqHc92v0imaaNvSqr1djUzSxJskU1Nk21rJv93d2v
dveTtLLp2JxXaVEvyqpJbsvq3VVVLhe8juSdXcFPs7E5KRpbFbYZHeGsSVI3
aTGbpHlZwEpWtk4W2dj82JTToYEFZsUMVjA0NYxZ2csa/rSayx+aKpvCp2k5
X6Tyhzkud2iyIs8K+zZJ0mVzXVbjxJgR/M/Ah3psTnfMi7R6Tz8wAE7Li6zw
P5bV1dgcvEvnaUZ/t/CHfGyqOTT4bUq/78Bk9K0qEdR2ljVlFU/zfMe8zKbT
EpaSBXM9X07T1gea74Vt0nC2vNA2v53Dp3tM+GLHnFnoXRTBdLCpxhbRB5ru
dVUCjMvcPE8v6nDeOXX47UK+7wgM2tO6Pb5Oq9nStjZYhz/TfId5uZxd5oAm
0Sax7YKa7uw/3vnyt1f4e/9ek6KEE2iyGztO4Ovvnr/6bvTi4OTlmJqejI52
WhgMQxWjenoNcwHCFpdB99FoZGDfTQWIkyTn11mNyLac812pp1V2YWtAqGJa
2cbSdem5SYC4prm2WWXwhGZpk+LlSvy9q3fM+bWtrfzNTNMCOxTmAn6aX9jZ
zM4AkPibuc6urm1lcmiaG141T2ZnsHjz4YPb8MePO7yDomzs5CX+qyknpzad
2apOkn82+JNpSnP67aEAD847tykspLLz8gY+4o5rO8V9wGJg1dYslhd5Btcc
foLxv7V2dpFO39EmZ1k9XdY1NoYDNLc2hxOyJm2SH6+bZlGPHz68yprr5QWe
3EM8gdurhwi0t1ubv2/vGFk3Dpyks5usBpDA2uGOAzTgDwibAe/is5pJ1QBm
ht/hX29OnxM9A7guF6OmHMEhWHMD48Fak/KSN6pHC9s61CO179P5IodDhkYZ
kKSrKuVD1U5yBFmR3KRVVi5rA1cCWs3nWXFl8rS4WqZXls8UjvOyXAKgNkAE
dktbfrgWJq7FtpzvPJvNcpskD5BoVuVsSee1Hl8RVDdpvrSyC0FcvJZma6AU
fGB+DQBFhBxs4+kmA8TcgbnMbD4LkbpGktFkU34ycDjCbKUMZqu2Nvnw4Z/w
19H56cHLs9evTs+fAdZ9tbu7+/Hj0OjH0+PDV78/Pv2jfNvHbziz6/z8TD49
+viRFgUEHxaNZwPXxr4HilTT6URzHh2cH3x3evCC+u7v7338SF3h83enxwdn
x9+c8Gr2n34JwwJQHzzAu0EHneYGcAGhgOMiTK2BN8rgI1WbwYs3Z+eDIf/X
vHxFfz49hllPj4/wz2ffHzx/7v6QSIuz71+9eX7k/+R7Hr568eL45RF3hl9N
9FMyeHHwxwHBxAxevT4/efXy4PmAKUN41Hj54EoAuiHKVgvEZEC6OlEcIGry
zeHr//M/9x4jHGD3+3t7XwFg+C9P9758DH+5BRrEs5VFvpK/wgGvknSxsGmF
o6R5Dri9yJo0hxcVKHp9Xd4WBmiUBUh+/iNC5u3Y/I+L6WLv8T/LD7jh6EeF
WfQjwaz7S6czA7Hnp55pHDSj31uQjtd78Mfo7wr34EdGCyb8RAeRxMOrARdx
CUcRvgV0Vq2jsu/hhOqaCTjeH6Q+QODMEY5z5HrDG8zUBE/p8OjoOWLt0yd7
u4LQcAeS4A5Eh91+F3DBl2Wel7dIpuROX1blPG5J68vmyKohBsEkS1jnmGgF
cFJCKoZJs1rA33HfQ0Ps3CSbDR0JmPBnHictpvDn0/T2BJ5axq4mm9tRZXMY
bpbwWvAWmldAoW8ye7uelAGu9VCczJFbB1qEAVG5ZQ0bTrBP/Hh2gdQaVN7m
VA8UutwCYTap43lhM0JEcXjkCuBDQWQESVRAWekCC21FEJiBhw1cc/ihXAj1
GQD7enVlK732IREGIJ0h/WOWgs8QzodY3dy+p98dGjomA3dQWYQLzE90wdhi
OYfHoEoqO1rW6UUeIe0Qbn42vaaOdLj09F7ZBhmRklH2omwaQJ72U5rgkzAF
di5rVrDaPyBTkxYruSuEbzHpyvCKTPOlcDwpHxoyYJZITzKIkGrA39OqSlcM
AUP0BYDfpNi/gL011YqPyj18ZoBnO9AVuSdwoLgrEMblIMID7tLSKsvCw4yZ
D4Q1DgQMxys4pQzOKzmydZPJocM9LoR5OjkyW6+ODk+OhnzD4e/T67JGHm9F
v0zzDPePNBbmruomoT1Ab7ifhK5wF2y1TTSWYJbxS06kmXdFvM6shHsBLB+M
D+QCvt9YepVhvGVVW33yp35tiFdyX5bCVoE88c7Mkd0DXguxcia3AVg9C7dg
y+5c7QyTU9sg2v+eGSnzEtC7yWjv2zhKaq6Ajy6CuUD0yOYZ4EO+YkAQTPDN
WAK0L2xCC0hrfySXWW7pUgEi4Z9NhpJeBsdTAYEBDhb+Am/QytTLy8vsPfRm
gAI7BuC7sosS3kCDuGK2voUxhKEDMF5MZ3v7jx5PGLA7NNstrUOxx4N9VMO0
CaFhDwAJuXgnOqqwEUDmBGYE5csKd+JkDGTSIrCm+W26cjcAsffg+AAGXaI0
0AjXbWBbzNkCfStmO8lJYa5sYas0Z5gCwK5gQbJOGgG7zOwCmtd6Y4GZMtNs
AXc4qZdZgxDJQQpeXl3zm06fDH3iS4D3kVZ7s0eYn5q9JwBslCHSK9guihMg
M4FIXHM7ZBIKYhV7d3DZMGIqgBbpKi/T2TD4Lbkmrn/CO3JUfZrm0yW9FoAq
NGXUzjxTEIx00In7Ye8JtkdMeHP0migkMus1z6oD4xqRt88QVapPmSEAAxwL
cacguto6OhllofF65XWJrxSIVFkDWAzyTA5YRdBGnMNTjGABZDxCY/f6nZ0D
M/tCUOwarlBqBjyfI2bFjA4ACAqyCrJw2OVfbede0pDPS2j6PU3bPyK/CwAp
+5cl0D4Rw3Rg2e0iX9bhOcNbc0ESLH7dQTA19C45OAFZFBAlxH4UDbPfdM3p
3YIr6QTijry9Y45viKgTLhOpRLwBwRZJWzJbLkh+lWfzVh+AyyVgvbAluCUg
B1dC+VPkk3D7RBFnGTwDjZkDeiMoy8vEAaxe2CmQpqnIiAAPpCpDaPuOoW5A
ugbKRZIS3KGK2jgmnWnGMTMaSMIvbA5HQC8AUlNkXfKI8nx4AER+BtT6arQs
3hXAeY/81/pjkhxop0A3wWQMn4/VAtaKUE3rupxmdKOYqdFutK2Afiffl7cw
CtBe3EKNfwQmBckrCZPCJG1dRpQWGCtStzACzKoSCMPs48eEl8NPM3M58pAR
t+QmncjWkFcCEAoRQI6prjPkVRDvMovHMBdAyTm0lz80lj7RnsuQwDNLXDF3
pJI8EWMYkGBsBU15izBSCqgvBzu1FT8YFdyV8vKyTi5sc2vpKYeOeMPoHcYr
DJAD3iy7yHLgiXAYfpMBG4b4xsnfEyI9yBKl8m6SoLtQKYIeCCAzn8MlJf5g
zuxSbRdphcgNlJeevtEtUhE+8i3GOgUQHJzyOwz37cQQ2q3FhhAR4pkRkvOy
bpBFgkUDeJmVwHmx7RucdjbLhKu9tssqq53SIMBofd7lpQgxidaOT7tBNUo1
apb4I25bBlY9UMR3beP03wBzANgl6LmEGXISZBWZYMfZVcG8TxouJ5r/knSa
ojYyhed26HGvkBmSKej5Z+yj6xyIMi2UJPVhDbBAJJhluExsv7hGashiHZKH
lJej6kIgmmU1I81XMi9nNic6Nwx1+XwnSVzJbjLmp2F3wimo7JbZeuxWcwMY
mWx9+IB/H9mbjx/hwtV2ukTu3cDv8Gf9Ge+zXmv8aSggmCKar5IPHyppC4A4
6MiiZwLdRzuPd/Zx44HcNQzYcWT8AlacudiWWKVSFUuSsGmY0S0MoQVSbL2c
z+FO/1WUX8RPOkpDF9nDjLlolEmcYJiwpi8k7jDJz+alH2fDPz+bEyfcwV9C
gf7n5Ofx6F7/RO1+NlEvGCU6wjGTtEkOWGULpE9+Kcfv4UrqX/iktduIu7le
ALfOyAFRrpuUlAI62DdIuNaMHKA797pj7Gle1m7oe4/Nve4YOptNlotZKiu/
79DZTDr1jV4DHzC5yJpw4HssHLtBrw0Dx9BurJvgE6Dd2A0TzJtlZ9H3QBTo
Fg+Kt20sdHESiDfBeIfIOvnx6H5Kj6BDOF6aL/oHWzse9lgzGL6KcwuEtAZ5
r2lvtm8w3wM6rBkKeNEGum448dZQ2iEeD7miCWpjTPufdUsjcRE69IyDD3B2
0zrQTeNoh56xhFVrr6l/jxFv1xnqgl7gzrLWD6UdumPVE/xPa1VdlA1BRR3C
kZzg1wP3/pFcjzbc/VBd0N8xVB/o9WMf8DcP1wP8Gk4Xhoqpx0bgc48ewkHj
kXRZTxZVOWW16p2L4x6uQ8/icPkTNDe2T3TjCrEXdeqH3Zox+0d0AGyNqbzP
+J1d9dPJ3jG12wi6xTCMBkRraVrN7rHtcEDXS4ZUlmsjhesOqd16yZwbEz5U
wKOveyNaNMWNKd3ivbtB4Sm5QiVp51XbvFDfrQc53eDAAtQTtCdUPYvuYKgb
HLtRrzXDChHLUcLpQYB1gOBu2KsD2bQCijSBt2qCckNa1POsuXud3A16+U40
8oexeRCwvIZce54NvABSDz4moccBG0vJhGt++pV6eVDTb8rZ6idvTDWsQQ24
4bYt6d/+7d/MdDbLk9/BCkR78cwJYcgxnBFn+dzxow+TCIBhUy+7nQmDea/G
h8wx3qvtydEbQY0Nzc+AO/sma+7RMlpxY+/R48X5mzWtzuSm/2BXd7c4cgSk
1QbPWXTyJwH/1NPq4Pnrl3c0ee0IxBmQlY0NTpUd6m2FV+EMH9u1X0/1/Vzb
4kjexLUNvlE2Y22L+oCYh57vR/osr1ula7Bpodpow1LP6AXbhC3Y6lt6OV+7
p3btQDjji/Ku5axrdCq0ZeM5a6MXTNnXrFpbHTpSvWmP2vo50N5zpL13tOPj
g9ZNknQplnn4zHj6gzTJEUXxTgQK5uiiJ1RecUwKhM643qKOFPRBdI+Vln54
oBoTUuB2xG/+vlbOTrx+YMyUP0mOgbKT/k3V09zJkPxcm3Q6tQvS5AfCHpBi
r1sYB3R5Eyl+Zj4QuH9jssXk5vHYnLw+mM3QaB78/KT7M66Y2i/hddh7Ev36
xP1KP38dbuA2y3O1c8EDdmsrNX3SwtO8Vp0j6dNkgK2iNHuj0/PzUDcHDMty
UaO9b3pdwjFvyyKoIzyrcPYVOitclGWefHQoseksQiTZBDWPNYgVpJtlA0AD
SIrmbNKjit64Ltm6x4aDnDVV5KNzvURlZCo6bHS2PXmNXx+WFYEyNBWycaBH
AdPCrq6uJcIvZK+S5A0SFFRtXpQIa0C1OaPTFh/GaAF0YEFjWna08hi3JSbR
sElS2NsIFcW58JrslGggIv0aGpHwLufpgk95nYYjYfcytnKHWm0aBj02AYwX
dpouWXuOFktEskDFTNYdWgBbl5MLKzade92TLh8S3xR+XvFeyEtL3+pqOskW
7dsyq5vWr3ov1A/a5OkKboL6Nuhtkr+OTQNUyOwA1qXLvBHvBWmEU+IQrZuI
c/b8jK2nGVyKkB0KunS/rbk4HTRbd3W6gPyvcHlEw7j27ogucdPVQWTC+0Ak
OjIa3AKa8wDDwMbG7Qpjqwp6o6skPHrlsknKKbB0QKnueWmSe+kIyU/k1iKx
ZaX34auXL48P0Xdtcvj81dkxW4oDg14GrD7ZGdDVRhab5qu/sh9rdYU+QYu8
XKnzfBM4jVwuczaU3cAdTMRaxMt3rkY4TtpzBtTM+RihPVzMW/hAJMGNBl6n
LgsxB8BscD3QsBFe+vDIzYH7Ha3a5MGT+LWigQFXgK5RZrYUKyKdSOTxhDaZ
bIrXjt2N0TzPXmRkjyjZC2qhL/CJOEk0zprY3JZEsYKtj3BiHIFxoc8Ww/wI
OlqqtzU3ZjeuFYMaz3ekkpmMVc7EbuT8cgGvkHw0ZcIWzGs9cV6j2lMp4AJg
yNMwGhJq8h/n6QqRFv+D1/PKNgmawNlmRo5ICKdMB5CFwLZjS+bI2WaRBdhB
Z5F6Ob0eJnMAcYZWtrC7rA0VGmquRZuLWGv8eeB1+USyLhIjUnWhxnzm5HUh
qBn7+QiZLG8LW43NK/yP/BQiNaw7CHA5ps20OFr/z2G1WjTlHY2QgD/al6kC
hJC5fnXgf7pjpHgoPXEZJ/rGd40fHvlJTPRjN/hgmtu0GATTDZBo19fpOzuR
qxR9zYCg93342j31SCkF7oNsPrcztELzaQzUzEzX6/TbQz8uYUw0E5HCHF5a
VNHbeBVqp5hnNVCK6XW8ktDe+/35+euHjz6rzXevDv5w8EemmH6g4CgGdz+T
jFJ3v5KCl/Ej2Xq9AiPW2hfMm6x6HrFz/7zgH0Jhw2ZE0YDhAgGHh6jF05+e
KegS2dfxCrOB1D911+T6VbNvIgbu4IOwcq6IxrsippF3hn/1EvG5IY6N3WQu
LPvfWKIzRACu0a9HnmEiQRfiG4SueMRgknFXHKgEf3bYkUreEfGSGwRWmAHS
uUHLnDJQ27sAD/4f7fnIC7AXqzUBQ6zDqhcGXduVLhOZ5WwW0D4n5bn2Mi0y
vzFrDR3DGenhbliqqi27RyAfF/qYwQXYMX/oTKFni6ET6LIfzZGwh6d5efyH
ScA5AFjpErAnDoCeeQvkKr1P8qdQYa+LU/a6h7yWeT/DCpD5VGbV3Yq7L6Jf
WnwXUcJvW3zbEn5s2u27gCUHd7WlfOhoLjJ13q3Zu2DHnDTGhzSEPTPCs8T1
o3gt9qkCIsvDiMOfjHUvJUGs/NSjIap6hzwd7XytOB2P34HvWsP3JlnX2wTu
JHjq5ozuSe84YAveCoBkRT6D4tOtbvTuUSOOLLgmRNIN2bZm7GF/Ih7sjfMR
VybVvr8GYZVpw8K5B6LUQiSK1k8emtB6yRzrxbJhfljGcB6IF2mdTYfqnkoH
jq5JMaMFtBP3RI+8rRtxmMQNE+NJk87xua1kchJGM2Gd64Qokzgpin828n32
/YIYrpLIzQgGGIljHI1SRx6sJJf/hcgEgs4tMBjzspwuySe5Xi5IatMgsjNq
3VKuEy37ZPHdqyC9DN+iKTx6xDj1LoADWGO60+nb3/NjkrT7PBPOU1RfBl+f
h/riJMxksG4GH6CH0hqpPgo9hLNwqTPe28VqrKo0sml/79BWHG9fncoA0opu
ARL3TjCC+kQKc6bM7IgjwB/tDzUodPR0Z4/XiYuauMXoYgOGUNQEfht7hvR5
yuGjDIgY729bVhefYTxDYc3KMhc6sOiiPLmtssb6kdCV3Xfja4uE6luAa31t
Z8YZ5lkuKhrdWV737Onxzp7uyi9fR/Wzfn/w8ujs+4MfjidHr14ex2dntsLX
FJ15b+EoiTUYDM0ebFyPwm9/e2fDeva76ykus2oegFpkSr/Atqjdh14wW1ZE
vfQXZGeyckbwH0ZqV0JdZ4f2k8NakqT/2j5bg8zr8ePOreJsd2um3KNwL/WU
JxTxk3QeErgpWl/hPhRO8vWBdJ6G1l69KteNcQ8vFvrtfn5Iv44//zxJRngy
M6UCtMWRgPmZcTCDZiB0r2nlycBkC8k0yG/IiA8Ka2cIOIkX4aXwRcPghFuU
7L1ORCIErH8SCzh96IhPyfZEVkDhSR3y0lpQ52Clc4cqTTnYBqHHWna9tWsH
1KuocGNIrukWEAz6srWnVAfvpF49XVx0pTcsQBASz5EXLee4/oDCYwxPG87r
/NXRK7xmn5Eeo3jHYhCeXKT7ppHw1Uc/Uoos8TQvtKrInlRcJoXJZZ5dXTca
OvYbOkpahR/i+HhoDo9Pz+Hfvx+anZ2dexwoDbHx1D4J/IxY120MeUi7RdBI
+CZBhWwQWV0vRdwDiWueFRJWsu52yESdKQIk3IhN65Hw01HHBQp1uF1m/p3z
PQqAPBLGRQQ0VCIA8YTJL9oummWaayBy3VJfOYORfL/ADA9OlGTK8FmdBFJs
FBWUBmtwTw0Kyv4J8ZSxFtKYtN8gmZ318aH7aYuzD1xM+8yjvTxf4FbBfJ5w
ec4AQnybt0x+jVSRLhIJxEMDA9C7RuZm2G654JD21AyuSngKbYHiwYC6CuJQ
aAdq6C8o2gOzO9DEM8pTg5KSN9tcAjNv1wlOfsPrXqpge+3Xycs2QsBrtSKA
4IGOTdTrdQrohHtE+4RMhtpk6K0KmxTDwqpG1Reuh4eKePLtJC7AQYzgcIIa
DUCH2+cOLE16/H6jQ0Z3KvVWEm1FzRILab1ZGYUqi1ziJjCCgCITeeCaYztE
oiCFeeJ53toHq+TZO4vRsxLRwRQzq4QQCYUGqe4ytGBjgG2i0gqBWfqTTqSy
C5jJGbEVCmGwCKPOMCA6Ohwckm5hx3yr0dHDMEC4tihd1X5oOUG51FfwbF8h
AiRsEiVp1B8AxwiF5hmKmEC5lSTNQOvGsW3GrSxxwE0bjqsWPZLqGoC9RerT
Fx6Db5lEsTGmrZXh1rgueblNnCt0MWPz46/J70M6vVWNPEHr7mYk9nhrbtAk
uKhrkDbyKOlfd3xRT1QvAFiI2YVYKYfPBz1qhWJcdOCiZHNHzHbzeHskXZvW
blBWhjneAD0WAUgscJG7hYvwamPgMMR5twiYJVhG6zA4kvyXL6Iwy+LudcAS
2uBor6OWeOs2mORRMnIFRpbVEZI/IGACwhfRs27hlbOYGMoWFA/eBT0KQRnF
4XvTbVrz+7DTB4++WyNPjHuieZcd5OiBR3vfCo82nER+cX/PChrMblpOzxnH
wzh9NPpmcMgcK73f+/MWkQHfiU6YhzwS7WCOdS9EW+u16Z0IramcQUtdLPgK
he9HZfkRjN8Rj7hqonaDSzYkRy99sCZpX6M3BbmK8KFFDUZgxjPPyR1EndGS
ILGC2ULAbHv/XH2exNqMCSpKzR+yVW9H1wfODQ6uTtwDiM3msBzUsdDBQu9l
4VgIwCpK7iUHzHunCUHGHLYYPLLfEY+3kbq3XU47pB33hwT7czI+tgj6mo+M
j/hRTJYt4t1Cpjblbq/p70y2aRNCGWmsgBIU6wkzduunysEcSNwCOOIsw3he
itXPYyo3EhXzjLB5GL8n2M3dcYp29BYnwJkeDLnHvopgOxtA1r8Kp2YTk8bI
HORky0aphYUVGRMlTcZ67IuakZyjluU+ivMJ6kNu08xpn2FammPhbqiAXDch
DiTtAw70PQLtLiRrDfRvRWwI3YsDMnqoXsDuUfg2nTF610gCJw3K98HEdbms
gGk3W97fzM8yTHwmEAxrb6Y72xwqHHOKwmdSsp6CoAniNoiHf7XseTeHtw2h
lWiiJNaPzey0pDjtQECV9SLpTpGX1RcOyCe8j/BckqV0blEOzuo5JRGSxAmY
/nDEpJtdFKAlhhiz/x/pOAUW5HrjLNLsQTJlKldYJoYoZe+Y7wN3mBXlF4y7
YU4dB0r0XkB3ocrdn8B8XZdCiOly+FEubKKHkqFSsphan0AwwB4/jVhvGVW8
VxgJq26H/MjdlpSvQF6/LTwbXHVeTtmKhD+gLyzbgCQ5DuZ3bNh+vO0PNjLd
kFWcjLESge3t1bzwIN3SBb4DFaXFoDSLee5X6dI5tQQPhQQ9J6tySUKC2sRi
jMY9olsOoCc2pCnRAMofYt9QB2D2xeKsLuxrEDxVla2X84Xz+t5F1+KhSybo
7/tndXBTKBuJRDgsFyNYWtHEilWXIc1ZsZRexPrzqlkudpJzwTeDqWwqlch9
qiq3BJQpV91MKcsmy+X6JQ4KP/WEp/7kHaachjdcHCeDlFxsyOT3N9cFuubI
38KTmW987+O4gsAAF9r5naUJH5dL1tfB/jmXaJMR44kMdGS8+E1wjBOSXJ23
d2s80kKyR7CPa7qlxGfoPzoLcyKRJ66Mz9pLCiaUlvH47CMxODg+m+ztP518
d/hicvb9wf4XT9Q5t8nrCZNW4UukoyS/VFBI8rDJzCcPm0TuPr3uD3J8Eybv
9+jAjvH3bt5yopo05TsL/NWZ/nyKv57jj+pAnFHuuAkbuibzTLKlCtC40Tx9
PwkdwVgj9+Rx8Hk5W0w0rRIq2Fq+acBvAKTgnCb2PchRaEWJnZxxDNeo9U3W
FjtT5fCONeO2dxxDFwdDDGitM/wcBrJeZLNsQsT3UzowPb5nD2DQ72xZ07j3
aNYdbEE5dYFsTMTGjFmg5aeW/7okVA3A7iJwyU0oOD0YPuz09MvWFRUn4SGL
1Q2le0N9KV1fd2eRgVOZ1FGBK+QE7AS5J3TKcQ4qSXvZjvr0hrr0Brr0hbm0
g1zwt7tu0yfcpZboEvGDbcElJq6x2BK7Pwe8BvHELkHiShNyYRKiQrxz8QVj
dy7HHDRlot62yr9Bjyg9D6dpMlt8ILNt08dvUpKjOTqSwwFugdyxqDILT+Iq
kGnrDoPsMi10uGSXUqHH64eEEDYZka5A3nl+rGtNvsosD3kTzy2BgnPZ0LjR
S5z0bsi741X2hhJHeWyItLOB55E+rAk7HQej3VrKzynbFS6aW0nSZvIW48cf
d0abCmIHEkrhhAxo32JdqkU/x9YcsYCAgYnT4EiuM7hH4tqYXFicBTODMr8x
22ZNCFDemsRFaOid3fVDCFcfI4DqIOUUad3wIb1a75S2Jr7UcxH/sCfnv/6r
MfzPejbWEizFsPVUy51oTLocLg/JRNOWlMl0eT+SlnRJGuX4Qm6RZRVHJR9O
lzXmsPWTKRXy+Vkc9XEJWHoE9E2o7IKgFYXZGRmeWPrEyRYF7pw6g5Rdv0LD
BAUEq8orA8ayTOHpmCpT2jY0ygNLPtjwiPJEO7IbynT17NkzMyCmUPlV5hDl
ceLn6J7DtD3u1bPNJTUFBhk9VEkfKrkfP53PvOdieqxuLlxO1Wl32oaq9Has
CSGV2ih3k83a976eoDUbaOeFnfB6+k9F5II4luJrqa2y/8h84ZzPDJ8NZ3kA
0FDCN+8E1em139OrE2wR9XnkZ1o0JS++23TvK/Okd/ApBa+EHdjbiFNDoix9
eEi37TK7wjzoaCS8gAftNps1lGS2lESZrr/6QctjUpQiYJKiUZsNpsDm6TCy
6C4N0gvapT3uCnZ8vEAcpD0h6rCOCZ9fwS4mKZN6gZkUeXWNBJQGCVzHpFvv
wUulQqpWX6FdFpU9mJcxrUGO5WhuehtbrrzbSYI5Xzn7KPBKWU4es4MAHQdD
8sftz1Wkfsl0bfiMOOTgnbULcVubvvOpZo1QFtateRLo1K4RGXRJjH4BKXSJ
FP6bkMOT/ybksBMr9jXJeKlT5Lh0YBrEjTEPyJmiF9yFDfrNLN1JaooFaNyn
wTu7qifpDVwHZAHX0ADFzn464PDv/9OCT6QFmp0sIgWageyOAAznpJSSWCb6
/AA7ZBypU6G5gaMs1tRbk5lKZLBLBYoPEI2hWnpxuUFpixP5OtjxoBH/GIQT
94euJnFk+V1ETjPBBKGmr6sME5JiPusQL5xsdplRHCS+hEPpglHgFJknXOyc
PDo5S7S7JBQNX1L0Xk1/kfu4gax+0r0WqI3NBzbAmmf/jPz2x3XXfuBiTLsx
mpX9M0mI0Y+BA0gcOlqQTjj6LZDGNEN0+Flggp8vYdHAgUSfBXfWkA3BwH6q
oQfak8hAdSF11ixT7wdOTgliWVB09lHfQT7nkYkhNqYTFgkMhe8hsVHo7ArC
X7WCDgrHsSGBFJXkMBu2PDoqz8jDQQ1UywItU+KJxRedCMkiba7rofGp0cU/
YxQ65IydggfTSHcddaisHLuRffiwMS35xx3aJ53o2Kf/r0hRU1bqrptpzDu0
7p616+gKXnAFGU7hzAsNrC4wbBS2CmN2EWQc/MZlnlLKMaFvzDD8jn3Eo5gw
aRweOhXgyNnuQJ6T3qjGt9if/n+UoIdU2T2rEVl2qTQ/LRI4VQhna97rtBDy
49I7JiuMNT1Xy+fQBXZrN0+Mw+5IrWYY5KM2qCU/UPSAUmL+wE/baok8l9CF
l5vx2yGDZX79jm9N1Pf4LortsogFJHvRS7KJKdA89BF3EBQ14QECmu6JuXig
tci5QzgX+PS3I+F9rFngNSynUenxIFtglgs4SYu4wxBgbKiDIdRXDfOikDVT
UAKdWx3JRU8RqsfUosUhc+ixImT8AuQB2gvDI+9HqtJgEOy3QvWQQq/FKgYX
eQ3VVyzvJ/sOK2K6/1+BHdOUuLF+irPe9vnPb7z1W+RWAnNucyAJj7ZVb5M2
Z4qkFRD5qtebwEzU8s3+NaiAmKgRIfCwIl6fHws66tlyGoTSJ+6ew8ad1Hlw
+IMIgYHThv/RSMavkIELsBBIRTZljxTAT+Cwre6XixR5WhdtsbsdMnxTsVpy
JscFVByszVr6Kfk6cQWfyi4s2cyhVd3OSNPSX2r1IxQHWj6NUtjJ+S9xkRcF
0j0ImiQ99HrzHkFGSctL+u0Mf+przAIiq37frtG7EOL1XyJZScvD7rJXssJ7
wajJZVhQMhIipbK9ZvFPOmvfCTOlcGW6oHIWAPkyrXwkAJpu4GI5bE+UiLOI
p8487YIiztGVL2Mrq7TcxvjK911HslOho46SkjdHr0Uqcp1JzlyktYauX2tu
LG+iYyMLuUspkiMJwSJ5QZkppd6c3QiDd/yIr842IlOcITN4HDEcXCIicInk
vqX5fFL2vFJXTXQTa+cHRClPS++IeCPYrhcJF4cFm6QIkgpFRDb1m9hvwkcR
MFXGfdt9GD0mP9rvYHJ0aG1UjuHQEgMoPq/XNRleT5uzn3lV5rRmpkqa3Izd
IWHltMzEvhcnY48Osn+NrXc5NxCC0aPDifOowLHLuCQueN4A4tIBaACNIL9/
ZLQMVVQsC+PC3CaZ+0XmgcyIrapayyL7y9ImvmhbLfUHOTmjWAc1iRs/dg3X
lPGpEFzxRionUwc5ywrJVoOzFoD2HDP0XrNn6EJMOL/4+txmWKH0jMJpaKOu
idpZKbxuiXkULhut5dQ+U80UJjkGpyWBq+LClKUDjsDBWXAzjGbkOzwFfsa7
j08rfi90pzFVaStgu4nk/0PUxQ3vQw5iCpN4M26HwmwiVJhFQkgpJfljw/Kn
EJxIUfz/PtFZp7XswuPTeNH6HqJkpwBBC9l6lXwhqqU9CEZ+w6LV8y4lzkOW
XIozLOPsxPnE6ePEHTAgUOQzKm3ZebvRxGCejdPlo88BC1usJoQeLR3mVn8N
i+1AIScFEOsGUOFeGNuj9Pu7IZyKfmuwaY0uq73SbpajvuIRggw9ZSI+Sblg
NRWYSzvoootTzQaKMxBb4zNaxhWsOdGi83Jxlk2tWP9ox7woNTjHFwUmZXul
7i2dGnYiTVyV9DDqOvG5YFTLMCZsvsSiUeyTrokvVfOfYC0xTGQssoOmjtCk
Tmvxh9N5n5PdBlWhGfMFJDAM2ln9BhfRZ46G6sks7pM30WmqPsD740k2XSHt
JBPBk+TC4Lifs03RIAgrtEjpctWPFaOtgyXQzxR03f7RjYSv5dgMJJims0nZ
qosjQbk9CQZzGXQiYCjucMKOoUcMrDdGHSgVoUsngtsN8o7klxKrzh45vV9Y
5G0nJHFJVGQ/VDZ2w2r2ZDXwfbZyg2Fn9xdy3eGsdA+1ce0S1UU/+VR1ugz5
5a5l7LtlUHO/kOyvdhIp1nk5uNzO3GkwL4bB6KQUjBz2bS+SeFRJYjpWnCTl
toQUA3JeVtZlrLGwEXQeHMTUrkuR2gSv53LENK+XaZe8a3JLNHqIcm+xV1GE
eskWJY3cH6XouLQdA13KJhtEviFdsqFEzG3r26JGAnzEEwTJ6EoktN6RHHYM
TYwD21rtO8fo1Yp98jC2RfZxqYxChsFwCww+sRdLivqGniUGRMrGA/Z8ZjV8
i+KciGImHE62Yt6hUx9Inot2FaDNOimkr/jyX5Vpzq6nJJ9TgIWkIoahAPy2
cmUAnZCzWFYLAKmGIQmgAjWZ0+1gJc7ydiLimE+cHDrNeXjikiPE0BhTOEjc
C5DrZoVL3eIQfYpE2/ZRYqQuLi/lcXBR8zCK2GOwJS9TeSfh4RRrirY+GxbF
ghgH3ZAig2o3+4rDFkT9KevRXArKVPRHwpzHL3CCLdtJe3tfTtZK0VCULI+V
UUN58Rj8FDLjkhJICUqupsixQIM2xgxcgpDztnrMOc8KCFusg9Q7Z0tQjYJA
cZW4tOFOpJE0BQOxNw2Y5WCICKRJ3ycqNuT/6KQxwUfCxgW+d4BpjQbKsUqF
ehaxAtzO9FcxVXB0jwbZYKHQNmJp9oVuClK0NkjNZS0RDsfNJCPh1nwUNZC9
JQWSMTNDPlUZkBt1VgjdczmUCpe09jSAxcQhhh3qiGPdZvV1gMOBvaZOSske
jW1oLl/qGpZ5Y1fo9F2lkW44vcCLQYyILB8Jl6cpWxnFH/uU8E3mRM2sokeP
LHTbhDdsOFBUisLpnJ+a1vSldnBPqhLttaTb48RpZVy2XREFB6DzSLy3iASW
sxDMuevZgzokPb/ZlrDtdn6OGt09iDI2YSF0L/l3L4SXSrTieEdH4XO1R9nM
nSq5DjRQOAGbINhxPnR/DVxg4gVJVfImLuQdJPOtS/WvCGuBq0qZxaFhoEAP
bjsn/XV4k+QuRZYLUwtGjNPw6eLOr60vI4uxx5jwQebT5Cu1Ty61mTbx46ma
Bmd8EBsjSQzuq6AAvqlYMdy4utCC2A6gQq/h6fLFaMjjEwkyTCp+AhyWyb2Z
HgxiUA40ysClreFUAEzyopaJg8iSyBQ5KTDdoxBLzuYfZHXy6KAO1hL9SBmo
smJm32+UjdsVjVQ02ejZ1zE+fL7O+NBiMtrsX3v2rubEVywvXBxpK06X6IYr
aUAZPSpzdn56fPBCtpE45GPZ8bZ0dODWvyaNIiQG+Vbi2wECLoNMCfFg/CNA
4QP/jaSuwXjA7MlgOHAS3WC8Oxxg2XHb0B/Zn3Aw/mJ39+PwkweAXn6I/fsP
sde7hke/aIBHu9E20L/o7TBpIzBBZ2+o/9qnfyVvCYKBAiMoBhlpL3y5x3Vl
PsIIWCKJoWaCeADsX7tbTZYpF8RNkaQ1lRBP1C9IFZWeHQmyfmgyEn1eUJTY
xkUE0ybOegN3/yabctqVdBuVu+Ey7h6XPS1sIgwR6WjDXpTYZRFXQAdOpypv
saXFvNJWg8evbb5Apv0dJtqyYlhD7pqqmpPxDXXEeYm1kxBuID/TWwAUDaPX
MWgq3BiuC68PKsIoh3FVsoWYfCXVMiAQ3mnd3iZeEfvh4PmJElA1p7gOpLQt
fVPCqCLPSi8cXWkCYD4i+CzCCRhbt5EHQidflFvgjLDkgK2jbkNi4wL1pejQ
Hali4zPVA7kE3vI2rWZ1Z3VcQqgiiHkFPkvFzHYW9hYL6Dj3CISAC/+H015W
zOkj7NQeskJZD2hoYafvapaYnAGLsi9iQF9So8PZkjzL0CEfuI96p63+K1Xu
JMBn0WUS/iH6ovpJw4R7mPQorv0V/rjx5WkXyguSznTUYqLLIkrU1pVdrIAS
MF3ykroik/Tkz63h8EDGZoCXrK3kiupItL857WbnSwGXvazetX8PC3aUvTOu
n2/dbP1zBTNt0kK3aG2/UsafTLfuhbdHdOh4Fw0+jZLHKMbot8Vo9k8S24xm
gIjIJ2uJvPklRD75g71w1WI8sW+t7H5EP+mdR+ip+SQ6n1yl5ITOZJ4sh0jx
zAL2Swl/6vKyATrU8wKYzguQ/LIXwKx5AZK/6QuQuRdAYZ4wzGGIv9FLIKI5
Hdff4iWg6nj3fAlwPGc1VLNoi+gnG4k+rvqX0/cWFe+h8/ICRPS9U+P7fja3
Dn3//xT7F1DsDlVdazlcQ7UfuCrFUnwa6HVtfWrYsJw6femUS+8h42tMZt2C
yXr2OAsbquBj20p1bd8Djql3Ktmo/E+COkE0I2WtRodwKZojQ4l7B8Wb3+Vk
67S4kisuqioiwfDophp0wauvHiTE+p4/P9v2Tq1NXrcCKtAmJZCNvpAdSz8E
x90D+vCse4DbfZ7jUvbxcfpi9b/kQH1967uOFH7/b39+DtZrTtBDs31ZtcCy
L2dc6WX15nNVkrIOiozpEmyFu3yHbmW0VfaxVb8cxyclWsLeqVdF+6Vv/9TV
jHbiRZpjgERzPa/ZJMXOUWVVJ84mR9BHIwflYvbzMp9UL0mvwmktNHhF357I
TKFWorxsXMNgRWJ0gxMskDMgoRFdgXPkjXQeDs9bk9pPt78pvV/HZ0LS+/mk
qXHKETLC5WVdky+WqxkZLDxxklpfPr9fkDQv0aR5sc1CHZSHXqXOvjZDtcrw
PMEOOIVeYt8DhnJw0ouDP6opopPxQZRvt8D6ruUE+guZB/43zyNQsSOUQ0s1
hw8xDyta79+bA4l6/5p4RM1v6Ewb8pByXD7sZdJcV7a+DlPOS/e0plI3ohTO
XNwGOccHvYBdTpEG+VnnPA02rCbw5BZLYB6x7GtrBt/Up+uommbcGrF7yYLt
fqPuCDQc8k3dMs5T5w8l7wFxoWYxb5bqkRRlgYpSqbQGby3Xr21yCwx+eduW
vXuXIuhFIl1nZnW46Z+Y0lcu5xsm5nZ4wyYVRihIqNi0wbi8FmjhjF+fv+qe
MZZToLLhTThRF1U8Ue8nFSFV78f0v0P2p4CkJl7k7SHlUs/Bwrs5rQPezu1F
PvXyd520pu2QlNB3VR4jrvRIjgluOTKHO3WpnRcMLO8Gx7egZORCt7hvUO8y
bSRVPclMVZJWmLvbWTvoSvak01cugYqR4BXkvNvzEj0QZ/QDLy8JTCcSVkL5
R73L4cUSC2DPoknaEEbDEBxvRdbZhOph1oB9DQWJsrH9tgRp77AsaswBWjSc
HbczTiTEXS0BsYoGXW6a0iNLA4JSivxA4Y5B0j/JcHeS5hfcLuTUfzFtfqQX
D93gXQEmBHBQ+tK+p3gzhuI8uPlEHd0d5p/DU2p/Q5t+3fR9gZ8mlICVcDn+
hllVen2PDzcT4v02IXZ+zJtJFbWdwO643k+bgrZGq2smQ+1m5OcuDlnqz7ac
k5+Ej8QM42N0QHWy2bgAjFBeUNVC2M3M98QXFBnlnrRSa6hIH0lsYVg7kTeb
VMmqjLyjelqwI2fXuwFZEgSGuO0TH5lJVnjJdpbQBca4U0n+BvenshoZzf3U
rQSz1S4v5CKaNUtWWy/Q6YQ4PB6NWfD3Kabfwxk58Iks0YzN20FQXKAvcH5c
QCgwhx9uhy65qgOV4pWy2p3/nLcjQO22w7E7ft/mExyP0VmIk224KqtdNign
ixYxpqn2gM02vvZSwnUPOK4kI6cOdN0ql1X4wnxWByiH9HSNYBRAJCAFhz2C
T6TX1GBE10CvKVZuwA+nEck0WwNbXCNcZgPzEnZyaotSKgJ4kinCDUWDqRdm
8rmp0TeOchXDX4LTSW/KbIZjws9hiB0lHwCC8bk747teA7/zTTU6ndKKlDQb
65H38lqRIH18+HLQR1j6MauPwKxZdDd/zEDWJ9mzA3dK8QTLwrINzmGEkgPB
9WJXmDTybSM9bTkFkZ4c0ZE6wXClLwWssazSCVsXlH8cxC1JjBByKwmNRanM
hUThoXOCamLC3lMWSBqDLo++GPxxSvoVkXiJS2Y5pefm4lf6uKmo18agZEc4
SOClsdx1pO2ykw+uz5L3qCaxJrd+ADEjNZr0KAkHDRBUS4YpZjZvWK5H7ol9
u6wvZ6J5O7CQCQwFrAVGsI09WeEx2eOSvD+lTS1SEsetBnPgxUII5LkbJ/Ur
c5/0cMjXb9mgX0rgisPeccbEnq1yhjO2RGTlbDt+/pwxDJ2huGQ5TfxZ7QDA
RzWUAnQD9MuI85jeye4hU3eOo/YwfKhhgF8G83JmB4jwzh/9YOcrTYXF+MQa
vwFssD8+AJPXDSIW5F5xzbQXHZx21x18IKfc+80d0MDxN5fBqJIIDN1ZgmPn
+tDAi3L0CfdrwgeESgw0QPHhUW2yvI1fIS7Kpml0z3v20Lf2/eujbJ3T6gQE
CXBzVApGKi38GX/9RLkuTDAys8B4zQyNfbFqqbUkS0Jyenz46sWL45dHx0fk
FF4ulrlmp/dubi3CmwVoj0auBHPGzi8ykHIaqlshgS6qiXQyISWdYNdpXc80
T6vNaZ+8bI47e47bCbBepDvnvasiVeDA6NOKhKgsJ92bBETV3ZL2t83EEsJQ
Gg+XSwJddKWX8z7k4hU1P0cKTGcL25x67z+Q+pL03l0VWvRqx3qyOHPI6beH
5qvd3X00ORET9QSkp8ekP7yq0sW1eUKaxYBJAJlMb3W/1kWxuV/l4o61cz3m
afUOpEd4OCY+S2akBKEGl+hPqZ/vfAhdahZmCEh7jWlueCx6pYLJlguqXtRI
TLNesITQlzwbgju87ep7+ro6UlLFcZrrfGCHSXitGLvCKjCBh4TYDYCzGKrr
P7vv16yIkbCApKtMucAs4qhtB0akblwWb3ZR9eCvXdERjeFLPEga0hEh2Ho8
7YNmtOnAc50S0Me+0cRQ/XlZuxpCSY+nvSpGKKkEUzdi8rbQ7A0MGPB3PgZA
qzZy1ZBO5pOAKtB4vsIJXHzW6qAfCFU86k0Zgq6mCanNuFzte8k3IAwF4hAp
TUSqoQMgy/tnHDsvHhko3mbFiGX67aFz6pfoVSYrdQAEGIlgKfMQAyn+dexX
ZX4tRneQRlDQpWNQUp5VPrTDSVkaOmJZclxgxRuN0nC+ugRpcmAn5lrDU+jC
cMhpKQ8o/w1zT2E2tTAjQPJiqbnaMoFCO/oFA5W7MRuRp3xsV8rLkgCNqkQu
B7hgycs7kjJc2CbGoOHSPTi3y1jDfvmOBgToy3z4Hdo3IhkgUJ56gtFxwf51
ROH7dDBdItariOmZrG14pNtMu+GXOrjSRFDDapyBx4f/FUsrO6tv6MMgKeki
x4WgW4d0R/UautWF8efeuXwmmKy3bi917MwmNW/cNPR3DPmN4k3lbaQ4Uzch
Vc0JZ+K+nSlcFQtCqJPXXTB+jay/b4Z4Jsk0MOLPDK6X87QgJyJKmIU0dp44
M/hgb//LnV34vz36Ym4eo5L8azPY393dG+/OLp6On36RPhrvwj/8r6fpvh3v
Pvpyd/zlo0ePpdeTbe6G1C+lxCeooBzhXJgJVV1Y5UWauxBu5t+AW9tO/Bae
cUrKmFPvnlm2kLomIRj9KDEoHbgcCPGcbh53nHtungyCGXrwzw/QOSxmKsif
wU/of8QZxUrWjQJ3bgjdT7un5+fdX/d6f+W0x52f+zIHdxq1cx13Gmh2Tgcg
ppT4WocQCna8BkShCNeGVPBtE8Duhpu2aOePai9fohBwwu4uwtWs2Yxy7619
8M+BFiyua+OZaqycQ00CwWEc4RJ+9NmhO2mhHYh+/jmCB/6Vcefnn2WMdf8w
NvXJ3m3VP97kCyywmKdXLebGJTXaqhdsIRgGvjr0dxkEixPCz6TJKlSMinP8
qk5aXP7Q3OCFcwnbUakGl8LrfHpvYDlPvfU5wT8d0DLAmVNVxw6LcV7JRb7U
GLowE0joxOgNTW5NvHONILv26SMJMJJrmtJASNZBdiscxyVPInuhy08ym2Yz
pcz1u0yzrrDXVewu0Vtpmz/V0yzX0+BfZp1foE1/rbJZ98PH1n3lPXevqly4
zi2Vs3XXk/4e3EvRHPVSzoGvTOeUQ1gJc+bNI64uohxJ4wqpwSPrfHDGlFUR
2PGT10aerSH7QZHbDQjG204JpKmZZSVRhmb6TdM0r3H+pBWE8OEdd1Xb1BAO
vKoysU8DJxFVdu6wEwQl6UjOS6lBxnAlrtFDZMzZzM+l8DDNqpak5SyTvgIr
9H15/IfJ+asfjl8Kg0+xosgcJwR4qTHu0/QF8boCxTDJsKQMqEGkokVRpE1Q
IpKWHaYrUhuYLfhI5wB74mPRXH5tOYcZd/uM/BCyGTrDqjrZRVxy5iJ0NNcB
iKxRXCGGBJOyMJI0Es1zoAG3aRNZ6IK61JKWeCS7w8wZhCFazpOQ3FUVMFRW
oIP0PVUHQkbY7JCfDdAb55KoHUbEDIw6SNU7Yw+SuYE4s4XgDunFHd612zhl
Ft4pJWFJ4HXGrwahz+Grly+PD89PXr2cAI8ueUUJJupb6qEgvxjS51JxZVd7
0cJlbDtfSwHgjW1kHPcabBzpjlYy1i66ImwaZn0DGWHvrhHCBu7I4a1us3IK
sA5RJZGPQwH4mNU2+pMXO39ifTAbNjVdcmoOj46eB6UAF2WG/jYgqXCSugGq
JQbwOF4NtklfLA8S9ZhJ4gh1D/UZYgONEmmPdiIRCVfo1sWx4yvkTUZsfseI
biEt/3L26qUpLzAV+3bi92Ie6oMRk+PY5Z7mbwur3B831HM72ssODMGiuCin
yzkplxh+bO+txy1BGs3lfBy40tcImOJKVt7DFr/e+PVg+m79R7rtHO21vtFZ
Uy7OOHfS+kaHVHdo/feX9paIyqZpNi/jRfoeYxs2NvCBa/doVq9vgyN8kyMK
z+5a8Cc0re9sB1AK2aVNB9dklb1f29dpc314jaa94spubnZKOQXqDa38lIeY
hWN9w++VPB4BC7G+2RsWQzcfBTqPUoukdYvj2xJdX9RT917h4Ha1KeGD6LKR
cRbv9NC8Pjg6Onn5XZD6hJNNrXyG0hkTRNGVU4RTeSkeQbtYpjvhMt2U0GHB
03Az578L/EkJRFz4GVK3gohAHr2ogGQPBZylCKPtwiUDofT+RpJYOaeQM7Kz
pTcr516lcXxdLbU4RYhKOyH3b9Kwu91FJIl8KW0TSj8TEZU4LzxnYPKWCEye
oQAl17eHTkMdc9+SVzKSxoOJIzWp2owFsgOfj7QBGDFRVhWuF1H59+swb38o
sonPYLwr9ymUZWjSDrpFy+1BNo9pfod3bO9vvbff3GN3vVvbsC99cqJXWwQP
h0MiOMtL/ePeW4rERHc8zT/jPg33327vwBDfxg3GydeSsgMD8WU8QPgByjKD
MRq3rDf46PeCLxZcTOnOPo9h/6aE3us0GtfZ1TUMm3zdHdgl7sLBAQin5Ab/
DHbw+b7Lj5K4B7n3gNGhoi+AIPWls1tO7t6aUXNhzh8JYsMfHw+/eAvg+xL/
tbc73N9/+zbIa+LHRedaMjaRpUHX/VbHPz58CUchqX5CN72ibMgjj9M6caEX
laRVZmb7N/lPibZDRWN4RPZanrLw0+44+mXaKVT9D8J5AEsH5d3BramLGiq8
vPVOe+2EkFYrHTylIChx/Q5OQYOptxOpKqk34E8//unHL4Zf/ent8E9wtI//
9PZPbzmTOOfgpTdme6e9kvAqRQSVF6esuPN3d5Pt7e8O4X8wydyCuJbQiNKV
U1YwxkMbsngdHP5AuQ3dy5NJ7BHmnAqeF1wIvy3k8EoT4U4kySJXVcYkh5To
aH2KQwAcv1Q7TG7aTGxoZGuxt71XTnJ3cvIb+tyff4LKHk1QuTA2vzrwiuhj
/L2Hd9kQYXOJ6pTeQuz/IPymPfM2O3jegVonvvRBRyYIlRMtaaEX5jW0mmiC
2b8bzP9BwMTNyF46wOyAo/tcBqJTaOYMBKpeEEqlV/rQSoyCP/XGz9+5FR60
s4twMd0NRLJdsIVY5uNNRFso7C1X0sRdRNp7vyJoQ186a4pH764qpAjtdM4b
MXMTHRDE4jSuSGGJVskLd0FBm9LkhPMhtnT83zrtwFAdVrIqLpxS3/NEnQ0n
q9XrmOpwFysOXZLv5JSMi1SvY2zEbs4inWAeVDVbkeEhveDstb6Jo8hU7UUr
RIQeZAD9TQ5ma7TbayjQeuKDBxsqAoKTjfQDPcimkYh4tPBnDDPsCWuBL9io
s6Ro9N41tXQP8craiok16wuSo+Ey+2jixqX7FB19G2gvYsM26rV7qO+xgTpY
fE9a8ntsoV6//nrd4tuamGD1HSVNz/Ipk9EFN8L1U+xEzxqxnTTrLLIzzzqy
tGGta9RKPSsOU+kFC+/DmnWb8QizbktrlrNuY/XGXdX321Lds50ePNq8qXrz
juo7ttOniovftq72bc0TF5lraUsUbTa1kVme+I2K9HqTRZUB24OZZzxDExYF
IHc3bz6D5jfpdKW1NFgqZnfir000e1DKj/VJiYQwBvbk8J1BG2/0tWPo/aTa
2NGzHvpp9b3uXfh2T2mNHjRytOvXlPaclQD/3scVstPYc53j2bol9Kkf26ra
SPnV0eP2bALLxk6m2mzAmCMMypPHo4usSbT6TZieJVRmNdeuf49Kq7OI/m1E
quTWLmI187pNVNLqF+5Bu/duIV5BD0/eo+aWEuROIplIuKcm7MVbBxiCljOQ
OvijZpT//fOTY7ZMczL/uHST1tLkvNck2rgQKVMvKqpBsGQ/VXLJQ/m9RA+R
mYtkpaRbmGicWHUuVLwd6k5JZHKuWGszYsWJrZKkV+HfL5D4e0MFFNQthyEm
YT9+FdFXlvBczr114p25lxBoYvmtfWItmYiJpkQxChOMmkZOOHPpGHZJBh16
Oofpc02QuooH0Jw1nSEAY52XAn9s1zmTpUlYxiQEM699jX8c/0M7CWQ6dy50
LF3hru+Eu1eia9AJkKvH2tNzrb3JHGtLDb4OFuk+4ZfOEnuG7y4wNCXxXfWT
//K7GmwyslX1XgHnVBl/6ce7fpFIhuiAIJq8n/kNzGTOHH10cH7w3akmwg6N
+CCRfvigATqPkZz49Jo7Ld7Zjdy/bU3woje+V/ewZr/at5eX9vN2dxwTi9An
LKYiQOyKslvq3tO7uLh7f5uAtlVAsuv+6EMgCGHxkg3jCVNLHOw92nH0/YZ2
XqG4sRUdmqL2ppbueZg4R517ggcZyLt2pZk6JzdZmfc7MFM7KUcvOqLeJqFD
8KYF8qvIoTMTDZPub+szIW4aMbWp7rRCm+660QD3bjLUZE+QKRl0W3wtEecZ
Fu4QUtSU8CxdYsUac3j6x9fnrybHp6evTvs6aw1uVtEdO+bB2W+dJ6EeKW0q
cimML0yPQa/15ibJN6ugGeXmD3OdMgsT0BrxFgzacDmdxOVsrZYFxbhJ4lut
fRokR3/4CNmZg9qwHT2Ly5IHjkkaGrYTrpt1ZEHBcnJjTNquS8A2lsura2qE
jcXZl9yc1KfJzC0GuWf1HNfT3lKQqSULor601gqvlKK3O5wMcxBi/5iVGP15
sRJfKTU/dvkfXhWa+xEwUqugh016xsIoc0OYMm+dkz3gdkG1GSet9prD/0GI
bPTW1MK2RhkrVOd5/vws8HyqzeCAfkpzyxkNMNutliHirL9J4CXKuHQhpWmq
RgEBjMCI3Cd4HK5ByK6hwUjcPUFei3MR9LSu0fWMlZq77/d2d7m0FWU2jkYh
dttXSWUuHEXe6kZ8q8O7ujOQmFFXumaeLmpzkc7yFWd9AL5eS6wBu7Gco5OI
IDclRAkY+UQ8O4MrldZapio1sxWcD9USnoNUg2DGixCXwQ3rWSbAgY6UA0W7
219tVY4WDAat3u3OrgOy2B0PYzwVc8mLeBCufEIgHeCOO79fXg6SkGxJrNBO
Za/s+0W3/Y+7o6/S0eVb/a/3duSWHcIWDr42Gy7u/7UoUA6lVHAq8W7n7B/g
G6qmZRo1NJjnc6kprT58+N3zV9+NXhycvPz4kSt8GamwlYT34NbmOZowzcnB
y4Pu1N8cJcloNDKY2RutbuaQ0+o9L6/YS5iqjHGGhsw2lyOq2UfJgjkSYLT7
mPJraOqAqyXniEEa65IscRxwOq0wGNlfO5AqH+x/+dU2dD+1ePln5jP3gHzm
84zCvj7DKT+D9o9297H9AWGRenVGZXkijwmySlPnMfElQTwzj/alH60dV0yM
6tMvzRbdzu9Ojw/Ojs03WeNdUbdxiL29O4bY35MhWqndW8Ps4jBb5xajwslY
j+4O81aSZR42oFzz7EpK4WnZOxiKNnU8y5oSHTEIp9itnAibJk8B4H/1dGjg
31/Bvx/tPqZ/P8F/78MI9zz+R3T8x0W9RGcCQllKxKMvm9a9DVOPYLgfxtyy
sRoX8vhRiAWhGDKGxoFsiuOMOyLX1oMvHocD9EmbNJAX02mgjp5FB+JrMFPh
mMHeLh4MyPvUn72m74JxW7wO0l1s/fSLcOi1WShxBBHAsdPTex/FPh2FwgA5
TFYZzjhSP8zWvPVgj1fDa9fEeYUG+NB+j14/f/3i/M0Rtn5ErV+ks3ZQksu+
ARctCqvBU5VDYSyOxJuGPPk5dGGRp1OLCR641xcRmLwrJr1nxCSRazRhAzYn
bH/hUrtHt4UUWpfKF3KWPXq5a4syR2O1ZHDtYIH6r5sMWKdzcg2B3ocSmX/f
c9ijc+DR+oMeZO17+/v3PtxdGvTQJdVt79Xk8GWZXjHzYNB6cUZvKcKNoAbz
4TVrzzdPq/c8H001CsDHK7h+pKjFTJjSj1vig6l+N9ZFYIBmXJSTAD5j3NC/
03S1sunEghmDueqRKHFmTkQ0Os4zymVJVBORkllzn4ia01v6Q9QXr3aYIGRn
aHyWjaH5TkIO9EGCkc/gDuYRARU3UsokZaj+wTx1E+yEtKF8SKAWXmYhGMeb
/cnXLPlJcm79IsAjLr1I/1y6nFd0EB7bpSwKLeS6acif0L2hmOm5xoyHUmGc
nRa5eFxTDrwbHUiB7ynzjfJYQVFajOdiAra3tzd88OQLf93CeEef+y+kAjtx
S4oZYv0Y38zExEQDusvJjcW9d+vB411HevSIUNjBJO9x9dQ1GXQkxpx9cHh2
mDbYofIpnAXHRemp83O+6mU4tBcFuA07EUns1MmhcRJGtvXgq8fDB0+fDAGS
AdFyWCxxWy7lIrE/XP0vzODm+KKBhNAMEEgBIzPoDeLUStWSrvbB40ewli+G
D758Onzw+CvfWyO/o8KcWHYkX8Q/OoaDRoH/7QevYZDGG+ABjIiLHdVsTAZT
KmHFEc6g7/N9wID45p3NU8rOGOG9ra44V5SknItIApKinmx0fPs+N99yqgmK
1nOGj4LS3lXwBucrJ/YAqu8OHzz6Cv5Hh/VFyFv8BZGL0Kda6msmZWX4zP2H
WqpUhr9RCCeZRNutucQs3TN6N5WlpgnHIn5NKK2N7m1HVEi4Hwp9wu1cS/oE
pksDmMJiTtJBjPQDEsQGNN2j+04XTgF0YUBJKTTdVlPCDC77D9kuWPyrzE0t
QbCVZCjEWfdD5mCxrK8nKUYqhdRs3MoGj912w27OZVhz9Gnmr5lTydBgWue1
JvpL7kyUS0nK/MDCKVhVY9JcTIFQc1I+6z4BP3dDgN0VMs1+TFJz21DlAPIz
JfUHhnhgIqbEuJKlRLOVyczc88UbwdRqOCIGmOAlDpi4nniIKDYAJIPH4QUN
SaSeYLCZtrwE/b8M+mMiGppDYEbhJJ4WO3JLUf9b7D7/lKLytxngUS4EN6qP
zwslSdYxePqB87hUmXXWLFOVJ794FNDB2j3u43oK17fKSqV/SoScTOLbakC1
HyeoIR5S0L1QenT2CTj6eqBchPvxX8N36V+DrRDOcyYlUk1ekjNECi8J1ryK
CkLB+0Gy5rEGNgb4FqfOJfwijGtVkucS8kTvfxk/wmzoscte5R4jJI6epKZU
QBk4RHTPdjCaU+pgYK0DBsw5J7oEQJ/DA0bGTnmJXRFuZmRoW67o+5alP3Iw
kxZQpvc5yIdhZChVVukqJRVlyD0EFBL/vq2b5a1xklWukq7XUjAIZtyisojm
Tw/2912/AC6SjssJyJr8a0F5AIFBsMEIdNDnKn16EMA76nVzctUzn30sIlQ0
gWAEqUhcKrE6mIlEAowg0CSizEh/GDNpsLNnA3KyRI2Wz5BlHXODHDwy9afl
BVzJF4BERFpJMJAoge9TICA57/iHN+a5XWKmrjdFRrwGrp9qiqXFO7oS/5IW
qTlZATlLq6H5BjOso0g9n9s8H5qjeQbE3pxn767LorwZgohlFxhf/xqFyhna
v/8FbnpyUL17B/w/LGi6rM3JdY6D/T7DGg7m92md5ZmFzi+y6s+p+eHf//d1
blH8hs6w5/nKPIcr8+//a2h+SP+6TP6YztN52ZRD2sLhdYVZ6WBV3y+zBsUD
SZoHiHwJXCmVyaOIteWVJhfeSf4vL6APDXkJAQA=

-->

</rfc>
