<?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-h3-events-13" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title>HTTP/3 qlog event definitions</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-13"/>
    <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/>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="06"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines qlog event schemas containing concrete events for the core
HTTP/3 protocol and selected extensions. It also defines an http namespace for
the Capsule Protocol.</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>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines a qlog event schema (<xref section="8" sectionFormat="of" target="QLOG-MAIN"/>)
containing concrete events for the core HTTP/3 protocol <xref target="RFC9114"/> and selected
extensions: Extended CONNECT (<xref target="EXTENDED-CONNECT"/>), PRIORITY_UPDATE
(<xref section="7" sectionFormat="of" target="PRIORITIZATION"/>), ORIGIN (<xref target="ORIGIN"/>), and
HTTP/3 Datagrams (<xref section="2.1" sectionFormat="of" target="DGRAM-AND-CAPSULE"/>). It also defines
a schema for the HTTP Capsule Protocol (<xref section="3" sectionFormat="of" target="DGRAM-AND-CAPSULE"/>).</t>
      <t>The event namespace with identifier <tt>http3</tt> is defined; see <xref target="schema-def"/>. In
this namespace multiple events derive from the qlog abstract Event class
(<xref section="7" sectionFormat="of" target="QLOG-MAIN"/>), each extending the "data" field and defining
their "name" field values and semantics.</t>
      <t><xref target="h3-events"/> summarizes the name value of each event type that is defined in
this specification. Some event data fields use complex data types. These are
represented as enums or re-usable definitions, which are grouped together on the
bottom of this document for clarity.</t>
      <table anchor="h3-events">
        <name>HTTP/3 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">http3:parameters_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-parametersset"/></td>
          </tr>
          <tr>
            <td align="left">http3:parameters_restored</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-parametersrestored"/></td>
          </tr>
          <tr>
            <td align="left">http3:stream_type_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-streamtypeset"/></td>
          </tr>
          <tr>
            <td align="left">http3:priority_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-priorityupdated"/></td>
          </tr>
          <tr>
            <td align="left">http3:frame_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="h3-framecreated"/></td>
          </tr>
          <tr>
            <td align="left">http3:frame_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="h3-frameparsed"/></td>
          </tr>
          <tr>
            <td align="left">http3:datagram_created</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-datagramcreated"/></td>
          </tr>
          <tr>
            <td align="left">http3:datagram_parsed</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-datagramparsed"/></td>
          </tr>
          <tr>
            <td align="left">http3:push_resolved</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="h3-pushresolved"/></td>
          </tr>
        </tbody>
      </table>
      <t><xref target="http-events"/> summarizes the name value of each event type that is defined in
the http namespace in this specification.</t>
      <table anchor="http-events">
        <name>HTTP 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">http:capsule_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="http-capsulecreated"/></td>
          </tr>
          <tr>
            <td align="left">http:capsule_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="http-capsuleparsed"/></td>
          </tr>
        </tbody>
      </table>
      <section anchor="usage-with-quic">
        <name>Usage with QUIC</name>
        <t>The events described in this document can be used with or without logging the
related QUIC events defined in <xref target="QLOG-QUIC"/>. If used with QUIC events, the QUIC
document takes precedence in terms of recommended filenames and trace separation
setups.</t>
        <t>If used without QUIC events, it is recommended that the implementation assign a
globally unique identifier to each HTTP/3 connection. This ID can then be used as
the value of the qlog "group_id" field, as well 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
GUID abcd1234).</t>
      </section>
      <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 this document are expressed
in the Concise Data Definition Language <xref target="CDDL"/> and its
extensions described in <xref section="1.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>The following fields from <xref target="QLOG-MAIN"/> are imported and used: name, namespace,
type, data, group_id, RawInfo, and time-related
fields.</t>
        <t>Events are defined with an importance level as described in <xref section="8.3" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>As is the case for <xref target="QLOG-MAIN"/>, the qlog schema definitions in this document
are intentionally agnostic to serialization formats. The choice of format is an
implementation decision.</t>
      </section>
    </section>
    <section anchor="schema-def">
      <name>HTTP/3 Event Schema Definition</name>
      <t>This document describes how the core HTTP/3 protocol and selected extensions can
be expressed in qlog using a newly defined event schema. Per the requirements in
<xref section="8" sectionFormat="of" target="QLOG-MAIN"/>, this document registers the <tt>http3</tt> namespace. The
event schema URI is <tt>urn:ietf:params:qlog:events:http3</tt>.</t>
      <section removeInRFC="true" anchor="draft-event-schema-identification">
        <name>Draft Event Schema Identification</name>
        <t>Only implementations of the final, published RFC can use the events belonging to
the event schema with the URI <tt>urn:ietf:params:qlog:events:http3</tt>. Until such an
RFC exists, implementations <bcp14>MUST NOT</bcp14> identify themselves using this URI.</t>
        <t>Implementations of draft versions of the event schema <bcp14>MUST</bcp14> append the string
"-" and the corresponding draft number to the URI. For example, draft 07 of this
document is identified using the URI <tt>urn:ietf:params:qlog:events:http3-07</tt>.</t>
        <t>The namespace identifier itself is not affected by this requirement.</t>
      </section>
    </section>
    <section anchor="h3-ev">
      <name>HTTP/3 Events</name>
      <t>HTTP/3 events extend the <tt>$ProtocolEventData</tt> extension point defined in
<xref section="8.2" sectionFormat="of" target="QLOG-MAIN"/>. Additionally, they allow for direct extensibility by their use of
per-event extension points via the <tt>$$</tt> CDDL "group socket" syntax, as also
described in <xref section="8.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
      <figure anchor="h3-events-def">
        <name>HTTP3EventData definition and ProtocolEventData extension</name>
        <sourcecode type="cddl"><![CDATA[
HTTP3EventData = HTTP3ParametersSet /
              HTTP3ParametersRestored /
              HTTP3StreamTypeSet /
              HTTP3PriorityUpdated /
              HTTP3FrameCreated /
              HTTP3FrameParsed /
              HTTP3DatagramCreated /
              HTTP3DatagramParsed /
              HTTP3PushResolved

$ProtocolEventData /= HTTP3EventData
]]></sourcecode>
      </figure>
      <t>HTTP events are logged when a certain condition happens at the application
layer, and there isn't always a one to one mapping between HTTP and QUIC events.
The exchange of data between the HTTP and QUIC layer is logged via the
"stream_data_moved" and "datagram_data_moved" events in <xref target="QLOG-QUIC"/>.</t>
      <t>HTTP/3 frames are transmitted on QUIC streams, which allows them to span
multiple QUIC packets. Some implementations might send a single large frame,
rather than a sequence of smaller frames, in order to amortize frame header
overhead. HTTP/3 frame headers are represented by the frame_created
(<xref target="h3-framecreated"/>) and frame_parsed (<xref target="h3-frameparsed"/>) events. Subsequent
frame payload data transfer is indicated by stream_data_moved events.
Furthermore, stream_data_moved events can appear before frame_parsed events
because implementations need to read data from a stream in order to parse the
frame header.</t>
      <t>The concrete HTTP/3 event types are further defined below, their type identifier
is the heading name.</t>
      <section anchor="h3-parametersset">
        <name>parameters_set</name>
        <t>The <tt>parameters_set</tt> event contains HTTP/3 and QPACK-level settings, mostly
those received from the HTTP/3 SETTINGS frame. It has Base importance level.</t>
        <t>All these parameters are typically set once and never change. However, they
might be set at different times during the connection, therefore a qlog can have
multiple instances of <tt>parameters_set</tt> with different fields set.</t>
        <t>The "initiator" field reflects how Settings are exchanged on a connection. Sent
settings have the value "local" and received settings have the value
"received".</t>
        <figure anchor="h3-parametersset-def">
          <name>HTTP3ParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3ParametersSet = {
    ? initiator: Initiator

    ; RFC9114
    ? max_field_section_size: uint64

    ; RFC9204
    ? max_table_capacity: uint64
    ? blocked_streams_count: uint64

    ; RFC9220 (SETTINGS_ENABLE_CONNECT_PROTOCOL)
    ? extended_connect: uint16

    ; RFC9297 (SETTINGS_H3_DATAGRAM)
    ? h3_datagram: uint16

    ; qlog-specific
    ; indicates whether this implementation waits for a SETTINGS
    ; frame before processing requests
    ? waits_for_settings: bool

    * $$http3-parametersset-extension
}
]]></sourcecode>
        </figure>
        <t>The <tt>parameters_set</tt> event can contain any number of unspecified fields. This
allows for representation of reserved settings (aka GREASE) or ad-hoc support
for extension settings that do not have a related qlog schema definition.</t>
      </section>
      <section anchor="h3-parametersrestored">
        <name>parameters_restored</name>
        <t>When using QUIC 0-RTT, HTTP/3 clients are expected to remember and reuse the
server's SETTINGs from the previous connection. The <tt>parameters_restored</tt> event
is used to indicate which HTTP/3 settings were restored and to which values when
utilizing 0-RTT. It has Base importance level.</t>
        <figure anchor="h3-parametersrestored-def">
          <name>HTTP3ParametersRestored definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3ParametersRestored = {
    ; RFC9114
    ? max_field_section_size: uint64

    ; RFC9204
    ? max_table_capacity: uint64
    ? blocked_streams_count: uint64

    ; RFC9220 (SETTINGS_ENABLE_CONNECT_PROTOCOL)
    ? extended_connect: uint16

    ; RFC9297 (SETTINGS_H3_DATAGRAM)
    ? h3_datagram: uint16

    * $$http3-parametersrestored-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-streamtypeset">
        <name>stream_type_set</name>
        <t>The <tt>stream_type_set</tt> event conveys when a HTTP/3 stream type becomes known; see
Sections <xref target="RFC9114" section="6.1" sectionFormat="bare"/> and <xref target="RFC9114" section="6.2" sectionFormat="bare"/> of <xref target="RFC9114"/>. It has Base importance level.</t>
        <t>Client bidirectional streams always have a stream_type value of "request".
Server bidirectional streams have no defined use, although extensions could
change that.</t>
        <t>Unidirectional streams in either direction begin with a variable-length
integer type. Where the type is not known, the stream_type value of "unknown"
type can be used and the value captured in the stream_type_bytes field; a
numerical value without variable-length integer encoding.</t>
        <t>The generic <tt>$HTTP3StreamType</tt> is defined here as a CDDL "type socket" extension
point. It can be extended to support additional HTTP/3 stream types.</t>
        <figure anchor="h3-streamtypeset-def">
          <name>HTTP3StreamTypeSet definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3StreamTypeSet = {
    ? initiator: Initiator
    stream_id: uint64
    stream_type: $HTTP3StreamType

    ; only when stream_type === "unknown"
    ? stream_type_bytes: uint64

    ; only when stream_type === "push"
    ? associated_push_id: uint64

    * $$http3-streamtypeset-extension
}

$HTTP3StreamType /=   "request" /
                      "control" /
                      "push" /
                      "reserved" /
                      "unknown" /
                      "qpack_encode" /
                      "qpack_decode"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-priorityupdated">
        <name>priority_updated</name>
        <t>The <tt>priority_updated</tt> event is emitted when the priority of a request stream or
push stream is initialized or updated through mechanisms defined in
<xref target="PRIORITIZATION"/>. It has Base importance level.</t>
        <t>There can be several reasons why a <tt>priority_updated</tt> occurs, and why a
particular value was chosen. For example, the priority can be updated through
signals received from client and/or server (e.g., in HTTP/3 HEADERS or
PRIORITY_UPDATE frames) or it can be changed or overridden due to local
policies. The <tt>trigger</tt> and <tt>reason</tt> fields can be used to optionally
capture such details.</t>
        <figure anchor="h3-priorityupdated-def">
          <name>HTTP3PriorityUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3PriorityUpdated = {
    ; if the prioritized element is a request stream
    ? stream_id: uint64

    ; if the prioritized element is a push stream
    ? push_id: uint64

    ? old: HTTP3Priority
    new: HTTP3Priority

    ? trigger: "client_signal_received" /
                "local" /
                "other"

    ? reason: "client_signal_only" /
               "client_server_merged" /
               "local_policy" /
               "other"

    * $$http3-priorityupdated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-framecreated">
        <name>frame_created</name>
        <t>The <tt>frame_created</tt> event is emitted when the HTTP/3 framing actually happens.
It has Core importance level.</t>
        <t>This event does not necessarily coincide with HTTP/3 data getting passed to the
QUIC layer. For that, see the <tt>stream_data_moved</tt> event in <xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-framecreated-def">
          <name>HTTP3FrameCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3FrameCreated = {
    stream_id: uint64
    frame: $HTTP3Frame

    * $$http3-framecreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-frameparsed">
        <name>frame_parsed</name>
        <t>The <tt>frame_parsed</tt> event is emitted when the HTTP/3 frame is parsed. It has Core
importance level.</t>
        <t>This event is not necessarily the same as when the HTTP/3 data is actually
received on the QUIC layer. For that, see the <tt>stream_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-frameparsed-def">
          <name>HTTP3FrameParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3FrameParsed = {
    stream_id: uint64
    frame: $HTTP3Frame

    * $$http3-frameparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-datagramcreated">
        <name>datagram_created</name>
        <t>The <tt>datagram_created</tt> event is emitted when an HTTP/3 Datagram (<xref section="2.1" sectionFormat="of" target="RFC9297"/>) is created. It has Base importance level.</t>
        <t>Beyond the Quarter Stream ID field, the remaining contents of HTTP Datagrams are
defined by the concrete protocol using HTTP datagrams. The HTTP3DatagramCreated event
can be extended through the $$http3-datagramcreated-extension socket to support logging of such information.</t>
        <t>This event does not necessarily coincide with the HTTP/3 Datagram getting passed
to the QUIC layer. For that, see the <tt>datagram_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-datagramcreated-def">
          <name>HTTP3DatagramCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3DatagramCreated = {
    quarter_stream_id: uint64
    ? raw: RawInfo

    * $$http3-datagramcreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-datagramparsed">
        <name>datagram_parsed</name>
        <t>The <tt>datagram_parsed</tt> event is emitted when an HTTP/3 Datagram (<xref section="2.1" sectionFormat="of" target="RFC9297"/>) is parsed. It has Base importance level.</t>
        <t>Beyond the Quarter Stream ID field, the remaining contents of HTTP Datagrams are
defined by the concrete protocol using HTTP datagrams. The HTTP3DatagramParsed event
can be extended through the $$http3-datagramparsed-extension socket to support logging of such information.</t>
        <t>This event is not necessarily the same as when the HTTP/3 Datagram is actually
received on the QUIC layer. For that, see the <tt>datagram_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-datagramparsed-def">
          <name>HTTP3DatagramParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3DatagramParsed = {
    quarter_stream_id: uint64
    ? raw: RawInfo

    * $$http3-datagramparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-pushresolved">
        <name>push_resolved</name>
        <t>The <tt>push_resolved</tt> event is emitted when a pushed resource (<xref section="4.6" sectionFormat="of" target="RFC9114"/>) is successfully claimed (used) or, conversely, abandoned (rejected)
by the application on top of HTTP/3 (e.g., the web browser). This event provides
additional context that can aid debugging issues related to server push. It
has Extra importance level.</t>
        <figure anchor="h3-pushresolved-def">
          <name>HTTP3PushResolved definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3PushResolved = {
    ? push_id: uint64

    ; in case this is logged from a place that does not have access
    ; to the push_id
    ? stream_id: uint64
    decision: HTTP3PushDecision

    * $$http3-pushresolved-extension
}

HTTP3PushDecision = "claimed" /
                 "abandoned"
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="http3-data-type-definitions">
      <name>HTTP/3 Data Type Definitions</name>
      <t>The following data type definitions can be used in HTTP/3 events.</t>
      <section anchor="initiator">
        <name>Initiator</name>
        <figure anchor="initiator-def">
          <name>Initiator definition</name>
          <sourcecode type="cddl"><![CDATA[
Initiator = "local" /
            "remote"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="http3frame">
        <name>HTTP3Frame</name>
        <t>The generic <tt>$HTTP3Frame</tt> is defined here as a CDDL "type socket" extension point.
It can be extended to support additional HTTP/3 frame types.</t>
        <figure anchor="h3-frame-def">
          <name>HTTP3Frame type socket definition</name>
          <artwork><![CDATA[
; The HTTP3Frame is any key-value map (e.g., JSON object)
$HTTP3Frame /= {
    * text => any
}
]]></artwork>
        </figure>
        <t>The HTTP/3 frame types defined in this document are as follows:</t>
        <figure anchor="h3baseframe-def">
          <name>HTTP3BaseFrames definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3BaseFrames = HTTP3DataFrame /
                  HTTP3HeadersFrame /
                  HTTP3CancelPushFrame /
                  HTTP3SettingsFrame /
                  HTTP3PushPromiseFrame /
                  HTTP3GoawayFrame /
                  HTTP3MaxPushIDFrame /
                  HTTP3ReservedFrame /
                  HTTP3UnknownFrame

HTTP3ExtensionFrames = HTTP3PriorityUpdateFrame /
                       HTTP3OriginFrame

$HTTP3Frame /= HTTP3BaseFrames / HTTP3ExtensionFrames
]]></sourcecode>
        </figure>
        <section anchor="http3dataframe">
          <name>HTTP3DataFrame</name>
          <figure anchor="h3dataframe-def">
            <name>HTTP3DataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3DataFrame = {
    frame_type: "data"
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3headersframe">
          <name>HTTP3HeadersFrame</name>
          <t>The payload of an HTTP/3 HEADERS frame is the QPACK-encoding of an HTTP field
section; see <xref section="7.2.2" sectionFormat="of" target="RFC9114"/>. <tt>HTTP3HeadersFrame</tt>, in contrast,
contains the HTTP field section without QPACK encoding.</t>
          <figure anchor="h3field-def">
            <name>HTTP3HTTPField definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3HTTPField = {
    ? name: text
    ? name_bytes: hexstring
    ? value: text
    ? value_bytes: hexstring
}
]]></sourcecode>
          </figure>
          <figure anchor="h3-headersframe-def">
            <name>HTTP3HeadersFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3HeadersFrame = {
    frame_type: "headers"
    headers: [* HTTP3HTTPField]
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
          <t>For example, the HTTP field section</t>
          <artwork><![CDATA[
:path: /index.html
:method: GET
:authority: example.org
:scheme: https
]]></artwork>
          <t>would be represented in a JSON serialization as:</t>
          <figure anchor="h3-headersframe-ex">
            <name>HTTP3HeadersFrame example</name>
            <artwork><![CDATA[
headers: [
  {
    "name": ":path",
    "value": "/"
  },
  {
    "name": ":method",
    "value": "GET"
  },
  {
    "name": ":authority",
    "value": "example.org"
  },
  {
    "name": ":scheme",
    "value": "https"
  }
]
]]></artwork>
          </figure>
          <t><xref section="4.2" sectionFormat="of" target="RFC9114"/> and <xref section="5.1" sectionFormat="of" target="RFC9110"/> define rules for the
characters used in HTTP field section names and values. Characters outside the
range are invalid and result in the message being treated as malformed. It can
however be useful to also log these invalid HTTP fields. Characters in the
allowed range can be safely logged by the text type used in the <tt>name</tt> and
<tt>value</tt> fields of <tt>HTTP3HTTPField</tt>. Characters outside the range are unsafe for the
text type and need to be logged using the <tt>name_bytes</tt> and <tt>value_bytes</tt> fields.
An instance of <tt>HTTP3HTTPField</tt> <bcp14>MUST</bcp14> include either the <tt>name</tt> or <tt>name_bytes</tt>
field and <bcp14>MAY</bcp14> include both. An <tt>HTTP3HTTPField</tt> <bcp14>MAY</bcp14> include a <tt>value</tt> or
<tt>value_bytes</tt> field or neither.</t>
        </section>
        <section anchor="http3cancelpushframe">
          <name>HTTP3CancelPushFrame</name>
          <figure anchor="h3-cancelpushframe-def">
            <name>HTTP3CancelPushFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3CancelPushFrame = {
    frame_type: "cancel_push"
    push_id: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3settingsframe">
          <name>HTTP3SettingsFrame</name>
          <t>The settings field can contain zero or more entries. Each setting has a name
field, which corresponds to Setting Name as defined (or as would be defined if
registered) in the "HTTP/3 Settings" registry maintained at
<eref target="https://www.iana.org/assignments/http3-parameters">https://www.iana.org/assignments/http3-parameters</eref>.</t>
          <t>An endpoint that receives unknown settings is not able to log a specific name.
Instead, the name value of "unknown" can be used and the value captured in the
<tt>name_bytes</tt> field; a numerical value without variable-length integer encoding.</t>
          <figure anchor="h3settingsframe-def">
            <name>HTTP3SettingsFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3SettingsFrame = {
    frame_type: "settings"
    settings: [* HTTP3Setting]
    ? raw: RawInfo
}

HTTP3Setting = {
    ? name: $HTTP3SettingsName
    ; only when name === "unknown"
    ? name_bytes: uint64

    value: uint64
}

$HTTP3SettingsName /= "settings_qpack_max_table_capacity" /
                   "settings_max_field_section_size" /
                   "settings_qpack_blocked_streams" /
                   "settings_enable_connect_protocol" /
                   "settings_h3_datagram" /
                   "reserved" /
                   "unknown"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3pushpromiseframe">
          <name>HTTP3PushPromiseFrame</name>
          <figure anchor="h3pushpromiseframe-def">
            <name>HTTP3PushPromiseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3PushPromiseFrame = {
    frame_type: "push_promise"
    push_id: uint64
    headers: [* HTTP3HTTPField]
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3goawayframe">
          <name>HTTP3GoawayFrame</name>
          <figure anchor="h3goawayframe-def">
            <name>HTTP3GoawayFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3GoawayFrame = {
    frame_type: "goaway"

    ; Either stream_id or push_id.
    ; This is implicit from the sender of the frame
    id: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3maxpushidframe">
          <name>HTTP3MaxPushIDFrame</name>
          <figure anchor="h3maxpushidframe-def">
            <name>HTTP3MaxPushIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3MaxPushIDFrame = {
    frame_type: "max_push_id"
    push_id: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3reservedframe">
          <name>HTTP3ReservedFrame</name>
          <t>The frame_type_bytes field is the numerical value without variable-length
integer encoding.</t>
          <figure anchor="h3reservedframe-def">
            <name>HTTP3ReservedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3ReservedFrame = {
    frame_type: "reserved"
    frame_type_bytes: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3unknownframe">
          <name>HTTP3UnknownFrame</name>
          <t>The frame_type_bytes field is the numerical value without variable-length
integer encoding.</t>
          <figure anchor="h3unknownframe-def">
            <name>HTTP3UnknownFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3UnknownFrame = {
    frame_type: "unknown"
    frame_type_bytes: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3priorityupdateframe">
          <name>HTTP3PriorityUpdateFrame</name>
          <t>The PRIORITY_UPDATE frame is defined in <xref section="7" sectionFormat="of" target="PRIORITIZATION"/>.</t>
          <figure anchor="h3priorityupdateframe-def">
            <name>HTTP3PriorityUpdateFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3PriorityUpdateFrame = {
    frame_type: "priority_update"

    ; if the prioritized element is a request stream
    ? stream_id: uint64

    ; if the prioritized element is a push stream
    ? push_id: uint64

    priority_field_value: HTTP3Priority
    ? raw: RawInfo
}

; The priority value in ASCII text, encoded using Structured Fields
; Example: u=5, i
HTTP3Priority = text
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3originframe">
          <name>HTTP3OriginFrame</name>
          <t>The ORIGIN frame is defined in <xref section="2" sectionFormat="of" target="ORIGIN"/>.</t>
          <figure anchor="h3originframe-def">
            <name>HTTP3OriginFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3OriginEntry = {
  origin_len: uint16
  ? ascii_origin: text
}

HTTP3OriginFrame = {
  frame_type: "origin"

  origin_entries: [* HTTP3OriginEntry]
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="http3applicationerror">
        <name>HTTP3ApplicationError</name>
        <figure anchor="h3-applicationerror-def">
          <name>HTTP3ApplicationError definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3ApplicationError = "http_no_error" /
                       "http_general_protocol_error" /
                       "http_internal_error" /
                       "http_stream_creation_error" /
                       "http_closed_critical_stream" /
                       "http_frame_unexpected" /
                       "http_frame_error" /
                       "http_excessive_load" /
                       "http_id_error" /
                       "http_settings_error" /
                       "http_missing_settings" /
                       "http_request_rejected" /
                       "http_request_cancelled" /
                       "http_request_incomplete" /
                       "http_early_response" /
                       "http_connect_error" /
                       "http_version_fallback"
]]></sourcecode>
        </figure>
        <t>The HTTP3ApplicationError extends the general $ApplicationError
definition in the qlog QUIC document, see <xref target="QLOG-QUIC"/>.</t>
        <sourcecode type="cddl"><![CDATA[
; ensure HTTP errors are properly validated in QUIC events as well
; e.g., QUIC's ConnectionClose Frame
$ApplicationError /= HTTP3ApplicationError
]]></sourcecode>
      </section>
    </section>
    <section anchor="http-schema-def">
      <name>HTTP Event Schema Definition</name>
      <t>This document describes how the Capsule Protocol can be expressed in qlog using
a newly defined event schema. Per the requirements in <xref section="8" sectionFormat="of" target="QLOG-MAIN"/>, this document registers the <tt>http</tt> namespace. The event schema URI
is <tt>urn:ietf:params:qlog:events:http</tt>.</t>
      <section removeInRFC="true" anchor="draft-event-schema-identification-1">
        <name>Draft Event Schema Identification</name>
        <t>Only implementations of the final, published RFC can use the events belonging to
the event schema with the URI <tt>urn:ietf:params:qlog:events:http</tt>. Until such an
RFC exists, implementations <bcp14>MUST NOT</bcp14> identify themselves using this URI.</t>
        <t>Implementations of draft versions of the event schema <bcp14>MUST</bcp14> append the string "-"
and the corresponding draft number to the URI. For example, draft 07 of this
document is identified using the URI <tt>urn:ietf:params:qlog:events:http-07</tt>.</t>
        <t>The namespace identifier itself is not affected by this requirement.</t>
      </section>
    </section>
    <section anchor="http-ev">
      <name>HTTP Events</name>
      <t>HTTP events extend the <tt>$ProtocolEventData</tt> extension point defined in
<xref section="8.2" sectionFormat="of" target="QLOG-MAIN"/>. Additionally, they allow for direct extensibility by their use of
per-event extension points via the <tt>$$</tt> CDDL "group socket" syntax, as also
described in <xref section="8.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
      <figure anchor="http-events-def">
        <name>HTTPEventData definition and ProtocolEventData extension</name>
        <sourcecode type="cddl"><![CDATA[
HTTPEventData = HTTPCapsuleCreated /
                HTTPCapsuleParsed

$ProtocolEventData /= HTTPEventData
]]></sourcecode>
      </figure>
      <t>The concrete HTTP event types are further defined below, their type identifier
is the heading name.</t>
      <section anchor="http-capsulecreated">
        <name>capsule_created</name>
        <t>The <tt>capsule_created</tt> event is emitted when a Capsule is created (see
<xref section="3" sectionFormat="of" target="DGRAM-AND-CAPSULE"/>). It has Core importance level.</t>
        <t>This event does not necessarily coincide with data getting passed to the
transport layer. In HTTP/3, capsules are sent inside DATA frames, so the
frame_created event would be logged separately.</t>
        <figure anchor="http-capsulecreated-def">
          <name>HTTPCapsuleCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTPCapsuleCreated = {
    stream_id: uint64

    capsule: $HTTPCapsule

    * $$http-capsulecreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="http-capsuleparsed">
        <name>capsule_parsed</name>
        <t>The <tt>capsule_parsed</tt> event is emitted when a Capsule is parsed (see
<xref section="3" sectionFormat="of" target="DGRAM-AND-CAPSULE"/>). It has Core importance level.</t>
        <t>This event is not necessarily the same as when the data is actually received on
the transport layer. In HTTP/3, capsules are received inside DATA frames, so the
frame_parsed event would be logged separately.</t>
        <figure anchor="http-capsuleparsed-def">
          <name>HTTPCapsuleParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTPCapsuleParsed = {
    stream_id: uint64

    capsule: $HTTPCapsule

    * $$http-capsuleparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="http-data-type-definitions">
      <name>HTTP Data Type Definitions</name>
      <t>The following data type definitions can be used in HTTP events.</t>
      <section anchor="httpcapsule">
        <name>HTTPCapsule</name>
        <t>The generic <tt>$HTTPCapsule</tt> is defined here as a CDDL "type socket" extension
point. It can be extended to support additional capsule types.</t>
        <figure anchor="http-capsule-def">
          <name>HTTPCapsule type socket definition</name>
          <artwork><![CDATA[
; The HTTPCapsule is any key-value map (e.g., JSON object)
$HTTPCapsule /= {
    * text => any
}
]]></artwork>
        </figure>
        <t>The capsule types defined in this document are as follows:</t>
        <figure anchor="httpbasecapsule-def">
          <name>HTTPBaseCapsules definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTPBaseCapsules = HTTPCapsuleDatagram /
                   HTTPCapsuleUnknown

$HTTPCapsule /= HTTPBaseCapsules
]]></sourcecode>
        </figure>
        <section anchor="httpcapsuledatagram">
          <name>HTTPCapsuleDatagram</name>
          <figure anchor="httpcapsuledatagram-def">
            <name>HTTPCapsuleDatagram definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTPCapsuleDatagram = {
    capsule_type: "datagram"
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="httpcapsuleunknown">
          <name>HTTPCapsuleUnknown</name>
          <t>The capsule_type_value field is the numerical value without variable-length
integer encoding.</t>
          <figure anchor="httpcapsuleunknown-def">
            <name>HTTPCapsuleUnknown definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTPCapsuleUnknown = {
    capsule_type: "unknown"

    ? capsule_type_value: uint64
    ? raw: RawInfo
}
]]></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 section="14" sectionFormat="of" target="QLOG-MAIN"/> apply to this
document as well.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers a new entry in the "qlog event schema URIs" registry (created in <xref section="15" sectionFormat="of" target="QLOG-MAIN"/>).</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:http3</t>
        </dd>
        <dt>Namespace</dt>
        <dd>
          <t>http3</t>
        </dd>
        <dt>Event Types</dt>
        <dd>
          <t>parameters_set,
parameters_restored,
stream_type_set,
priority_updated,
frame_created,
frame_parsed,
datagram_created,
datagram_parsed,
push_resolved</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Event definitions related to the HTTP/3 application protocol.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This Document</t>
        </dd>
      </dl>
      <t>This document registers a new entry in the "qlog event schema URIs" registry.</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:http</t>
        </dd>
        <dt>Namespace</dt>
        <dd>
          <t>http</t>
        </dd>
        <dt>Event Types</dt>
        <dd>
          <t>capsule_created,capsule_parsed</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Event definitions for the Capsule Protocol.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This Document</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9110" to="HTTP"/>
    <displayreference target="RFC9114" to="HTTP/3"/>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC9110">
        <front>
          <title>HTTP Semantics</title>
          <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
          <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
          <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
            <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="97"/>
        <seriesInfo name="RFC" value="9110"/>
        <seriesInfo name="DOI" value="10.17487/RFC9110"/>
      </reference>
      <reference anchor="RFC9114">
        <front>
          <title>HTTP/3</title>
          <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9114"/>
        <seriesInfo name="DOI" value="10.17487/RFC9114"/>
      </reference>
      <reference anchor="QLOG-MAIN">
        <front>
          <title>qlog: Structured Logging for Network Protocols</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">
         </author>
          <author fullname="Lucas Pardue" initials="L." surname="Pardue">
            <organization>Cloudflare</organization>
          </author>
          <date day="20" month="October" year="2025"/>
          <abstract>
            <t>   qlog provides extensible structured logging for network protocols,
   allowing for easy sharing of data that benefits common debug and
   analysis methods and tooling.  This document describes key concepts
   of qlog: formats, files, traces, events, and extension points.  This
   definition includes the high-level log file schemas, and generic
   event schemas.  Requirements and guidelines for creating protocol-
   specific event schemas are also presented.  All schemas are defined
   independent of serialization format, allowing logs to be represented
   in various ways such as JSON, CSV, or protobuf.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-13"/>
      </reference>
      <reference anchor="QLOG-QUIC">
        <front>
          <title>QUIC event definitions 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">
         </author>
          <author fullname="Lucas Pardue" initials="L." surname="Pardue">
            <organization>Cloudflare</organization>
          </author>
          <date day="20" month="October" year="2025"/>
          <abstract>
            <t>   This document describes a qlog event schema containing concrete qlog
   event definitions and their metadata for the core QUIC protocol and
   selected extensions.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-12"/>
      </reference>
      <reference anchor="EXTENDED-CONNECT">
        <front>
          <title>Bootstrapping WebSockets with HTTP/3</title>
          <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9220"/>
        <seriesInfo name="DOI" value="10.17487/RFC9220"/>
      </reference>
      <reference anchor="PRIORITIZATION">
        <front>
          <title>Extensible Prioritization Scheme for HTTP</title>
          <author fullname="K. Oku" initials="K." surname="Oku"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>This document describes a scheme that allows an HTTP client to communicate its preferences for how the upstream server prioritizes responses to its requests, and also allows a server to hint to a downstream intermediary how its responses should be prioritized when they are forwarded. This document defines the Priority header field for communicating the initial priority in an HTTP version-independent manner, as well as HTTP/2 and HTTP/3 frames for reprioritizing responses. These share a common format structure that is designed to provide future extensibility.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9218"/>
        <seriesInfo name="DOI" value="10.17487/RFC9218"/>
      </reference>
      <reference anchor="ORIGIN">
        <front>
          <title>The ORIGIN Extension in HTTP/3</title>
          <author fullname="M. Bishop" initials="M." surname="Bishop"/>
          <date month="June" year="2023"/>
          <abstract>
            <t>The ORIGIN frame for HTTP/2 is equally applicable to HTTP/3, but it needs to be separately registered. This document describes the ORIGIN frame for HTTP/3.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9412"/>
        <seriesInfo name="DOI" value="10.17487/RFC9412"/>
      </reference>
      <reference anchor="DGRAM-AND-CAPSULE">
        <front>
          <title>HTTP Datagrams and the Capsule Protocol</title>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="August" year="2022"/>
          <abstract>
            <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
            <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
            <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9297"/>
        <seriesInfo name="DOI" value="10.17487/RFC9297"/>
      </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="RFC9297">
        <front>
          <title>HTTP Datagrams and the Capsule Protocol</title>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="August" year="2022"/>
          <abstract>
            <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
            <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
            <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9297"/>
        <seriesInfo name="DOI" value="10.17487/RFC9297"/>
      </reference>
    </references>
    <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, Christian Huitema, Hugo Landau, Kazuho Oku, and Jonathan Lennox for
their feedback and suggestions.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-12">
        <name>Since draft-ietf-quic-qlog-h3-events-12:</name>
        <ul spacing="normal">
          <li>Added HTTP3OriginFrame (#504)</li>
          <li>Added support for Capsule Protocol (#504)</li>
          <li>Wide range of editorial changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-11">
        <name>Since draft-ietf-quic-qlog-h3-events-11:</name>
        <ul spacing="normal">
          <li>Replaced all length fields with raw.length (#495)</li>
          <li>Renamed owner to initiator (#498)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-09">
        <name>Since draft-ietf-quic-qlog-h3-events-09:</name>
        <ul spacing="normal">
          <li>Several editorial changes</li>
          <li>Consistent use of RawInfo and _bytes fields to log raw data (#450)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-08">
        <name>Since draft-ietf-quic-qlog-h3-events-08:</name>
        <ul spacing="normal">
          <li>Removed individual categories and put every event in the single <tt>http3</tt> event
schema namespace. Major change (#439)</li>
          <li>Changed protocol id from <tt>HTTP3</tt> to <tt>HTTP/3</tt> (#428)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-07">
        <name>Since draft-ietf-quic-qlog-h3-events-07:</name>
        <ul spacing="normal">
          <li>TODO (we forgot...)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-06">
        <name>Since draft-ietf-quic-qlog-h3-events-06:</name>
        <ul spacing="normal">
          <li>ProtocolEventBody is now called ProtocolEventData (#352)</li>
          <li>Editorial changes (#402)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-05">
        <name>Since draft-ietf-quic-qlog-h3-events-05:</name>
        <ul spacing="normal">
          <li>Removed all qpack event definitions (#335)</li>
          <li>Various editorial changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-04">
        <name>Since draft-ietf-quic-qlog-h3-events-04:</name>
        <ul spacing="normal">
          <li>Renamed 'http' category to 'h3' (#300)</li>
          <li>H3HTTPField.value is now optional (#296)</li>
          <li>Added definitions for RFC9297 (HTTP/3 Datagram extension) (#310)</li>
          <li>Added definitions for RFC9218 (HTTP Extensible Prioritizations extension) (#312)</li>
          <li>Added definitions for RFC9220 (Extended Connect extension) (#325)</li>
          <li>Editorial and formatting changes (#298, #258, #299, #304, #327)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-03">
        <name>Since draft-ietf-quic-qlog-h3-events-03:</name>
        <ul spacing="normal">
          <li>Ensured consistent use of RawInfo to indicate raw wire bytes (#243)</li>
          <li>Changed HTTPStreamTypeSet:raw_stream_type to stream_type_value (#54)</li>
          <li>Changed HTTPUnknownFrame:raw_frame_type to frame_type_value (#54)</li>
          <li>Renamed max_header_list_size to max_field_section_size (#282)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-02">
        <name>Since draft-ietf-quic-qlog-h3-events-02:</name>
        <ul spacing="normal">
          <li>Renamed HTTPStreamType data to request (#222)</li>
          <li>Added HTTPStreamType value unknown (#227)</li>
          <li>Added HTTPUnknownFrame (#224)</li>
          <li>Replaced old and new fields with stream_type in HTTPStreamTypeSet (#240)</li>
          <li>Changed HTTPFrame 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 numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-01">
        <name>Since draft-ietf-quic-qlog-h3-events-01:</name>
        <ul spacing="normal">
          <li>No changes - new draft to prevent expiration</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-00">
        <name>Since draft-ietf-quic-qlog-h3-events-00:</name>
        <ul spacing="normal">
          <li>Change the data definition language from TypeScript to CDDL (#143)</li>
        </ul>
      </section>
      <section numbered="false" 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>
        </ul>
      </section>
      <section numbered="false" 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 numbered="false" 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>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+0923LjxpXv+IoOx1XWuEiOLnOld7KRJXlGyVwUSZPEm3VR
INEkEYEADYCS6PHkW/Z1/2Gfdn9sz60b3QAoSmMn2d1aV3kkAX05fe7n9OlG
r9cLyrhM9EC9Pj8/ebSnfkiyqdJXOi1VpCdxGpdxlhZBlI3TcA7NojyclL1Y
l5PeD8t43MP2vdlej7oUvZ29YByWeprlq4EqyigI4kU+UGW+LMrd7e0X27tB
mOtwoM7zMC0WWV4G11l+Oc2z5WKgfv/h+CC41Ct4FA3UcVrqPNVl7xDnDIKi
DNNoGCZZCnCsdBEs4oH6c5mNuwrAi9MIIOiqAsbM9aSA31Zz+aXM4zG8Gmfz
RSi/zBHcrorTJE7190EQLstZlg8CpXrwv4IXxUCd9tXbML+hB7z802wUp9XD
LJ8O1P5lOA9j+lvDL8lA5XNo8JuQnvdhMnqXZ4hmHcVllvvTvOmrd/F4nAEo
sTPXm+U4rL2g+d7qMnRnS1LT5jdzeHWHCd/21ZmG3mnqTAeLKnXqvZAJ5vSm
4Be/meLDtZPYFZ2EebTUteUU7mNazEGSLaNJAkzhLQnb/ob+XVCH9vmCNANU
l/GVRsKdfnvwYmdne0DtorhYJOGK+Tqwbx+3vH20h+9//+b9q97b/eN33OK4
d9ivcTmAlvaK8QxgtB2QY9d2oN9YMEAO0kkFbNDr9VQ4AsYEfgyC81lcIA8v
51budOGKIs9aAOOmJUARp1P8dZzrUnOLQsHoqpxpeA6oFGFe5BmIR5YoEBxV
6ESPSx0pfYPURLHuq+NShUmR2TnDVM3KckEkA9SPNY4b4LgH4aJYJlqdyJh9
XkSalXr4Dv8ps+GpDiOdw2J/rfCRKjNEu1BroE4SHRZa5XqeXcFLXHQBIAEk
aqRhHq0Wy1ESgwKBRzD+t1pHo3B8SeADycbLAsFWwCzqWifAElqFZfBnhLgY
PHo0jcvZcoSs8ghRfz19hCj8fuv29w/7SuDGgYMwuooLwBLADtpD5/gLrr/D
q/iyYBXYgZnhOfzz4fQNIR9Qt1z0yqwXgQJUVzAewBpkE16ooa6gbR5HUaKD
4AFquTyLloSGdZwQNnlBbX38eCbIe65gFsu/nz49DO7IJ6rOJx8/iph8+uTx
TFDxzEAd4e8RoOjg/bt3RwfnCMqvjv50fvTu8OiwJw9f4kC7u9sATVednB6/
Pz0+/2744eRw//wocGB/hrD/Shoc/8v++fH7d9x35zn1heevjt/RHPwrvX28
s0tvAUjD7IdhGU7zcF64qNnt79AEh69O99/29t8BfPsnZx/eHPEcL57BKA0p
CEKDZIMsnKIhAe48ezhLYxIcHGkqyHek6hpYUcVoseJJDEx2gTy6d6GQ+gRE
9DUgXwNBGJIePP30CSBNA2KnaqT5MinjRWLpC4wMKkZN8mxOoBPnGFWjjgiO
cRIWRYMKLgd1lQ7HM1YVEbIRiQBwdthRAHASsUySh5BOUUHEueogVOb9VZgs
SaEgF4HhKONxAcj4+NE6C8BjxXIOxiX+ERriBNifOyI8DAEBXK4WmqWtQhBY
GsZFsdBjwKKoDXWGakE8GICXwSnUstDkACT6hp/jmKABgTrwBiU/14scfk9R
R4Ku1ekSeAkYINe9ZRGOAMWOR9RV17MY4ENdRN4LqYyphmXkCjAKP4NRVpZA
hboKIK4CEuRxuQKM/KTeVctu/veTOp6jnxSmQOyflDq0MKifgp8Gvdv+8177
baEvafq9ARhYmB9crWJY6NKZ9xtU1uYPolvVFFoC+VoHARyCngR0bBzEtPRG
AkbV4XyI1HHhaRuJmxId6+DkcYboHS4XqI2j29YkTaWlN8wEIR2C+nTGoJ4H
qDy9YaiptGwZAxZduEOsH4NbekNEotlqkLStxjRtg8QO4wNz2zAtwCyWxQxp
nCVXPk7ALOShj1poalrSGB8H6oEVf0WBx8uOqG/STEXnE6kImOmXVBK67tTE
qWpRHf9oWRyM2cI0OK7JLIggad0ktR2nznW3juPQmuhU0cCllEOnBw/UhyKc
ijGj2K2ydUiBYpzHI6JBTQGOQ/T4UCVH3BkUIv7MlqUCczUVgwMaOSE84NjV
sIawAL/1wck2TpwRnS5dYhuCz0JQhpfATqDvxxqMsHCEzlHhT0Dhc4CIPs4k
TjTxDVkyNKIa7BnqMHLYQPEsF2jX3MlxGd78MbGkOyyxKYIVo0VCkGg8sDtF
PIUfwTTJRmGSrNQyjX8AZnR8BXBIietFcMDBS9mMozGDeY4PCcEweoXlsCAx
sGJjPYMOGa9hHInd7qLpA+c6wZ+2lcECEgp/DypwumoBrj78QdAWy8kkvoEJ
RyvFE8LKpnqRxUZAt76FMfRNiOvuBuFoHO3s7j0GVZ+Dy9yn2a6zJTgQ4sPS
MPy2V8C0QgNZQ7V4wnzw6gOs3gyKzhcwKYQihNwwAfZPkSSU0iBevdQrhdmG
QnXefjg773T5p3r3nn4/PQI6nh4d4u9nr/ffvLG/BNLi7PX7D28Oq9+qngfv
374llxj/hKfKexR03u5/1yEHVnXen6Dbu/+m0xQV9C+A4CPkUGDQBbryRE5P
vL45OPnPf9t5DBLxK/Brd3d2XoAc8x/Pd56hN38N3MCzZSnQif8EDK6CcLHQ
YY6jAAWBcxZxCc4w8UExy64hINS5Bkx+9WfEzPcD9U+j8WLn8a/lAS7Ye2hw
5j0knDWfNDozElsetUxjsek9r2Hah3f/O+9vg3fnoeuuk4uLriI4GhCgLXPP
A2ynlb5BJxJELhDWBZYbQ0BJ4YlrMN6E6XSJ2hPIdHB4+AYDkudPd7Yl8orL
wgm6fGVa+e07/d2a5y7xxiRLkuwa9ai4vxQPiMLklgRuTPZMszuPmmJAVrJb
2cpugGLbJUR0ldEWXXUaXh+nk4x5qoznuifaOuAZARA2FTSP0dqkm0E5xZUd
TQDZpG3WrPF5H4OrwF/jfoEalTQAOi/oUXuL61a6S0K52ygXECrSklUDKbJw
mmYFxCwofKB9QLvFP7KK5jQORw5qPMti1kb8GKEK06Cm1SPwMgr2MB4o199R
ZwycwxcfHzgRXzMhwCgqFEjm+jB+TboHzUIwcngUEUE4WhbIKqFK9TWs3RDL
zTf01YnmWDjXPyzjnFaHmAzW5yG6NfnI9TQu0PGncUzIazmNMBp4SY4Pp8eI
0Ytlng4wucZxRjFAoAdsXQc8DKt6yhT7qD0WS8U+Hrg2nH6K03wyftkBwdbo
y7xHpehTrTA2BpARJl3OTRUzwAvmtNDCYkhZVg7PSCdZyr5LFtjnZinE+fgU
13SXBakPAHcCFhWjzDSgRNoN4A/9iRqgRg8bL4Fs7xw44EoXQluiBEyNrkpz
mZTSMjkru3APfpoDbQWKO5rkMsfIv9PrsAZgXgS+WmScMeAxIYgeVUk0BEC5
DoC02n5mouTKRQN4rZcR2VXcFX+97WcXogsdt79yokC/6mSCk6QZaO7JhIWF
3Bby1SyTN4S2ABmlKAb4Rp4LB3C6hLn7C5Mmoj6o/S8qUVTsEDlBiqvvGjpd
7UdRbFQTm2001qACUPFFAOi4NIOP4gSiWfG/4pyYFNTnAtwnpmcNiEJdxaGA
/MWFQlMkTqEqsvGlLjuqWAGv3JBHgGmyYK2ibjFGf/3rX9U4ihLC1J7FhXpJ
KN07scmAM4j1HwV+vFVrcmoyC63tzigbcA7Gav1QEut/kKxAa6NvcboDicDW
tzjh2Kq1gUlF3jqKaXTbQCcQQZ9KBB0ETZZSjwSP9gki3I+z0ZC4EZxDhMom
kgw3hq88kI7wuuF0NJgYqaFJxzgjVGOdk7s+RvGnIWekLQolkQ78ZXL7QRKu
MHIQxYHGt0i/xCTsdbjCdHeWkteLP+bQD0V/pMtrDTMRFNjRibD67LTdjGfg
VJE1JrfNdLEZXNuN5kfhlzWICAQdyT5h9yGaiYi1W8fmTtw3gotGJGrVAiV0
GFkl7nfO4xLZAXBDUPBkVSoRJZps45y8jgVofZvdpQ6gxEAgC8lx1q3APJ7O
QF2jBgKXFXAG3ZIwn2qGoxtAzDojIx4iwQpQcRT6ArqKOUwOrxhg3BaFSC9i
vR3OwVOLf5RRIBrAvZIAMJDjr33lrlXe8pLdfKqEg15CDRPQjczZQ8K3lzTb
aibHHhrCq7PliBdSBgzBIlwlWSiOO2F9wqSOgS/HoQDToLPlpG+XOWIJFq27
a5uR+ZfASbauPJBl02+kxyHq3zqlUm02mAyg5J6HMp+HfhqRmNPFsJg2u7nj
2iHObBMJJrwYa2jQRbnuimWgcLwyiYE41DgBChyaTfaqahlisn5+KpihufAb
Xgg4EsgXBkiSwpP9g9/12PWHpiVMCGw3B5c7WYHvlNE24VjHiHK7lSH9z47O
z4/fvTpjlNPuzQxME2Ux63EFhgoQ1ZaU5K/AY5FcLYAhKGsBq8qwD4KWQr9c
sSoB7s6u8W+JlVnERpp6gF6LYnAccsJ5jJIeLXPjplSZiS7rOOIS2clD9pmF
V7qSb8APgU3OVwOR5DxWk0lMB6+EDzqkxkOwjmb7BeZD/58DhTPBsESovDbS
Q6GXPjpDMTLkIABVlTXqJBlgi/Whpc2axkHHtOg0fADf5L9UH8nw/bOyS8DK
D/k1oHdfm817aTkPb4a0yqFsHw8L0E8DtQR35uljt8/uttunxE2c4TgENQpO
gG3PDUYJejswJCvl4ThbpmXrmLvbasvw4PDo3f43b46Gsus5PDl9f/7+4P2b
hzKqlr3SoaCZB9x56g344pkz4Ou94eH++T5uJZpBZntDY3/q/anOwGSx5ZlR
dAWaZtH4qP/8mPQ6jGU3OLQSJQOwojFb8nkGXEneNzrF4IIVAhaNMIRGQ8MF
AzXKsoRh+0p98QV74p6q6FmXIvjk+ip+o7rL4vNM5bZ0NmieMLVpxDBdmWAE
JGyZCtIoxUv5CkqeBmKEJ7TvJ/aLEUaJYUpEOmy/FV6G6tXp0f7Z0UNMjoZR
b5aNIWhbUG3ThEId42/bXpT9jTIKPUhwQmVS3e0pi4YetptsNWVst9SC4I/o
l3HYRM7Ddu/0/Lxrs8ZJbB05fbPg6IdM0lwTkljMJcQNOAH7ZWFYpai0MiDp
Ks6WRS0R7RPFwCWUQVuzlCoLw67iBQl8FlfXmlwJWS55jJk0lS1mdECDJcTK
8Y+4WFrnRquwTifZGMMopv9XPmuUT5uAGzptlnLbcr2oW1L48g6CUN8jJiHw
d4NFL9RaOi7JlV4VJnYxPMfeF/lFI9ysAea6TLPrlGoxqhC9UE/7O8SKTznk
tUUzG9nugMROjWIO2nlXQqhuwh/RCA7o1b5NR3QwmNUzEsk1Q9EYaWYdPxA2
CLcS3JuazryUIO61BBI4oV4CID+krWOCEtUxu5PmLaBpGqeS1QUo8xi5HPy6
dFrOAsyoTjU7mn31Rwr0UGOw48mZF8Jv12SUWha8TKlJh9LQ3s6hSTtxW5As
zNDLbqM32nC0QmtIUvu1CgMwAzpH10+6mj27GvzKwA9RUoYusThbU51id3Xx
RS3v4Jbv0K4JZUwkpULgm4xKJR6UgyG2kaUZoaUQkM0IWBWT/mlh1aKhzfxM
yAYPC18JruLIU0sOBgeqvlajQ+xukke+ly9fOpTj2RsEqeu3W4bCSgIzTlgA
FmM0lkOqRXCgruklTyN4KimoLwcTKaqSrkY2xvzXQXciz5JbWhCs618bH+KW
JgZx61v8gJmAIfGl3tgs0tTM1cM+Zuoq2OefhvZtFNewD1KrozGOWa2x0cAg
KVrSIURy9iS4Lcp9aLxNw+rAqohZGyIXws5g9TGUyZWBppzlpOTmGrVaXMwL
P8/q1xreQWefkyiLeBYYDYIcAhAF6s/r2QpgbVlmNh4v84JzXNQoAONXxuNl
EuZG72BFL8a6aS0p7iHDqDx/eQHWCYRJUQuT2a3DSR/BgOy1qS3dn/YpqSPa
4/XR/uHR6RnitFaaKRkg8mVjq5NswAi+MwyYx1EEJIuWlKSjsBD0WBKPYymo
UxdlHk9BdV7Q8i8YWRcmbnWVOGb5Fia1HYgS502PSIPjnjTVWz2LW3lq8cRF
HTGG5piH9uVqLOXrpboa2Tyaw44yVKs++meVJdHAT0BzWby+rj+WDoK9Aagb
oueQiT20QXWLyJvwvOVNhka7YwZnYjTGRu3b0tu2IlYaguGcts7P0w+JDVrH
cYFwXEdfa6z1G2vNGk5jjSUaOsuv5COF5eUdRVt5zW5TVU7Sk3ZOx+WSMkmS
8+4HolOo3qpVp+CoXKSaaXaFwEWHQBt8EBhnDG7BGKtdyLWS2ShTOOXACILB
QuQH47Mqq82qBD25LlUQl44bXOUx7dqauWtf2LzdECNp7f4CIc94CtSvTm0X
5etI7bWp09mDZg2RJQVb0ViSxh6J+dkdKUzOKvewxgIJG9xO2LhJVnJMccCw
aMxE1EXFIrwUWM3O5cTq82kc3IHGsg31i5CYcXUrhaVJK4EFFJ++SOBGISwR
uV7zKoSuN15H7NCaRbMjVztAgGc4flUdF8ABZMiNrsM3epVJlPL7JZ6iyhU7
V1ikJ/V2XFMxr45rlJSYgUlpz6o61oA16jaRvzJJZs7/29IPTvhQT4MAscmt
O5OcjWmEHuJC4RSGsDUs95y0FgU1brxiajhxZwktuT37RJms++k+R0IsfXwd
GEhxwQb5aNnCu7OE1NFmpOQHJuqwXVrA1oZg4qVSqi4paxHqS0u9WV1i6qA1
tGK97NuTGV831pp+tsRgwUFNYmrq83+dwJw4G3v3kpe6Lvw54nJPi2Kp8zOs
yi8hNTXT8ksIze0WptZqnci02hkMcL0jDhzdukcZTGjrNlsrKzSaxlx6kS1z
YHVHVB73n6Ko2PQhSQqwAJJ3skR/cpyE8Rz3wDFYwqisy7lLABwrgcIRxFcZ
8vdWrv9CSfyHgbC6U29BtM4WRkSANSQkxHbXeqRGeXYNHv5DqSDnpYCIXIEa
LgIn/UTSdiMnH2kTPEYEjpbMwXFRYEbebGZw7SSGoIgEFP4AhZ9PimxOyjvF
L04WqzXIwl0vLgXlvS5b2SEb64sE679k30VsDudZCdkyhhgSmWFtfIjPTUmn
ieCgy6E8asQ4Du/4WahGV1hmR0jemtbpWIJ76RxvhkZs5KKxxuuuplCUB6sq
UYt6JbE9NefV0rrBfJVhMNUUKE7Obq4lsH2GK26NXDtYp1k6aSubvXRXWI3T
kGLXR21J29Kbz8jYctUcBXj3ythyIOEkbHFdX1eG5lsTaOBG5aVe9ThHNA8X
Rlh/e/b+ncpGKOYPA2cRmLv8KDxHwvny1zgIq8S6393ucStnrS3bq80luMdw
mkXwYSFsUwzqQo2G/1sui3pZWVhZR0sek5q85qqiDa0OUJckyO4bGppyiA3N
cKQTUB+xQLy+5assvA5XGxq9DW9wxOPDDe1OJUG8odkHThILg3Nhn+FRH8F+
cmT9sNXY7/MY1LkMXeO0OhUfqba5He00grbtrOeMUpfeBzXeaHMtGCTD+xzX
82YFH1RucydcNwEbtQNWjb4GLpchWURM2Rmmrht5VptEIIeLSp/MnpLTgf3b
QLaVzflve0S7v9vYbLxoAHNBaV7apAiLshvY2itbA8nlQYVzaIqOqyFQ7kaX
j27851vqWNlhvtUDFY7zwOzszPSNFIjzO1JmXmt60mzuEohAbRCngsUnTg1i
V2W08oiUKjKbyB8D9eevlD/L95vYqCd921nJg8MHuJHyb9KHVhUMFmE5G6hH
eMXNTX9WzpNgMNdAOHBJXh2dBwO+vIbKCmTAfpZPgwHVkcBa6QIMGirgs3Uj
vzoTy2PYvPhHXULR30GFHsAG45IP+wMeCbpOlx8SVfHpI8Trp25Lc4a80QEW
sraLXV+jl7Pctb0ZC42uhBTqFHy/lpz6Zj01ZW4+sly59L6Q0gZI9foJ30ch
V9XAa7ajKl8m2t7NgdvxeFsDFiq6flVNdqtjqVwI01cHVT8Qaj4ticdoaXOf
zzhB0ziS4p5imZRmu3yOEeUU6x6ogFGSCWDI52GC0ajE7niCaMYlkeL1QZxC
VcJ4fwbWLnGppZmoAtsHj2flaisMjghCs8UWTiC4MQ68RDMcdaCXYjBC4WlK
ThzeAnJBSLB7TFhF6QvyxTr8qAo/yxQnt3SoJuXCUPbxRrb0vTqUclEpP9nz
cvSbAaof7Ke20LMNQj5kE6fjZAmgSbGFs04Ay50oqG7ieLv/ne03ykqItWCq
5vBOq1AZjIFj3gItTpYyCH3H8tWcrLrarftgrZp3TI2G1aZ+PaTbpHF5AOzV
rnTrUKyx4p4fyGbclp0xDtwCwh91niFSsDIcLCWYKxS5IzyJLb0osxWSXAaS
q+JCtepgVIEMJPPyXQNh5UtvYQFhoayKtj72JDBH5zAJILxvLk4wq+jI+bp8
pTA3hjCjBJfBP5n7j66vr/txmIaoLR/xSXM6xfeoXsb1ayybTmGRkRzcxrhZ
EkegktjzrHBlDlHhFSkla4HQXq0gdeTHwPagPLstVzhU9Q53ru4JPHkzhT3q
ZxT21CpovAihlYnN6pmDqwpY40DIEGvcB2+ahlP1hQcEskmjRIZQ2FZm43ph
boZEPDB5VJXAOJOge2/XNeTikWbp4pp6k6pje4Xkxm48X60ScmMvnTJwXOE4
NGndjf2cssZ1bTdU6lSIrzSTGb5dLflctUYp1aPOtqyYF5W2cidp1AU3W69j
f4bXi8PJ+O2LbcC5Zr1O7FxfqhtWt65ySg06JgV4xAbTJuxQW8uy+9LkXLKD
WAwfAzdXZcx4boprw+1BJepzd7PE0LRjw13KGkT4+YE6LmrZg1Z0oODJej/L
rkJ/7BFH7WuogbBmGV76QlKIFki3EtPEw3dU2sFGpe0nTloxZEW69qqmMDfg
yYzSjiYfjDVY8rM3f0ckuRO348izJ5+LIhmkHUMeDOvUYDNpxXhqLVjzb3xS
tYvtGhV/t1eU3aZW/TK/zl1Lxf4hhWcWWDbG4gA069CazgmnpW0FIrMc4HX/
7OD4mEKxLnOYjYHOzA0pkSL7UcAYRxwfA1Avn3RV7KMa8EvJIMeieDVea4xK
C6HWMJCXw8TlyEWSt/MLBe/csoVPeMyjFH1s5o+MngxB+uzhCK5RHsfxkF9K
1sv4fA5cMobHYdyHGEvGllCjMtIOFN97Qscd2jHnTtu+VbJf7Rce5bm3W9P6
HnduMHAYptlQ44P1hcjSkHZgsEhQnLQ7dqOLj7BE8W7NRayoXgKdz7v1GidZ
gSdlUOCwkJFH2diNabdMzRGqO3a4G0z6hk7eXekhppY34ym6K4as83yn5uDC
oYzbbhs7iLYbmi3pO3fguD65R4845Ts9y1vK4A02wzxZDTkOLzY3NxHF3XAk
V6cMJ2GS4JXF3vassxNPozWEsyFa7VtwzXa89cgugkiX+qIhyM41D5I7oFOG
VPlh9u26st2wpp7ja9D3xVKuGlK0Cj47CLK80IBYRfm+ULLJ7oV9cp8cDkHb
mPjuSyygNKcFD1D0FGvqBvB2y6mxKkpns+665TIlusbwXjcqNa75tdu8rbcm
BZ91a5Lyb00K7ndrUv3SJP+mng+nx8FdLk36v3Zn0v+SK5NUp9cJ/gdemfQ3
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

-->

</rfc>
