<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" consensus="true" docName="draft-gupta-httpapi-events-query-03" ipr="trust200902" sortRefs="true" submissionType="IETF" symRefs="true" tocInclude="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>HTTP Events Query</title>
    <seriesInfo name="Internet-Draft" value="draft-gupta-httpapi-events-query-03"/>
    <author fullname="Rahul Gupta">
      <organization/>
      <address>
        <email>cxres+ietf@protonmail.com</email>
      </address>
    </author>
    <date day="05" month="July" year="2026"/>
    <area>Web and Internet Transport</area>
    <workgroup>Building Blocks for HTTP APIs</workgroup>
    <keyword>event</keyword>
    <keyword>query</keyword>
    <keyword>notification</keyword>
    <abstract>
      <?line 97?>

<t>Events Query is a minimal protocol built on top of HTTP that allows user agents to receive <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> directly from any resource of interest. It uses the QUERY method [RFC10008] to request (optionally) the current representation and subsequent <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> within a single response. The Events Query Protocol (EQP) is predicated on the idea that the most intuitive source for <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> is the resource itself.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://CxRes.github.io/events-query/draft-gupta-httpapi-events-query.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-gupta-httpapi-events-query/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Building Blocks for HTTP APIs Working Group mailing list (<eref target="mailto:httpapi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/httpapi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/httpapi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/CxRes/events-query"/>.</t>
    </note>
  </front>
  <middle>
    <?line 102?>

<section anchor="introduction">
      <name>Introduction</name>
      <t anchor="intro-http-traditional-use">HTTP was originally designed as a stateless, request/response protocol for transferring hypermedia documents on the web (<xref section="1.2" sectionFormat="comma" target="HTTP"/>). This design was adequate for web pages that were mostly static and written by hand.</t>
      <t anchor="intro-real-time-needs">But web applications have evolved over time to provide increasingly dynamic and interactive experiences, requiring near-instantaneous updates. HTTP does not automatically inform clients of changes to a resource. Developers have employed various techniques, such as Comet <xref target="COMET"/> and Server-Sent Events (<xref target="HTML"/>, Section 9.2) to work around this constraint, but these can be suboptimal for many applications.</t>
      <t anchor="intro-alternate-protocols">For this reason, web programmers often prefer implementing custom messaging systems over alternate protocols such as WebSocket <xref target="WS"/> and WebSub <xref target="WEBSUB"/>. Not only does this approach require additional layers of code, involving multiple Web APIs and/or userland libraries such as <eref target="https://socket.io/">socket.io</eref>, it demands extra coordination effort to synchronize representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> across multiple protocols. The dual-protocol approach thus compounds the development and maintenance overhead. Furthermore, deployment at scale is challenging with the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> traffic now opaque to network intermediaries.</t>
      <t anchor="intro-agents">With the rise of AIs, autonomous agents acting on behalf of a user have emerged as a significant class of consumer. Agents often need to observe HTTP resources, to monitor the outcome of prior actions and trigger new ones. But the friction involved in observing a resource an agent is already interacting with makes existing mechanisms a poor fit for such agentic workflows.</t>
      <t anchor="intro-events-query">Events Query is a minimal protocol built on top of the Hypertext Transfer Protocol <xref target="HTTP"/> that allows applications to request <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> directly from a resource of interest using the <tt>QUERY</tt> method (<xref section="2" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
      <t anchor="intro-convenience">The objective of this specification is to make the request and receipt of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> extremely convenient for consumers. Events Query allows programmers to incorporate real-time functionality in their web applications without the need to switch to another protocol. Further, Events Query can deliver representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> from a resource in a single response, obviating any need for coordination and saving on unnecessary round trips.</t>
      <t anchor="intro-fetch-example" keepWithNext="true">With the help of a suitable composite media type parser, Events Query responses can be consumed with just a few lines of code, as illustrated in the JavaScript example below:</t>
      <figure anchor="events-query-fetch-example">
        <name>Events Query fetch example</name>
        <sourcecode name="events-query-fetch-example.js" type="javascript"><![CDATA[
const response = await fetch("http://example.com/foo", {
  method: "QUERY",
  headers: {
    Accept: "multipart/mixed",
    "Content-Type": "example/events-query"
  },
  body: JSON.stringify({
    state: { Accept: "text/plain" },
    events: { Accept: "example/event-notification" }
  })
});

// split the response into an iterable of representation and notifications
const splitResponse = splitHTTPResponseStream(response);

// read the representation
const {done, value: representation} = await splitResponse.next();
if (!done) {
  // do something with the representation
}

// iterate over notifications
for await (const notification of splitResponse) {
  // do something with a notification
}
]]></sourcecode>
      </figure>
      <t anchor="intro-conneg">Unlike other <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> mechanisms, Events Query supports content negotiation for <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>, just like representations. Thus, the Events Query Protocol preserves the flexibility of interaction afforded by HTTP and extends it to <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
      <t anchor="intro-sync">When combined with suitable data synchronization technologies like Conflict Free Replicated Data Types (CRDT) or Operational Transforms (OT), <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> can be used to create "live" representations. This can immensely simplify the task of programming multi-author distributed real-time applications.</t>
    </section>
    <section anchor="design">
      <name>Design</name>
      <t anchor="resource-as-source-of-truth">Events Query is predicated on a resource itself being the most intuitive source for <iref item="event"/><xref format="none" target="event">events</xref> on it. Events Query treats <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> as a response to a query for an <iref item="event"/><xref format="none" target="event">event</xref> occurring on the resource. With HTTP allowing representations to provide a potentially unbounded stream of data, the Events Query Protocol is also able to communicate multiple <iref item="event"/><xref format="none" target="event">events</xref> on the resource as a stream of <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
      <section anchor="goals">
        <name>Goals</name>
        <t anchor="goals-list">To aid the development of real-time applications, it is imperative that the Events Query Protocol reduces the complexity of both servers and clients implementing <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. With this in mind, the goals of the Events Query Protocol are:</t>
        <ol spacing="normal" type="1"><li anchor="goal--http-only">
            <t>to serve <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> using the Hypertext Transfer Protocol <xref target="HTTP"/>. Clients already fetching resources over HTTP need not switch to another protocol for receiving <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
          </li>
          <li anchor="goal--unified-source-of-truth">
            <t>to send updates directly from a resource of interest, obviating the need for additional resources to be specifically dedicated as <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> endpoints. In contrast to existing approaches, this frees up the client from the burden of coordinating the response from the resource of interest with <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> from an endpoint.</t>
          </li>
          <li anchor="goal--reliable-and-order">
            <t>to provide reliable and in-order transfer of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. The transfer of <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> directly from a resource ensures this for the duration of the response stream. Recovery across errors and loss of connection can be layered (see <xref target="out-of-scope--temporal-coordination"/>).</t>
          </li>
          <li anchor="goal--unified-request">
            <t>to deliver the representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> in response to a single request, minimizing round trips between clients and servers. It also eliminates the need to synchronize the delivery of the representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
          </li>
          <li anchor="goal--content-negotiation">
            <t>to enable the transfer of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> using arbitrary formats that might be content-negotiated. This allows implementers to serve <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> that are more expressive, say, in comparison to existing HTTP-based messaging protocols such as Server-Sent Events (<xref target="HTML"/>, Section 9.2).</t>
          </li>
          <li anchor="goal--intermediation">
            <t>to specify transparent <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> semantics that empower intermediaries to scale <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, improve reliability and reduce latency. Intermediaries shall also be able to proactively update caches in real-time.</t>
          </li>
        </ol>
      </section>
      <section anchor="constraints">
        <name>Constraints</name>
        <t anchor="constraints-list">To the extent feasible, the Events Query:</t>
        <ol spacing="normal" type="1"><li anchor="constraint--reuse">
            <t>adheres to established practices and conventions. In particular, every attempt has been made to reuse existing protocols and specifications. Implementers shall be able to repurpose existing tools and libraries for implementing this specification.</t>
          </li>
          <li anchor="constraint--rest">
            <t>conforms to <xref format="title" target="REST"/>, best practices for <xref format="title" target="RFC9205"/> <xref target="RFC9205"/>, and <xref format="title" target="RFC6202"/> <xref target="RFC6202"/>. This specification can thus be used to extend the capabilities of any existing or future resource to additionally serve <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> over HTTP. This is to afford implementers the opportunity to scale <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> with their data and application.
<!--
  See my original comment on the solid/specification Gitter channel on 24 April 2020
  https://matrix.to/#/!PlIOdBsCTDRSCxsTGA:gitter.im/$VgCcuq2HbpLKJvxIw4witAUOsqcdhC98glgzqVI1WOY
-->
            </t>
          </li>
        </ol>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t anchor="in-scope">Events Query specifies a minimal protocol surface for transferring <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> over HTTP that includes:</t>
        <ol spacing="normal" type="1"><li anchor="scope--discovery">
            <t>A mechanism to discover support for Events Query on a resource (<xref target="discovery"/>).</t>
          </li>
          <li anchor="scope--request">
            <t>A mechanism to request <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from a resource (Sections <xref format="counter" target="single-notification-request"/> and <xref format="counter" target="stream-request"/>) along with the representation (<xref target="representation-request"/>).</t>
          </li>
          <li anchor="scope--query-data-model">
            <t>An abstract <iref item="data model"/><xref format="none" target="data-model">data model</xref> for requesting <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> (<xref target="data-model"/>).</t>
          </li>
          <li anchor="scope--single-response-semantics">
            <t>Response semantics for a <xref target="single-notification-response">single notification</xref>.</t>
          </li>
          <li anchor="scope--streaming-response-semantics">
            <t>Response semantics for a stream carrying the <xref target="representation-response">representation</xref> (if requested) and <xref target="stream-response">multiple event notifications</xref>.</t>
          </li>
        </ol>
      </section>
      <section anchor="out-of-scope">
        <name>Out of Scope</name>
        <section anchor="out-of-scope--event-semantics">
          <name>Event Semantics</name>
          <t anchor="no-event-semantics">Implementations require flexibility to generate <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> for the applications they wish to support on any given resource. It follows that the Events Query Protocol does not specify <iref item="event"/><xref format="none" target="event">event</xref> semantics, including:</t>
          <ol spacing="normal" type="1"><li anchor="no-event-semantics--specific-events">
              <t>The <iref item="event"/><xref format="none" target="event">events</xref> for which a <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> might be generated.</t>
            </li>
            <li anchor="no-event-semantics--notification-content">
              <t>The content of an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>.</t>
            </li>
          </ol>
          <t>Implementations can further provide mechanisms to filter the <iref item="event"/><xref format="none" target="event">events</xref> generating <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> or to select the content of <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>. Affordances for such mechanisms can be exposed to clients by extending the abstract <xref format="title" target="data-model"/> with additional specifications.</t>
        </section>
        <section anchor="out-of-scope--realizations">
          <name>Realizations and Formats</name>
          <t anchor="no-format">Since transferred data is subject to content negotiation between clients and server, the Events Query Protocol does not commit to a specific:</t>
          <ol spacing="normal" type="1"><li anchor="no-format--request-data-model">
              <t>Realization of the abstract <iref item="data model"/><xref format="none" target="data-model">data model</xref> (<xref target="data-model"/>) used for requesting <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
            </li>
            <li anchor="no-format--stream-representation">
              <t>Representation for the response stream encapsulating <xref target="stream-response">multiple event notifications</xref>.</t>
            </li>
            <li anchor="no-format--event-notification">
              <t>Form of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> within the response stream.</t>
            </li>
          </ol>
        </section>
        <section anchor="out-of-scope--temporal-coordination">
          <name>Temporal Coordination</name>
          <t anchor="no-sync"><iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">Event notifications</xref> are typically implemented along with temporal coordination mechanisms, ranging in complexity from resumability on reconnection to real-time state synchronization. Implementations adopt these mechanisms based on application requirements. For this reason, the Events Query Protocol itself does not specify temporal coordination across responses. Instead, implementations shall be able to extend the <xref format="title" target="data-model"/> with additional specifications that provide:</t>
          <ol spacing="normal" type="1"><li anchor="no-sync--versioning">
              <t>A scheme for versioning <iref item="event"/><xref format="none" target="event">events</xref> occurring on a resource.</t>
            </li>
            <li anchor="no-sync--replay">
              <t>Replay or resumption of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from a prior <iref item="event"/><xref format="none" target="event">event</xref>. This can, for example, help clients recover upon reconnection without refetching the representation.</t>
            </li>
            <li anchor="no-sync--representation">
              <t>Identification of resource representations, separate from <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, within the <xref target="representation-response">response stream</xref>. This is useful for a first fetch before a client starts receiving <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> or for periodic reconciliation during state synchronization.</t>
            </li>
            <li anchor="no-sync--merge-types">
              <t>The Conflict-free Replicated Data Types (CRDT) or Operational Transforms (OT) 
strategy to be implemented by a client for synchronizing the representation using <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="limitations">
        <name>Limitations</name>
        <t anchor="limitation--resource-specificity">Events Query only allows <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> to be sent for <iref item="event"/><xref format="none" target="event">events</xref> on a given resource. To transfer <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> originating from multiple resources in a single response, implementations will need to mint additional resources to serve as <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> endpoints. This is no different from APIs built on top of existing messaging protocols (see, for example, WebSocket <xref target="WS"/> and WebSub <xref target="WEBSUB"/>).</t>
        <t anchor="limitation--connection-limits">Browsers cap the number of persistent HTTP/1.1 connections per host, limiting the suitability of Events Query for web applications in the browser that require simultaneous <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from multiple resources on the same host. This limitation is identical to that of other HTTP-based streaming protocols, such as Server-Sent Events (<xref target="HTML"/>, Section 9.2). Implementations are strongly encouraged to adopt HTTP/2 (or later). HTTP/1.1 servers might consider setting up a reverse proxy over HTTP/2 (or later) or implement mitigation strategies, such as, maximizing the number of concurrent connections and providing alternate hosts for resources. Implementations might alternatively consider using endpoints to provide <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> for multiple resources as previously described. Clients on a browser requesting <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> over an HTTP/1.1 connection are advised to exercise caution when simultaneously opening multiple persistent connections to a given host.</t>
      </section>
      <section anchor="sse-comparison">
        <name>Comparison with Server-Sent Events</name>
        <t anchor="sse-defacto">At the time of writing, Server-Sent Events (SSE) has emerged as the de facto mechanism for transferring <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> over HTTP.</t>
        <t anchor="sse-standardization">Server-Sent Events is standardized as part of HTML Living Standard by the WHATWG<cref anchor="EventSource_Obsolecense">As of October 2022, HTML Living Standard maintainer Anne van Kesteren has <eref target="https://github.com/whatwg/html/issues/8297#issuecomment-1291658863">stated</eref> that WHATWG does not intend to extend the EventSource API, with reasons for the decision cited in a subsequent <eref target="https://github.com/whatwg/html/issues/8297#issuecomment-1291658863">comment</eref>.</cref> through the EventSource API (<xref target="HTML"/>, Section 9.2.2) on user agents and the <tt>text/event-stream</tt> media type (<xref target="HTML"/>, Section 17.7) to transmit <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. This approach is fundamentally inconsistent with terminology defined in HTTP Semantics (<xref section="3.2" sectionFormat="comma" target="HTTP"/>), transferring a sequence of asynchronous messages instead of a representation "intended to reflect a past, current, or desired state of a given resource". Practically, the <tt>text/event-stream</tt> media type being limited to only textual content forces developers to opt for alternative protocols such as WebSockets <xref target="WS"/>, despite the increased complexity. The EventSource API does not even allow for headers to be sent with requests.</t>
        <t anchor="sse-non-standard">This has led to a proliferation of non-standard implementations of Server-Sent Events<cref anchor="hacks">such as <eref target="https://www.npmjs.com/package/event-source-plus">this</eref>, <eref target="https://www.npmjs.com/package/@microsoft/fetch-event-source">this</eref>, <eref target="https://www.npmjs.com/package/fetch-event-stream">this</eref>, <eref target="https://www.npmjs.com/package/extended-eventsource">this</eref>, <eref target="https://www.npmjs.com/package/ngx-sse-client">this</eref> and <eref target="https://www.npmjs.com/package/sse.js">this</eref></cref> that provide support for custom headers, such as for sending credentials, or use the POST method to communicate additional configuration in the request body.</t>
        <t anchor="benefits-over-sse">Events Query takes a principled approach to <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, as established in <xref target="terminology"/>. In particular, the definition of an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> as a "representation" of <iref item="event"/><xref format="none" target="event">event</xref>(s) (<xref target="notification"/>) admits the use of arbitrary media types for <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. Clients can use content negotiation as well as preconditions in a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request. Further, Events Query not only lets clients receive both the representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> over the same protocol, viz. HTTP, but these can be encapsulated within a single HTTP response. Clients do not need to, say, authenticate multiple times, possibly with different mechanisms, to obtain data that is logically from the same resource. Clients also do not have to coordinate and synchronize multiple response streams carrying a representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> from the same effective resource.</t>
        <!-- Conformance Sections -->

</section>
    </section>
    <section anchor="conformance">
      <name>Conformance</name>
      <section anchor="document-conventions">
        <name>Document Conventions</name>
        <t anchor="non-normative">All examples and notes in this specification are non-normative.</t>
      </section>
      <section anchor="requirements-notation">
        <name>Requirements Notation</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<!-- Normative Sections -->

</section>
    </section>
    <section anchor="terminology">
      <name>Terminology and Core Concepts</name>
      <section anchor="event">
        <name>Event</name>
        <iref item="event" primary="true"/>
        <t anchor="event-defn">An event is the instantaneous effect of the (normal or abnormal) termination of the invocation of an operation on an object of interest <xref target="DESIGN-FRAMEWORK"/>. The entity invoking an operation is termed the <strong><iref item="invoker" primary="true"/>invoker</strong>.</t>
        <t anchor="events-in-HTTP">In the specific context of HTTP, the object of interest is data scoped to some resource. When the operation is an HTTP method, the <iref item="invoker"/>invoker is a user agent. However, an operation need not be limited to an HTTP method; it might just as easily have been invoked using another mechanism or protocol. Events are then an extension of resource state (see <xref section="3.2" sectionFormat="comma" target="HTTP"/>) in the temporal dimension.</t>
      </section>
      <section anchor="observation">
        <name>Observation</name>
        <iref item="observation" primary="true"/>
        <t anchor="observation-defn">An <iref item="event"/><xref format="none" target="event">event</xref> is considered observable, if an entity outside the <iref item="invoker"/>invoker and object of interest can detect its occurrence <xref target="DESIGN-FRAMEWORK"/>. This entity is the <strong><iref item="observer" primary="true"/>observer</strong>.</t>
        <t anchor="observer-in-HTTP">It follows from the HTTP uniform interface that the <iref item="observer"/>observer is always a server. The <iref item="event"/><xref format="none" target="event">events</xref> that are observed, the mechanism of observation, and information recorded from the <iref item="event"/><xref format="none" target="event">event</xref> are implementation details for the server.</t>
        <t anchor="observation-roles">That an origin server has to assume the role of an <iref item="observer"/>observer in order to generate <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> is obvious. An intermediary, while not observing the data scoped to a resource directly, still has the possibility to serve as an <iref item="observer"/>observer. An intermediary can observe <iref item="event"/><xref format="none" target="event">events</xref> transmitted by an origin server or another intermediary, whether using Events Query or another mechanism, to generate <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> for outbound consumers.</t>
      </section>
      <section anchor="notification">
        <name>Event Notification</name>
        <iref item="notification" primary="true"/><iref item="event notification" primary="true"/>
        <t anchor="notification-defn">An <iref item="notification"/>event notification, or <iref item="event notification"/>notification, is information transmitted by an <iref item="observer"/>observer upon an <iref item="event"/><xref format="none" target="event">event</xref> or contiguous <iref item="event"/><xref format="none" target="event">events</xref> on a resource.</t>
        <t anchor="notification-in-HTTP">Events Query extends "information hiding" behind the HTTP uniform interface to the temporal dimension by defining communication with respect to a transferable <iref item="event notification"/>notification of the resource <iref item="event"/><xref format="none" target="event">event</xref>(s), rather than transferring the <iref item="event"/><xref format="none" target="event">event</xref>(s) themselves.</t>
        <t anchor="notification-characteristics">A target resource might be capable of generating multiple <iref item="event notification"/>notifications for the same <iref item="event"/><xref format="none" target="event">event</xref>(s) that a <iref item="subscriber"/>subscriber can select from using content negotiation. Hypertext <iref item="event notification"/>notifications can not only provide information about the resource <iref item="event"/><xref format="none" target="event">events</xref> but also processing instructions that help guide the recipient's future actions, for example, the possibility to determine the current representation from a previous representation.</t>
      </section>
      <section anchor="subscription">
        <name>Subscription</name>
        <iref item="subscription" primary="true"/>
        <t anchor="subscription-defn">A subscription is an expression of interest to receive <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> sent to an <iref item="observer"/>observer. The requesting entity is a <strong><iref item="subscriber" primary="true"/>subscriber</strong>.</t>
        <t anchor="subscriber-in-HTTP">Due to the request/response semantics of HTTP, the <iref item="subscriber"/>subscriber coincides with the recipient of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> (<xref target="DESIGN-FRAMEWORK"/> uses the term <em>requester</em> or <em>broker</em> to identify a requesting entity, with the <em>broker</em> and <em>recipient</em> together forming the <iref item="subscriber"/>subscriber; for this specification, the distinction is not necessary).</t>
        <t anchor="subscription-conneg">The subscription in the form of a query affords the user agent the opportunity to engage in content negotiation for preferred form of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> (as well as the representation, if simultaneously requested).</t>
      </section>
    </section>
    <section anchor="events-field">
      <name><tt>Events</tt> Header Field</name>
      <iref item="events (header field)" primary="true"/>
      <t anchor="events-field-intro">"<tt>Events</tt>" is a Dictionary structured header field (<xref section="3.2" sectionFormat="comma" target="HTTP-SF"/>) to communicate the properties of a response stream to an Events Query.</t>
      <t anchor="events-field-request">In a request, the <tt>Events</tt> header field allows a client to indicate its preferences for the properties of the response stream carrying <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. The <tt>Events</tt> header field is not meant for content negotiation.</t>
      <t anchor="events-field-response">In a response, the <tt>Events</tt> header field allows a server to specify the properties of a response stream carrying <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
      <t anchor="events-field-stipulations">The order of keys in the <tt>Events</tt> header field is insignificant. Senders <bcp14>SHOULD NOT</bcp14> generate keys not registered with the HTTP Events Field Registry (the exception is only for experimentation). Recipients <bcp14>MAY</bcp14> ignore keys that they are unaware of.</t>
      <section anchor="duration-property">
        <name><tt>duration</tt> Property</name>
        <iref item="duration (property)" primary="true"/>
        <t anchor="duration-property-intro">The "<tt>duration</tt>" property is an Integer (<xref section="3.3.1" sectionFormat="comma" target="HTTP-SF"/>) or Decimal (<xref section="3.3.2" sectionFormat="comma" target="HTTP-SF"/>) valued Dictionary key specified on the <tt>Events</tt> header field to communicate the response duration in seconds. Only non-negative values are valid.</t>
        <t anchor="duration-property-request">In a request, the <tt>duration</tt> property indicates the duration for which a client wants to receive <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. A value of <tt>0</tt> indicates that the client does not have a preference for the response duration. A server <bcp14>MAY</bcp14> ignore this property.</t>
        <t anchor="duration-property-response">In a response, the <tt>duration</tt> property specifies the maximum duration for which a server intends to serve <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. This property is merely advisory, and a server <bcp14>MAY</bcp14> end the response before this duration.</t>
        <t anchor="duration-property-response-authz">A server <bcp14>SHOULD NOT</bcp14> set a response duration longer than the period for which an authorization is valid. This is to ensure that a server does not send <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> to clients after their authorization expires, while accommodating valid authorizations where the server is unable to determine the authorization period in advance. Once the request's authorization expires or is revoked, the server <bcp14>MUST NOT</bcp14> send any more <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
        <t anchor="duration-property-stipulations">A sender <bcp14>MUST</bcp14> conform to these stipulations when generating the <tt>duration</tt> property. If the value of the <tt>duration</tt> property fails to conform to these stipulations, it <bcp14>MUST</bcp14> be ignored by the recipient.</t>
      </section>
    </section>
    <section anchor="data-model">
      <name>Subscription Data Model</name>
      <iref item="data model" primary="true"/>
      <t anchor="data-model-description">The abstract data model specifies the semantics of an Events Query.</t>
      <t anchor="data-model-requirements">A realization of the data model allows a client to specify in a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request:</t>
      <ul spacing="normal">
        <li anchor="data-model-requirement-notifications">
          <t>an interest in receiving a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from a resource in a preferred form.</t>
        </li>
        <li anchor="data-model-requirement-representation">
          <t>an interest in receiving a representation of a resource in a preferred form.</t>
        </li>
      </ul>
      <t anchor="data-model-realization">Implementations can choose appropriate media types to realize the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> data model. Implementations are free to extend the data model to include additional data. A specific realization of the data model is beyond the scope of this specification (see <xref target="out-of-scope--realizations"/>).</t>
      <t anchor="data-model-example">The following example shows the body of a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request wherein the <tt>state</tt> and <tt>events</tt> properties are used to specify request headers for representation and <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> respectively in a YAML-like syntax.</t>
      <figure anchor="data-model-example-yaml">
        <name>Events Query Data Model in a YAML-like syntax</name>
        <sourcecode name="data-model-example.yaml" type="yaml"><![CDATA[
state:
  Accept: text/html
events:
  Accept: example/event-notification
]]></sourcecode>
      </figure>
    </section>
    <section anchor="discovery">
      <name>Discovery</name>
      <t anchor="discovery-requirement">A user agent can discover if a server enables Events Query on a resource by examining support for query with a media type that can realize the <xref format="title" target="data-model"/>. A server <bcp14>MUST</bcp14> advertise media types accepted for Events Query using the <tt>Accept-Query</tt> header field (<xref section="3" sectionFormat="comma" target="HTTP-QUERY"/>) in a response.</t>
      <figure anchor="discovery-request-example">
        <name>Discovery Request</name>
        <sourcecode name="discovery-request-example.http" type="http-message"><![CDATA[
HEAD /foo HTTP/1.1
Host: example.org

]]></sourcecode>
      </figure>
      <figure anchor="discovery-response-example">
        <name>Discovery Response</name>
        <sourcecode name="discovery-response-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:00:00 GMT
Accept: text/html
Accept-Query: "example/events-query"
]]></sourcecode>
      </figure>
      <aside anchor="no-events-long-lived-resources">
        <t><strong>Implementation Advice</strong></t>
        <t>Servers are advised against enabling <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> on long-lived resources over HTTP. A resource might be considered long-lived if a server determines a low probability of an <iref item="event"/><xref format="none" target="event">event</xref> on the resource in the duration of the response. In such instances, servers are strongly advised to respond with the <tt>Cache-Control</tt> (<xref section="5" sectionFormat="comma" target="HTTP-CACHING"/>) header field and the <tt>max-age</tt> parameter (<xref section="5.2.2.1" sectionFormat="comma" target="HTTP-CACHING"/>) set in it.</t>
      </aside>
    </section>
    <section anchor="single-notification">
      <name>Single Notification</name>
      <t anchor="single-notification-description">The simplest Events Query is to request a <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> for the next <iref item="event"/><xref format="none" target="event">event</xref>(s) on a resource. This, in effect, adds long polling capability (<xref section="2" sectionFormat="comma" target="RFC6202"/>) to a resource.</t>
      <section anchor="single-notification-request">
        <name>Request</name>
        <t anchor="single-notification-request-procedure">To receive a single <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref>, a client <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li anchor="single-notification-request-procedure--data-model">
            <t>send a realization of the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> <iref item="data model"/><xref format="none" target="data-model">data model</xref> that does not include an interest in receiving a stream of <iref item="event"/><xref format="none" target="event">event</xref> <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>,</t>
          </li>
          <li anchor="single-notification-request-procedure--method">
            <t>using the <tt>QUERY</tt> method (<xref section="2" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
          </li>
        </ul>
        <t anchor="single-notification-request-conneg">Since the content of the response is an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>, a client can negotiate its form with header fields in the usual manner.</t>
        <figure anchor="single-notification-request-example">
          <name>Single Event Notification Request</name>
          <sourcecode name="single-notification-request-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: example/event-notification
Content-Type: example/events-query
Events: duration=0

‑‑‑
]]></sourcecode>
        </figure>
      </section>
      <section anchor="single-notification-response">
        <name>Response</name>
        <t anchor="single-notification-response-end">When a single <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> is requested, the server <bcp14>MUST</bcp14> end the response immediately after sending the <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>.</t>
        <figure anchor="single-notification-response-example">
          <name>Single Event Notification Response</name>
          <sourcecode name="single-notification-response-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:10:10 GMT
Accept-Query: example/events-query
Content-Type: example/event-notification
Events: duration=240
Incremental: ?1

published: 2025-01-02T10:11:12.345Z
event-id: 456
type: update
]]></sourcecode>
        </figure>
        <t>​</t>
        <aside anchor="no-hogging">
          <t><strong>Implementation Advice</strong></t>
          <t>When a user navigates away from a website or an application using Events Query, user agents are strongly encouraged to promptly abort the response stream, freeing connection resources at both the client and the server.</t>
        </aside>
      </section>
    </section>
    <section anchor="stream">
      <name>Notifications Stream</name>
      <t anchor="stream-description">Events Query can also be used to request a stream of multiple <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> (<xref section="3" sectionFormat="comma" target="RFC6202"/>).</t>
      <section anchor="stream-request">
        <name>Request</name>
        <t anchor="stream-request-procedure">To receive multiple <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>, a client <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li anchor="stream-request-procedure--data-model">
            <t>send a realization of the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> <iref item="data model"/><xref format="none" target="data-model">data model</xref> that includes an interest in receiving a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> in a preferred form,</t>
          </li>
          <li anchor="stream-request-procedure--method">
            <t>using the QUERY method (<xref section="2" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
          </li>
        </ul>
        <t anchor="stream-request-conneg">Since the response transmits <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> within an encapsulating representation (<xref target="stream-response"/>), it follows that header fields cannot be used to negotiate the form of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> as in the case of <xref target="single-notification-request">Single Notification Request</xref>. Instead, header fields are useful for negotiating the representation that encapsulates <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. The following examples illustrate <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> requests that negotiate a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> to be transferred respectively using a composite media type (<tt>multipart/mixed</tt>) and a discrete media type (<tt>application/json-seq</tt>):</t>
        <t anchor="stream-request-multipart">The first example shows a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request for effectively a stream of discrete <xref target="single-notification">Single Notifications</xref> to be transferred using <tt>multipart/mixed</tt> (<xref section="5.1.3" sectionFormat="comma" target="RFC2046"/>) as the encapsulating media type. The <tt>events</tt> property in this example indicates an interest in receiving <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> and its sub-properties describe the preferred form of <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>. Since the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> are transferred as a pipeline of HTTP messages, these sub-properties are identical to <xref target="single-notification-request-conneg">header fields</xref> used for specifying preconditions and content negotiation in a <xref target="single-notification-request">Single Notification Request</xref>.</t>
        <figure anchor="stream-request-multipart-example">
          <name>Request for Multipart Notifications Stream</name>
          <sourcecode name="stream-request-multipart-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: multipart/mixed
Content-Type: example/events-query
Events: duration=0

events:
  Accept: example/event-notification
]]></sourcecode>
        </figure>
        <t anchor="stream-request-json">The second example shows a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request for a stream of JSON <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> to be transferred using <tt>application/json-seq</tt> (<xref target="RFC7464"/>) as the encapsulating media type. The <tt>events</tt> property in this example is being used to communicate the preferred schema for the requested <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
        <figure anchor="stream-request-json-example">
          <name>Request for JSON Notifications Stream</name>
          <sourcecode name="stream-request-json-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: application/json-seq
Content-Type: example/events-query
Events: duration=0

events:
  @context: activity+json
]]></sourcecode>
        </figure>
      </section>
      <section anchor="stream-response">
        <name>Response</name>
        <t anchor="stream-response-encapsulation">The response stream transmits multiple <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> in an encapsulating media type. The following illustrates <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> streamed in both a composite media type (<tt>multipart/mixed</tt>) and a discrete media type (<tt>application/json-seq</tt>) in response to the example <xref target="stream-request">requests</xref> in <xref target="stream-request"/>.</t>
        <section anchor="stream-response-headers">
          <name>Headers</name>
          <t anchor="stream-response-headers-list">A server able to provide a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> <bcp14>MUST</bcp14> immediately send headers, which include:</t>
          <ul spacing="normal">
            <li anchor="stream-response-events-field">
              <t>The <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> header field, to communicate the properties of the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> stream.  </t>
              <ul spacing="normal">
                <li anchor="stream-response-duration-property">
                  <t>The <iref item="duration (property)"/><xref format="none" target="duration-property"><tt>duration</tt></xref> property, set to the maximum duration for which the server intends to serve <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
                </li>
              </ul>
            </li>
            <li anchor="stream-response-incremental-field">
              <t>The <tt>Incremental</tt> header field (<xref section="3" sectionFormat="comma" target="INCREMENTAL-HTTP-MESSAGES"/>) set to <tt>?1</tt> to indicate that the response is to be immediately forwarded by intermediaries and not buffered.</t>
            </li>
          </ul>
          <figure anchor="stream-response-headers-example">
            <name>Notifications Stream Response Headers</name>
            <sourcecode name="stream-response-headers-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:10:10 GMT
Accept-Query: example/events-query
Events: duration=600
Incremental: ?1
Transfer-Encoding: chunked
]]></sourcecode>
          </figure>
          <t anchor="stream-response-multipart-content-type-field">The <tt>Content-Type</tt> header field in response to the request in the first example is:</t>
          <figure anchor="stream-response-multipart-content-header-example">
            <name>Notifications Stream Multipart Content Response Header</name>
            <sourcecode name="stream-response-multipart-content-header-example.http" type="http-message"><![CDATA[
Content-Type: multipart/mixed; boundary="THIS_STRING_SEPARATES"

]]></sourcecode>
          </figure>
          <t anchor="stream-response-json-content-type-field">whereas in response to the request in the second example is:</t>
          <figure anchor="stream-response-json-content-header-example">
            <name>Notifications Stream JSON Content Response Headers</name>
            <sourcecode name="stream-response-json-content-header-example.http" type="http-message"><![CDATA[
Content-Type: application/json-seq

]]></sourcecode>
          </figure>
        </section>
        <section anchor="stream-response-body">
          <name>Notifications</name>
          <t anchor="stream-response-event">Subsequently, when <iref item="event"/><xref format="none" target="event">event</xref>(s) occur, the server transmits a <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref>.</t>
          <t anchor="stream-update-event-multipart">An <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> transferred in a <tt>multipart/mixed</tt> response stream is identical to the <xref target="single-notification-response">Single Notification Response</xref>, except that non "Content-*" fields are excluded as required by <xref section="5.1" sectionFormat="comma" target="RFC2046"/>:</t>
          <figure anchor="stream-update-notification-multipart-example">
            <name>Multipart Update Notification</name>
            <sourcecode name="stream-update-notification-multipart-example.http" type="http-message"><![CDATA[
--THIS_STRING_SEPARATES
Content-Length: 31                               | Notification
Content-Type: example/event-notification         |
                                                 |
published: 2025-01-02T10:11:12.345Z              |
event-id: 456                                    |
type: update                                     |
]]></sourcecode>
          </figure>
          <t anchor="stream-update-event-json">The same <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> when transferred in an <tt>application/json-seq</tt> response stream is as follows:</t>
          <figure anchor="stream-update-notification-json-example">
            <name>JSON Update Notification</name>
            <artwork name="stream-update-notification-json-example.http"><![CDATA[
␞{                                              | Notification
  "published": "2025-01-02T10:11:12.345Z",       |
  "event-id": 456,                               |
  "type": "update"                               |
}                                                |
]]></artwork>
          </figure>
          <t anchor="stream-response-terminal-event">A server <bcp14>MUST</bcp14> end the response immediately after transmitting the <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> that signals the deletion of a resource.</t>
          <t anchor="stream-delete-event-multipart">The <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> for a delete <iref item="event"/><xref format="none" target="event">event</xref> expressed inside a multipart message might be as follows:</t>
          <figure anchor="stream-delete-event-multipart-example">
            <name>Multipart Delete Notification</name>
            <sourcecode name="stream-delete-notification-multipart-example.http" type="http-message"><![CDATA[
--THIS_STRING_SEPARATES
Content-Length: 31                               | Notification
Content-Type: example/event-notification         |
                                                 |
published: 2025-01-02T11:12:13.456Z              |
event-id: 789                                    |
type: delete                                     |
--THIS_STRING_SEPARATES--
]]></sourcecode>
          </figure>
          <t anchor="stream-delete-event-json">The same <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> for a delete <iref item="event"/><xref format="none" target="event">event</xref> as JSON would be as follows:</t>
          <figure anchor="stream-delete-event-json-example">
            <name>JSON Delete Notification</name>
            <artwork name="stream-delete-notification-json-example.http"><![CDATA[
␞{                                              | Notification
  "published": "2025-01-02T11:12:13.456Z",       |
  "event-id": 789,                               |
  "type": "delete"                               |
}                                                |
]]></artwork>
          </figure>
          <t anchor="stream-response-timeout">Otherwise, a server <bcp14>MUST</bcp14> end the response when the connection duration exceeds the period set in the <iref item="duration (property)"/><xref format="none" target="duration-property"><tt>duration</tt></xref> property of the <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> header field.</t>
        </section>
      </section>
    </section>
    <section anchor="representation">
      <name>Representation</name>
      <t anchor="representation-description">Events Query enables a user agent to ask and receive the current representation and subsequent <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> in a single request/response. When compared to using, say, Fetch <xref target="FETCH"/> and EventSource (<xref target="HTML"/>, Section 9.2.2) in conjunction, Events Query not only saves on an extra round trip, but also relieves a user agent from the burden of synchronizing the representation with <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
      <section anchor="representation-request">
        <name>Request</name>
        <t anchor="representation-request-procedure">To receive a representation of the resource alongside <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>, a client <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li anchor="representation-request-procedure--data-model">
            <t>send a realization of the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> <iref item="data model"/><xref format="none" target="data-model">data model</xref> that includes an interest in receiving a stream containing:  </t>
            <ul spacing="normal">
              <li anchor="representation-request-procedure--data-model-representation">
                <t>the representation(s) in a preferred form, and</t>
              </li>
              <li anchor="representation-request-procedure--data-model-notifications">
                <t><iref item="event"/><xref format="none" target="event">event</xref> <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> in a preferred form,</t>
              </li>
            </ul>
          </li>
          <li anchor="representation-request-procedure--method">
            <t>using the <tt>QUERY</tt> method (<xref section="2" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
          </li>
        </ul>
        <t anchor="representation-request-example-description">The following example shows a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request for the current representation along with the subsequent <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> transmitted using the <tt>multipart/mixed</tt> media type. The <tt>state</tt> property indicates interest in receiving representation and its sub-properties describe the preferred form of <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>. Since the representation is being transferred in an HTTP message pipeline, these sub-properties are identical to header fields used for specifying preconditions and content negotiation in a GET request on the said resource.</t>
        <figure anchor="representation-request-multipart-example">
          <name>HTTP Representation and Notifications Request</name>
          <sourcecode name="representation-request-multipart-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: multipart/mixed
Content-Type: example/events-query
Events: duration=0

state:
  Accept: text/html
events:
  Accept: example/event-notification
]]></sourcecode>
        </figure>
      </section>
      <section anchor="representation-response">
        <name>Response</name>
        <t anchor="representation-not-available">A server unable to provide a representation <bcp14>MUST NOT</bcp14> serve <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. This does not apply to a conditional request for representation that is not fulfilled.</t>
        <t anchor="representation-response-body">A server able to provide a stream with a representation and <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> transmits the representation immediately following the response headers (<xref target="stream-response-headers"/>). Otherwise, the response is the same as that described in <xref target="stream-response"/>.</t>
        <t anchor="representation-response-encapsulation">Again, the <tt>multipart-mixed</tt> media type (<xref section="5.1.3" sectionFormat="comma" target="RFC2046"/>) is used for the purpose of illustration. Chunks have been omitted for clarity.</t>
        <figure anchor="representation-response-before-notifications-multipart-example">
          <name>Representation Response before Notifications</name>
          <sourcecode name="representation-response-before-notifications-multipart-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:10:10 GMT
Accept-Query: example/events-query
Events: duration=600
Incremental: ?1
Transfer-Encoding: chunked
Content-Type: multipart/mixed; boundary="THIS_STRING_SEPARATES"

--THIS_STRING_SEPARATES                                 
Content-Length: 14                               | Representation
Content-Type: text/plain                         |
                                                 |
Hello World!                                     |
]]></sourcecode>
        </figure>
        <t anchor="representation-response-non-standard">While this is default behavior, there is no requirement that a representation is the first message or that representations are sent only once. In such cases, the encapsulated message needs to indicate if it is a representation and not an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>. Such a mechanism is beyond the scope of this specification (see <xref target="out-of-scope--temporal-coordination"/>).</t>
        <t anchor="representation-response-notifications"><iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">Notifications</xref> are transmitted just as in the case of <xref target="stream-response">regular streaming</xref>. See <xref target="example-representation"/> for a complete example of a response with representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
        <!-- Considerations Sections -->

</section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <section anchor="express-demo">
        <name>Express Demo</name>
        <t anchor="express-demo-intro">A toy server built in Express.js demonstrating the Events Query Protocol is available at <eref target="https://github.com/CxRes/events-query-express-demo"/>. This demo is powered by the following libraries:</t>
        <ul spacing="normal">
          <li anchor="express-demo-lib--negotiate-events-field">
            <t><eref target="https://github.com/CxRes/negotiate-events-field">Negotiate Events Field</eref>: To read the request <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> header field (<xref target="events-field"/>) and negotiate the response <iref item="duration (property)"/><xref format="none" target="duration-property"><tt>duration</tt></xref> (<xref target="duration-property"/>),</t>
          </li>
          <li anchor="express-demo-lib--nose">
            <t><eref target="https://github.com/CxRes/nose">NOSE</eref>: To <iref item="observation"/>observe <iref item="event"/><xref format="none" target="event">events</xref> on resources and generate <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> in a preferred format, and</t>
          </li>
          <li anchor="express-demo-lib--extended-response">
            <t><eref target="https://github.com/CxRes/extended-response">Extended Response</eref>: To write the representation and <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> on the response stream for a given <iref item="duration (property)"/><xref format="none" target="duration-property"><tt>duration</tt></xref> (<xref target="duration-property"/>).</t>
          </li>
        </ul>
        <t anchor="express-demo-license">The demonstration and libraries are Free and Open Source Software, released under the Mozilla Public License, v. 2.0. Please contact the author for more information about these programs.</t>
      </section>
      <section anchor="camara-api-demo">
        <name>CAMARA API Demo</name>
        <t>A second, independent implementation by Jaime Jiménez that applies Events Query in an agent-ready mock for the <eref target="https://camaraproject.org">CAMARA (Global Telco API Alliance)</eref> HTTP APIs is available at <eref target="https://camara.jaime.win"/>. The CAMARA sandbox uses Events Query to notify clients of SIM-swaps. An agent can observe changes to the SIM-swap state in-band as a JSON Sequence by sending a QUERY request to a resource, rather than setting up a separate Webhooks <iref item="subscription"/><xref format="none" target="subscription">subscription</xref>.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t anchor="derived-security-considerations">Events Query is subject to the security considerations of the HTTP <tt>QUERY</tt> method (<xref section="2" sectionFormat="comma" target="HTTP-QUERY"/>) and more generally HTTP Semantics. Considerations relevant to the use of HTTP <tt>QUERY</tt> method are discussed in <xref section="4" sectionFormat="of" target="HTTP-QUERY"/>. HTTP Semantics and its use for transferring information over the Internet are discussed in <xref section="17" sectionFormat="of" target="HTTP"/>.</t>
      <t anchor="security-considerations-ddos">When serving <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, servers are required to keep the response stream open for an extended period of time. Since the effort required to request <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> is tiny compared to the time, memory, and bandwidth consumed attempting to serve the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>, servers implementing Events Query have increased susceptibility to Denial-of-Service attacks. Servers ought to ignore, coalesce, or reject egregious <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> requests, such as repeated requests from the same origin within a short interval of time.</t>
      <t anchor="security-considerations-authz">Resource authorization can change during the lifetime of a response. A server that enforces access control on a resource must ensure that it does not transmit <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> once the authorization carried by the request has expired or been revoked. If the authorization can be revoked mid-response, the server must check the validity of the authorization before each <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> is sent and immediately end the response upon discovering that the authorization is invalid.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t anchor="change-controller">The change controller for the following registrations is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</t>
      <section anchor="field-registration">
        <name>HTTP Field Registration</name>
        <t anchor="field-registration-instruction">IANA is requested to add the following entry in the "<eref target="https://www.iana.org/assignments/http-fields/">Hypertext Transfer Protocol (HTTP) Field Name Registry</eref>" (see <xref section="16.1.1" sectionFormat="of" target="HTTP"/>):</t>
        <table anchor="field-registration-list">
          <name>List of HTTP Field Name registrations</name>
          <thead>
            <tr>
              <th align="left">Header Field Names</th>
              <th align="left">Status</th>
              <th align="left">Structured-Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref></td>
              <td align="left">Permanent</td>
              <td align="left">Dictionary</td>
              <td align="left">
                <xref target="events-field"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="events-field-registry">
        <name>The HTTP Events Field Registry</name>
        <t anchor="registry-registration-instruction">IANA is requested to create a new registry, "HTTP Events Field Registry", under the <eref target="https://www.iana.org/assignments/http-parameters/">Hypertext Transfer Protocol (HTTP) Parameters</eref> registry to register properties for use in the <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> header field. New registrations will use the Specification Required policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>).</t>
        <section anchor="events-field-registry-template">
          <name>Template</name>
          <t anchor="events-field-registry-template-required-list">The registration of an <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> property <bcp14>MUST</bcp14> include the following fields:</t>
          <ul spacing="normal">
            <li anchor="events-field-registry-template--property-name">
              <t>Property Name: A Dictionary (<xref section="3.2" sectionFormat="comma" target="HTTP-SF"/>) key to be used in the <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> header field.</t>
            </li>
            <li anchor="events-field-registry-template--structured-type">
              <t>Structured Type: The Structured Data Type (<xref section="3.3" sectionFormat="comma" target="HTTP-SF"/>) of the value associated with the key, according to requirements in <xref section="3.2" sectionFormat="of" target="HTTP-SF"/>.</t>
            </li>
            <li anchor="events-field-registry-template--reference">
              <t>Reference: A pointer to the specification text.</t>
            </li>
          </ul>
          <t anchor="events-field-registry-template-optional-list">The registration <bcp14>MAY</bcp14> also include the following fields:</t>
          <ul spacing="normal">
            <li anchor="events-field-registry-template--optional-parameters">
              <t>Optional Parameters: An enumeration of optional parameters and the Structured Data Type (<xref section="3.3" sectionFormat="of" target="HTTP-SF"/>) of value associated with the parameter, according to requirements in <xref section="3.1.2" sectionFormat="of" target="HTTP-SF"/></t>
            </li>
            <li anchor="events-field-registry-template--comments">
              <t>Comments: Additional information to be included in the template.</t>
            </li>
          </ul>
        </section>
        <section anchor="events-field-registry-initial-content">
          <name>Initial Registry Contents</name>
          <t anchor="events-field-registry-initial-content-instruction">The initial contents of the HTTP Events Field Registry are:</t>
          <table anchor="events-property-registration-list">
            <name>List of HTTP Events Field property name registrations</name>
            <thead>
              <tr>
                <th align="left">Property Name</th>
                <th align="left">Structured-Type</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <iref item="duration (property)"/><xref format="none" target="duration-property"><tt>duration</tt></xref></td>
                <td align="left">Integer or Decimal Item</td>
                <td align="left">
                  <xref target="duration-property"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section anchor="end-user-considerations">
      <name>End User Considerations</name>
      <t><cref anchor="End_User">"The mission of the IETF is to produce high quality, relevant technical and engineering documents that influence the way people design, use, and manage the Internet in such a way as to make the Internet work better" <xref target="RFC3935"/>. The mission statement further goes on to state, "We want the Internet to be useful for communities that share our commitment to openness and fairness. We embrace technical concepts such as decentralized control, edge-user empowerment and sharing of resources, because those concepts resonate with the core values of the IETF community." <xref target="RFC3935"/>. The Internet Architecture Board says that the "Internet is for end users" and "argues that the IETF should favor their interests over those of other parties" <xref target="RFC8890"/>. It logically follows that technical documents produced by the IETF ought to consider their impact on the Internet end user. For this reason, I suggest that specifications include a considerations section where authors assess the technical decisions and trade-offs in their proposals based on their ramifications on the interests of end users.</cref></t>
      <t anchor="end-user-classification">End users of the HTTP protocol can be classified into two groups: publishers and consumers. Consumers have an incentive to subscribe to <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from many resources and to hold on to a connection for as long as possible; whereas publishers bear the cost of server infrastructure. Consumers also typically outnumber publishers, in many cases by multiple orders of magnitude. This creates an imbalance in the effort to subscribe versus effort to deliver; consumers can easily place a disproportionate burden on servers, reminiscent of a denial-of-service attack.</t>
      <t anchor="end-user-filter">At the outset, requiring that clients subscribe to <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> per resource serves as an effective filtering mechanism that limits the burden on servers. Compare this to the typical implementation of protocols such as WebSockets <xref target="WS"/>, where clients connect to dedicated endpoints to receive <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>; the server either has to broadcast <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> for multiple resources or track resources of interest for each client to filter <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> accordingly.</t>
      <t anchor="end-user-server-sets-limits">Events Query empowers servers to decide, for any given resource, the <iref item="event"/><xref format="none" target="event">events</xref> for which <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> are served and the content of the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>. Servers are able to choose the duration for which they wish to serve <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> and are also free to end the response at any time. Servers implementing Events Query might, thus, be able to offer differentiated service to consumers. Authenticated consumers, for example, might be asked to share the cost burden with publishers in return for a higher quality of service.</t>
      <t anchor="end-user-intermediation">The use of HTTP Semantics also enables intermediation of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, unlike existing mechanisms built with protocols such as WebSockets <xref target="WS"/> or WebSub <xref target="WEBSUB"/>. Intermediaries can help with improving the latency and reliability of transmission of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> as well as scaling of the <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> traffic to reach a significantly larger base of consumers. On the flip side, economies of scale will likely lead to greater consolidation of intermediary service providers (though not centralization) with the attendant risk of anti-consumer behavior. In the opinion of the authors, policies designed to treat network traffic as a public utility might provide better outcomes for the end user.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="HTTP">
          <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="HTTP-SF">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </reference>
        <reference anchor="HTTP-QUERY">
          <front>
            <title>The HTTP QUERY Method</title>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <author fullname="J.M. Snell" initials="J.M." surname="Snell"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <date month="June" year="2026"/>
            <abstract>
              <t>This specification defines the QUERY method for HTTP. A QUERY requests that the request target process the enclosed content in a safe and idempotent manner and then respond with the result of that processing. This is similar to POST requests, but QUERY requests can be automatically repeated or restarted without concern for partial state changes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="10008"/>
          <seriesInfo name="DOI" value="10.17487/RFC10008"/>
        </reference>
        <reference anchor="INCREMENTAL-HTTP-MESSAGES">
          <front>
            <title>Incremental Forwarding of HTTP Messages</title>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   This document specifies the "Incremental" HTTP header field, which
   instructs HTTP intermediaries to forward the HTTP message
   incrementally.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-incremental-04"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="COMET" target="https://infrequently.org/2006/03/comet-low-latency-data-for-the-browser/">
          <front>
            <title>Comet: Low Latency Data for the Browser</title>
            <author fullname="Alex Russell" initials="A." surname="Russell">
              <organization/>
            </author>
            <date month="March" year="2006"/>
          </front>
          <refcontent>Infrequently Noted</refcontent>
        </reference>
        <reference anchor="DESIGN-FRAMEWORK">
          <front>
            <title>A design framework for Internet-scale event observation and notification</title>
            <author fullname="David S. Rosenblum" initials="D." surname="Rosenblum">
              <organization>Dept. of Info. &amp;amp; Computer Science, University of California, Irvine, Irvine, CA</organization>
            </author>
            <author fullname="Alexander L. Wolf" initials="A." surname="Wolf">
              <organization>Dept. of Computer Science, University of Colorado, Boulder, CO</organization>
            </author>
            <date month="November" year="1997"/>
          </front>
          <seriesInfo name="ACM SIGSOFT Software Engineering Notes" value="vol. 22, no. 6, pp. 344-360"/>
          <seriesInfo name="DOI" value="10.1145/267896.267920"/>
          <refcontent>Association for Computing Machinery (ACM)</refcontent>
        </reference>
        <reference anchor="FETCH" target="https://fetch.spec.whatwg.org">
          <front>
            <title>Fetch</title>
            <author fullname="WHATWG" initials="" surname="WHATWG">
              <organization/>
            </author>
            <date month="May" year="2025"/>
          </front>
          <seriesInfo name="WHATWG" value="Living Standard"/>
        </reference>
        <reference anchor="HTML" target="https://html.spec.whatwg.org">
          <front>
            <title>HTML</title>
            <author fullname="WHATWG" initials="" surname="WHATWG">
              <organization/>
            </author>
            <date month="April" year="2026"/>
          </front>
          <seriesInfo name="WHATWG" value="Living Standard"/>
        </reference>
        <reference anchor="HTTP-CACHING">
          <front>
            <title>HTTP Caching</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 defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="REST" target="https://roy.gbiv.com/pubs/dissertation/rest_arch_style.htm">
          <front>
            <title>Representational State Transfer (REST)</title>
            <author fullname="Roy Thomas Fielding" initials="R." surname="Fielding">
              <organization>University of California, Irvine</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="Doctoral Dissertation" value="University of California, Irvine"/>
          <format target="https://roy.gbiv.com/pubs/dissertation/fielding_dissertation.pdf#G16.1026811" type="PDF"/>
          <refcontent>Chapter 5, Architectural Styles and the Design of Network-based Software Architectures</refcontent>
        </reference>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC3935">
          <front>
            <title>A Mission Statement for the IETF</title>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
            <date month="October" year="2004"/>
            <abstract>
              <t>This memo gives a mission statement for the IETF, tries to define the terms used in the statement sufficiently to make the mission statement understandable and useful, argues why the IETF needs a mission statement, and tries to capture some of the debate that led to this point. 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="95"/>
          <seriesInfo name="RFC" value="3935"/>
          <seriesInfo name="DOI" value="10.17487/RFC3935"/>
        </reference>
        <reference anchor="RFC6202">
          <front>
            <title>Known Issues and Best Practices for the Use of Long Polling and Streaming in Bidirectional HTTP</title>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="S. Salsano" initials="S." surname="Salsano"/>
            <author fullname="G. Wilkins" initials="G." surname="Wilkins"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>On today's Internet, the Hypertext Transfer Protocol (HTTP) is often used (some would say abused) to enable asynchronous, "server- initiated" communication from a server to a client as well as communication from a client to a server. This document describes known issues and best practices related to such "bidirectional HTTP" applications, focusing on the two most common mechanisms: HTTP long polling and HTTP streaming. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6202"/>
          <seriesInfo name="DOI" value="10.17487/RFC6202"/>
        </reference>
        <reference anchor="RFC7464">
          <front>
            <title>JavaScript Object Notation (JSON) Text Sequences</title>
            <author fullname="N. Williams" initials="N." surname="Williams"/>
            <date month="February" year="2015"/>
            <abstract>
              <t>This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type "application/json-seq". A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7464"/>
          <seriesInfo name="DOI" value="10.17487/RFC7464"/>
        </reference>
        <reference anchor="RFC7838">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="RFC8890">
          <front>
            <title>The Internet is for End Users</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document explains why the IAB believes that, when there is a conflict between the interests of end users of the Internet and other parties, IETF decisions should favor end users. It also explores how the IETF can more effectively achieve this.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8890"/>
          <seriesInfo name="DOI" value="10.17487/RFC8890"/>
        </reference>
        <reference anchor="RFC9205">
          <front>
            <title>Building Protocols with HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>Applications often use HTTP as a substrate to create HTTP-based APIs. This document specifies best practices for writing specifications that use HTTP to define new application protocols. It is written primarily to guide IETF efforts to define application protocols using HTTP for deployment on the Internet but might be applicable in other situations.</t>
              <t>This document obsoletes RFC 3205.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="56"/>
          <seriesInfo name="RFC" value="9205"/>
          <seriesInfo name="DOI" value="10.17487/RFC9205"/>
        </reference>
        <reference anchor="WEBSUB" target="https://www.w3.org/TR/websub/">
          <front>
            <title>WebSub</title>
            <author/>
          </front>
          <seriesInfo name="W3C REC" value="websub"/>
          <seriesInfo name="W3C" value="websub"/>
        </reference>
        <reference anchor="WS" target="https://www.w3.org/TR/websockets/">
          <front>
            <title>The WebSocket API</title>
            <author/>
          </front>
          <seriesInfo name="W3C NOTE" value="websockets"/>
          <seriesInfo name="W3C" value="websockets"/>
        </reference>
      </references>
    </references>
    <?line 897?>

<section anchor="examples">
      <name>Examples</name>
      <t anchor="example-intro">Some examples used in this specification are consolidated below. Chunks have been omitted for clarity.</t>
      <section anchor="example-representation">
        <name>Representation and Notifications</name>
        <t anchor="example-representation-description">The following example illustrates a complete request and response for representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> transferred with the <tt>multipart/mixed</tt> media-type as described in <xref target="representation"/>:</t>
        <section anchor="example-multipart-representation-request">
          <name>Request</name>
          <figure anchor="representation-request-multipart-complete-example">
            <name>Request for Representation and Notifications</name>
            <sourcecode name="representation-request-multipart-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: multipart/mixed
Content-Type: example/events-query
Events: duration=0

state:
  Accept: text/html
events:
  Accept: example/event-notification
]]></sourcecode>
          </figure>
        </section>
        <section anchor="example-multipart-representation-response">
          <name>Response</name>
          <figure anchor="representation-response-multipart-complete-example">
            <name>Response with Representation and Notifications</name>
            <sourcecode name="representation-response-multipart-complete-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:10:10 GMT
Accept-Query: example/events-query
Events: duration=600
Incremental: ?1
Transfer-Encoding: chunked
Content-Type: multipart/mixed; boundary="THIS_STRING_SEPARATES"

--THIS_STRING_SEPARATES                                 
Content-Length: 14                               | Representation
Content-Type: text/plain                         |
                                                 |
Hello World!                                     |

--THIS_STRING_SEPARATES
Content-Length: 31                               | Notification
Content-Type: example/event-notification         |
                                                 |
published: 2025-01-02T10:11:12.345Z              |
event-id: 456                                    |
type: update                                     |

--THIS_STRING_SEPARATES
Content-Length: 31                               | Notification
Content-Type: example/event-notification         |
                                                 |
published: 2025-01-02T11:12:13.456Z              |
event-id: 789                                    |
type: delete                                     |
--THIS_STRING_SEPARATES--
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="example-stream">
        <name>Notifications Stream</name>
        <t anchor="example-stream-description">The following example illustrates complete request and response for JSON formatted <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> transferred with the <tt>application/json-seq</tt> media-type as described in <xref target="stream"/>:</t>
        <section anchor="example-json-stream-request">
          <name>Request</name>
          <figure anchor="stream-request-json-complete-example">
            <name>Request for JSON Notifications</name>
            <sourcecode name="stream-request-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: application/json-seq
Content-Type: example/events-query
Events: duration=0

events:
  @context: activity+json
]]></sourcecode>
          </figure>
        </section>
        <section anchor="example-json-stream-response">
          <name>Response</name>
          <figure anchor="stream-response-json-complete-example">
            <name>Response with JSON Notifications</name>
            <sourcecode name="stream-response-json-complete-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:10:10 GMT
Accept-Query: example/events-query
Events: duration=600
Incremental: ?1
Transfer-Encoding: chunked
Content-Type: application/json-seq

␞{                                              | Notification
  "published": "2025-01-02T10:11:12.345Z",       |
  "event-id": 456,                               |
  "type": "update"                               |
}                                                |
␞{                                              | Notification
  "published": "2025-01-02T11:12:13.456Z",       |
  "event-id": 789,                               |
  "type": "delete"                               |
}                                                |
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="acknowledgments" numbered="false">
      <name>Acknowledgments</name>
      <t anchor="thanks">We thank members of the HTTP Working Group, the HTTPAPI Working Group, the Solid community, the Braid community and others for discussions, ideas, reviews, and feedback on previous work that has led to this specification.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+196XbbVprgfz4FQs/pllIEJdmO4yiVqpJl2VaVtxKV9qnx
SccgAZKIQIABQMmMWn3mEWZeYM78ndeYeZN+kvm2uwEXJJ2kt5qqkzqmsN17
v/vt2w3DsFendZYcB/0Xl5dvg7PrJK+r4M+rpFz3e5OoTmZFuT4Oqjru9eJi
kkcLeDYuo2kdzlbLOgrndb2MlmmY0Jvhj/hmePigV63Gi7Sq0iKv10t45/zs
8lkvXy3GSXnci+HDx71JkVdJXq2q46AuV0nv+jh40IvKJILZvEvGQZTHwXle
J2We1MFlGeXVsijrfu+mKK9mZbFawnNPVmkWp/kseJIVk6sqmBZlQCs5eXte
9XtXyRqejo97QRjQDPEHzRF/5EWdTlNYJcyyB3dXMKkg2PHTQcAL67+D6eBj
z/E9vL6I0gyuC2T+kCb1dFiUM7wVlZO53KqODw7wSbyUXidD9dgBXjgYl8VN
lRzINw7w3Vlaz1djePv040VSHdgAx9sZwLSqrY/TY0N+a5gWzgsH27ZwOK8X
Wb/Xi1b1vCgRfjBEEExXWcY40L+I5qsseI5f6NO9RNY9+Vgm1W9wOX9YlkVd
5Hh9OCkW/LkiS/OrMC2TaTjJkihHWNP2w+BpvcYdoNcmBXzMxsdeLy/KBWzW
NW0TbsVxcPHs9Kujo0P5Oxw940uPvjhSl/787dnFX+jq0eHh4WO4fP769OLs
1dnry5OXIT3y6mw0Onl+NgIsDZ/SRhBMxmkVpvmkTBYwiSgLDx/Cy/Cdx0f3
Hx330nxqT+f0zauzy2MCRB2VswR2Qm0EPFkmANW8zta0w/cPDx8dHD44AJgk
dZgVNyFuXj5Zh0AYUQjfDet5EjIOlAf8USHTU3znOHhZ3AQv+aXgKbxE2Akv
BU/4Jd4SvXv0v1D+DYI0B5o7GQYXq6pKskxf5609yZKPzi0i1+BB8ApRM8DZ
02XYQiBhmAPM59xaY/C6qJMYHnl6Njp//jp8dnHy6uzdm4s/HQdP35wPjw6H
R0cPvzi4/+jLx189GsI/X93HDXx2dnn6wg/BaVJP5sNqmUyGN/OovpkhGG2w
PMMHNi6Zl/buxcnlu+d0EYCUJhXuonqYbwJs02uk51ENDCgqYwsEL6OqDr5d
4h9xcP8xAGQN4Lj/BeHaq5f+ySMlbZo7vvlvPPWjL4KTZZlmOPlHilBOT05f
nL9+rmgKCejibNSB02WxHs7G6TXS9cFyNa4OYuD2SVkTMz0ADlB/j9jyfVWv
swS5ib3ki2QJTyBV4dNRhhOuE+bx06QM9nDg/e0ofDEMnqUJcekGtC6KdXA5
LxZR1X4C4H8cfJsD4ZYVcJygmAanUZYCBeVpNAjOS4BhYkAn7y0A1YF3j5Jl
naAUk8vrJCqPkSYOWzRxOo/g2TL4YhCcIJOvk0m9Kmm1AJOK5BuS7FPYy1mO
03id1CjcwnFUwS6Niml9A/LQfjupOjCg/7SY1AV+/am1Ef0dF8qsTH3r7dNn
O+/0VKD7vX11uIyn954fPQJav//oMaPSs9P7hw8fHfPPB189+EJ+PgIclJ9f
Pnz0UP18/OCx/Hz8+KtD+QmMgl57d/Zk9O0ToIkHp8ObZAy6Bl4cmQsgsJO6
6vV6YRgG0biqy2hS93q2OAlS2IFgkebpAoCmRE4wBqlfB0Ue1MUSAUYSvwbC
DaIMOHUVrGCVQTSjD9UFbPgkAQCzdhHaGkUVxCDlJsgQp2WxgO1ew9NVsSon
CX45RdUG6GQYnNf41YqQgcRVADx+XsTBeyW1vuOhgMECFe8VSyabbL1P70xW
ZQmjwwM2WRF+AWgq5sveGd6AdpDCkwHg0ixLcH5L1MqGQDyJI32DtwpCe2d/
fruP0IPBYvwSoCrCC15I4yRiYOFfiwImC6tcpSgkA1k5CirfVFJev4ZQWoP8
mQ5lDxdpHGdJr3cPNcKyiFcTWuLtvdT6867Xuz0O+BJJ8BD2PU4ZWCGA+K5H
23kDXKEo01lKMAxioj9YRYQYUSErAvKsBgrgBwoqBktI2gq3KpHjzkEXLBcA
jygANXm1IMAJVAAhg73bWxx6APyDZ340vH93t49whoXzDGheUQyDIjPEIfDN
JeBaxUC9AXwhqMKkcZrphPb4pkxr4DjBeB3M4e+hDQXQprOwThdJmCdJXN31
nqxq+my0XGYa9vOIMLjIrnEvgV0E+AriHKz4GnY1ID0oIiwBgK2BycrghMVA
XEQDH5fIl/JJIsBLCTY5sEhQpGDGgJl5UqyAiEgQVUMmr7iAFQI2ILMvUKWa
0L6whhVMspShOQ0msD6CRgEbpTBlCAz0OskKGFutZLHMijUs5ToqUxwOeOc8
T3EzB0ARoMMAoEmRCm5vSXG7u6PFjJISFh+OkFwE+WnjXr28uzNb99Xw/j5O
AVk1aPTFivg4bCMaNIAVAJIB8BEiAkCaSQRbkyAlIt0is8GtXSA7sDfB2bYo
Q7MHQBQqlIOte0YqHoyDO1HkA0aPspiV0WKBiwd5AWgAZIkyNAUgkOaKWzBZ
VQBZYCtVFc3wQrWuQIxVvNl6NI3glQYTGGIj4qYAqncjgRNeXI3xCjHiu7sh
6nyA74gcBaErctclfC6CzzAqJIDbihjBWlnzjAFocTKAvUbsw5ktVlmdwtRx
EDK1cMQDWDoy3gxHz9JxGaH805N8zwwfrJzv9pTc0pcO9uHzNdAYgDyuAElh
i2BUMAuB/mlDkynsSI1bWq3zybws8vSnxMdNXY4VTcqiqsyENfCYe8YrID3N
MTQwwBxDTFksEW+Y58WMv7hZNMwCUSjJoxwFBWzQPIli0HRWJTxcLooS4BUn
iOL8Rh1UQDAJclAgkCxLctpi5O30eXfWsPop/AVXb4JiGQFR4MJz1jyYnImP
IYBdnCSZd9d7p75bphUJspNzICsk3bxYILWJcESmANMoEPthWlN8NGLxKVSa
gE6puC7wP5okLGiSRZWgRl4BKy2HwclMWAAiOHIynHMBog3olXmI4gYwFbgF
ylpai0VUrGo0tPCDoPPCxWgi+4d0C2JgBjPKE4BGjhzpCRMuyOyUyZ1RM0FW
J0Pisgz/ge/wkkmjyIA447Vhi2ojFtFVgsiXVnRtkSAvS6sFLn4JyBhMAUeR
MTBO4/dgk3BPpqh2ODthG+p3vdvbv1NYBuS5m1aDC3yBIqsGcjB6t5bxLK3g
c7bm44gMSx/ZQfXxKj6ACwgKnMsHUns+KL1HpCXb7obxksS0AQEIAmOTxLnr
Ic0V4x8SlkW0SAAGGl56XqRkFLQXomzwChATSJFb1viib0HINgBjYUV6UN4v
haSAOu5OCNRsBg1jgyAtyiUo6jUOL8I5mK7yCXNG1NNT0hvSsi2oEZUKQVBF
BhVcRL4CMhGmDBxCb7vmGYPG1FAkxUmGhsF2NtfcQZ++OADIX6cRoTYKNpob
Q8fis6SQRtfCFVZ5DiAHgQTKpQjRMl26mE6Gf5h8jFCYBVdJskTu8xo245s+
Oo36FjuaJ9mSeUwFGmc0hheIzYLpA1oTqWbosQOFqqzaIFErqZS8ln2NmXx/
WCGaBFNgExkYTZbkAvaVZtkKBX/NTAIn88foOhpNSkQoNfsx8Pib417vn//5
n4Mf4HZFt8kLWuvhg2+C6CZCVoAr3yNnHggz+QbZYNOi6MPs0dFI1HIc9IlO
+gO4hKICMO2Y7gfByWQC9io8wUIqKuuDRfoxienZAL1JZKuGlwAYsBX7Mk7L
uXiHz4+LeH0c/HH05vUQVgu7mE7XezwOKc0wqBkQGcvBMgNJ1ue3AyarynnK
Gc+hOHgLx93v3e1/3esdHAAhA20oE4FhBTiCSA/SHXgt7jdsyjZ0FnjT1y4M
0Olv5Dnq2gjIPVrsqbFkEsjcZQ72MPLR2xhEyAC0zmwFwHAfudM76ww9zAFO
e/D1dBrsfYbv79PWwVgxkDbqqHNHmDcGvqNpEQBqVhYay0Ui5HH3eJL2bQSY
M50Ng0euu/wO8Zgo1fH8uwTLHAPpJES3zDf97meHP1R9dg9903fsTnpKEVH/
rsH+82R21/s2z1Lg6Mz82qhkCdsm1VerJcYUSHVHQgDGNYM3+TUEnQPMAbMB
GszdB1L5Vqh7wBa5Q2iZSs+DvsI63zQDXWCcZuKX0foC4iyqozHwEjDoSLdB
JAY0SVBfTElP9Ugoh2+iHguscQ7aErCMcZorPqZZI3qaLXWXV0x2UpEVM1Su
aZnAIKYgfurgWZkk6LfLxOInpzOyDTCRTi+eXu6DRR28WSIesobPSgUYcPDA
m0vQwX1SVXjtqmJRhjYmoHEfJVPfB+KUX0lBnAK2ohmMZg7wIYJpHVVXrOax
yNXmRMheRNBKkHGBaZbElvBtWGH3lEPu9h7b5YJzSgCGURXKr2IaghSq5x4l
zHWORE2/Bqxa6T5b3CTkRkjrpnaB7KmumhZJxSMxVyMr+UcmIuQCOX8wKCbo
MBIpbPtchgEJU8Y51F7wmcYu2E4B1FyRalIy11f5GKU4LLgi3ok7gVi2kShI
Za5gooiTiAHFYrHKCXDGsDJwcDxE4q5RYzWp4d694HkBH4d9nOG/so30O8wA
E0BlhIHTuGWDkRjxYQcZkjBlQDpC9OvEeLs6FghosJoIzaM6gmTPJD8ukB7J
48C2iHJ0OJa7j9ID0XlwJjkq+zHDmJam1PuO+URlAjrIEaCTwCJkTxna7nc9
VCfJpvIRq1HXdzEdhsGprEfZRMTJGaXEVmOBRfhGGiP6gLrVWcJi9rd2Qaax
shXalEncJldaJ4Bc/FA7mSu2jqv1byIs49YwK4MR0OmjrA/2MyqOELmEG8BU
lgWMA1t7npMsKjFcg4xeGYzKf0AGLu78FBgyOtIYszK2R3D2+Pd4BQIkZyVV
KeAybc0e9MNe24ykhc8QMLNtQrsEiwLpOARkDlGClQRoxS3UbXEb8hPai9ph
d7ErxX5oRzsTEwtK5YlSwdF4VWq9x4EFc5EhCLgJouRa+XaSsiyEOrNCOyVy
sUdFepEvC3Z1r0qQ7MA+Q0yrJsUyCcM6WaC1l4W2JcR2rBdVxSQlyCkTra33
ecw04AQu59cmGn1wwE6B9CciQGNuwQLqmwT1BEWtaKQxV6LIBLFnmMgC5y6M
TJuelruMmShNeG3gu3nSTSCIFhZaWhgBIslZPjRQoZtJReU4hSdZ8i1QUBKf
XqSzeS3GnTNQEot2IUa7ZsFitTNTbDjSyDVCHvmSfN+w1AqWPwAbd40eTeL3
UZlW5HcxpEyuDQ7xGYds2/O6uzO6CUbjxNMQZEa0ZvDBpEjXtVlQhe7ROp3I
uhBrb9CL7PgDCRTka/SAfoBQA1pXlM66LbtWUAYGkuQw5KQe89EKnZaMZ7A1
ShMgdociFlULYtNAb8j/GNNFPLOcP9WOd5T2xg2vZL51xUh+xCbSqtHYjqoU
xvWoKkZYmo8gq6NoUhTPk5LBAiQGM0+rOezqkjT5iYR42V8k3AzYO1rh6WSV
RSXpxMhsauQSdTCPkByBFhdgxLOHDYYxiGNwhIjU9mzhp22cZZha4ARSXJXL
wv5cXahPGY86ckpH/2g70YYdEEGwwhVW+WHE29vf/hbj+IitYxQpBiw4Ct3m
kC7oJ7e3+veApiS3MTqsbvNvIVTXr4ecmBzrljHBFhOLx2jJ+Jiy5wZdVBoM
6HtdYWjdCA/kn1qoo5XRqRNpBUamxQ5GtuAaXATdk2RtAqsHwtCk1I7IiveP
TDSEhaWCDnu//SzELIgRyJrFWocxSXEm3ZWV5KrI0vjABdJzDBOWFETLkwyf
vP/Q5IFg/oLJSwPZ8HFYFwf3Dj57m52/iZ9Up5dPL0anH6vL5yfHM/rSMF0c
/Jd/mJ1OVj/efzFevvzTH68/nt88hBWcfPum+nESz0+/ejzLZj/9+A/nR+/e
/KUXhr8jch2haARCJRGpLfpQ/mxY6LyExOvWBhE/jcRYcsKxHZvEvC3NJ9kK
TDtD2iKrwTxk8X/XOzFOA9wpdUc5DASD7Ym6Vh5wavM1W9rLUFrMNwba5FNv
qjh7IgMqJBaW9s4bepA7RVGs5pjr+8B1i27vEq7CvWK92loSO3Uog21RgCYA
a8t17gUjM10XNZ6+06HHE/jMhzyDyXKVxhNq8XXX0149I9JISw/ei0ZkD/Xd
3j0/5MQfdnucF9F4XCbXd+05EDTh7U+bhlisk6gs10opf++CGWbVgrty0O2l
UwW9JN6nnX3vWsou9uMK1bZ7FwUE+WZFRq+iS1uDvcMH7rECAkxHLcV9KOSQ
lL18Iuq8aN/QYkq2WgWHbYcYEMIsydmn6aUE0efdiNQ8WQMmV2Q7KjolrXMd
zECPyC0/xzlSMKt62wx4nZygVCiGsV7RQPgJbKVhKO2FA7oIM5bwHQesxLVB
yR7zdNJ0sxqNVcEjHm4cxMFi0XJ5JOXhJPHngSp8t7k1KFWnHEHSVpwVuAQw
T1NMHWBVilci8/Qw4ZIV6QyYlnhD9IQaJt8JiU8Mf1cmJGoNLHYXqNyFchyK
8TJei9hXhKX5D+oTNksRp7Yx3ZvqFOP9BSia4h1lVemZ2BNNAiitBw32s/Vx
1xulGMvXIgomTfwQ9ZgVhSzZ99X2QXdbZxvdahppUS1gl3GkV3gc2CjEU9QS
yWHg1uqVSedj6E1uzSrYdjY/9M1DMysnetJzU0Y1B2hY8GApgq5XgXJNY/4y
xtieW3sNlJWz6DJGJb3O52pg9LoU7wBYMFactIlbfh+CRjJy9gec3NiYAJqn
9XqpEqq0Pho7gl9NwgnW2kETwFsyUsWmFR8m6SOwrtVCGXsF8ljLQUIKjXKk
UoywGXKwzBY15bhYqtQpi+bZXkZ2bni+kh2UbTcMWvlRm/zO7IVvMXc/LMQb
pGPEaMeB+I3igYGpTL9leFlmyCfyIBZNwngd2YJADENK6wVI5jNUIyuwjRes
Cpsb2nVuu/zt1Ln2V4HwsmhNBAf/BkTEsMVLxQQ2aKacXkMPmGDNgEMZHL8b
cJRecbOS3W1g3zcxRyU6YC6beI3b+unQO3uHbZzHaMfa8U6tPjcCGwPgq2Ca
U+olLsfr4bAI+n2DojfobMY2BMY4XWWiCE7TspJAPyDMFL1IkfLkArGUDCDx
dreEKX4D0y2LOJ0w7CZAhLzMeEV77ae4NtAoESvE5AjRSlTUL5z+wqhf0OO8
iNlaHOI2CwJhrddLYl5P1L/d4tvzCxJgpi9TEHUCoNt7mflLWKW5Qu4Kjgko
kgP21TQ9KZ1RHIIN1x8799XETXwqamma6GhSLkuvA4ENeBJXhHdaZJlYgj/j
psl5blJgPMozC2ZJ3RmYYHfGhiCEQtccLd8pTF0HFyghs5lNZmW1td2Z6BVv
8IDdckpVqpe9bYZDhHQZE5q54Al5DcdCuMiQ4sDIByvSqdD6PzgaHlnu+wrv
B/MCfeP0MYV1HCPXoXkXKVRatmN6CEuQgi3m28quqVLcUcl77mSenl1XnpwI
uDrOUrbFgIMikcTfQLzjvtK4MGMOm1luZm2pmn0Z/Bw/c1tYl8T+CkoLB90L
ph7NGANZjhPc7wd7ADV0/5b7Q7MVKvbJNg46E1OMCFVJTVuxWpKkwkcot/bj
2jhynE8Gts8ywI2ciU+beU9qpX0PgkX0UYVBXGxBDiqFFDaSIG6yDKbAgk6V
xi2pRMmVLWvDh5emXmJntl6osDNFdnZkvcvo9aBJRLkG15jnzrUMkzIdYzxD
hV+JLSnU3OJ34XTw3EcutNdRfJ1q92pSTlLKb1+xyMZsExvbYTqgvuZOUrdF
kjaQyT5h1kmoLl59HT4hRcmDqLf3qioJTZxFOD1ejJMpmCkFqEZsbpIOCtuM
1RIwpYEX70ejs31yw1vJyRzYCuhrlrOu5XPc4h42M6ukOk8EMliH7ZmgZagf
43lg3IArkl69bBb6oSzFeXId4Pt/pK+MCEO+fzOuCjC6MWHmO3ioLFYzdvZZ
DyFf76B6LHYg2WvKnlTh2gdK8hMfBLGYD3aiped7R18Ov6TaCYIcWqYdMV+7
fAADuCtYJpfhUmEI0RCjkZgwJbA3zFxCEphSvlPKaGw5rVpFOA+oCGfg7iOI
WqqY4oB4pLQSZN8s30gik/rP6aYNLaVPyfsxUwnor+TwAOU4QkEjHGaAPAuz
i0rizpS7N21pD/0hGCwUM8FlD3aBOacVkYyQJHlUYvCdFRk17GEA3EXWEZu6
GXxyydqMxa021YNUIryxFqFaYo4tVYBxnVASW4aiVUxmYZs2vXAtrGbR8JLB
autYtMXCuVDX68bv4+CEAjxvgFaRrd8/vH9/4KcYKrKA/8NTJ8CIgmtge39C
p2qJTIiKSnBfYlNRIqX0mIPLlbxU2nuQVhVM7ODx/a++vEe/JRQTHt3/6ujR
F48fP3qwz6KZqdOsnBGlYSQ24DRQq0eT1spkAK21oshXKlnHkV3r917m8KtM
fmhYVw6Kl+JLaCqkFYEqE5GP+JKl08RkWdgvtDRWdDm3WN/7f5xHk6vqO8f6
deIuUswkiGIUGbIhxPcHWBhzZlpFtIZxVITb2zejS1Vl0Eg3s7RlDGOmM5Us
oj04HJrBNGhCQp7nsalCQueDgfjNzc0wXy5+qLhyFh4G1qEol42PZbaqgP3s
9OIfFil6IYppfSCJs9aXdv2I8yZxj13fZAxNYvFef9Ko+exjSHKaNBKJWezy
Irw0/KHaZ/wbJzlw9roKUaji95r2Wk0lNuSGAFt4iUhpqq68ObOUvW9H7mGr
b28tYYLh5kbInqkPREyqcNzrTufsxL4rG/ragbJX7aM4clyJGI6L0aihMVZc
XGUyWQyXr7qKaI3Shy5y/ILPpwwzu0kw44I0R3iC8b4yXIQqE5SDjUqUOwpJ
clX1l6FAsNw6VBNNGY47JS8VKs2JrB01wCC4Tn9ig8FTUGlcvZLcbJvJqiZM
qpkVWOKCpixWsmTqYHIwW1F20inqi4Agy6LC1JA1s2FjDdvuUapFQ1nCTnEO
MgNXLGbieNWpdrQ84xwwGZJVoeZGtXHEmsQByQlzdqqVbQXYLqjKBBVbWklH
XY+eVAIL48opPb1ej5INyBuEDnDUiHTImWP5zj3KvFF/UdwweCq10PicSoLB
vGq5HFq5MdqfnYe6zwso74Cn4jeo1BoSMbhbWSBooTjvsx1xYXmJsU5VOdlt
7zHSkXKro7ZyhbFE2IAq6L/6dnTZH/C/wes39Pvi7M/fnl+cPcXfoxcnL1/q
Hz15YvTizbcvn5pf5s3TN69enb1+yi/D1cC51Ou/OvlLn3Ng+m/eXp6/eX3y
sq8XrCDHnn12qWF+Cew1J5b2tAWI7zw5fft//tfRQ6Daz7ABw9HRV5RM8xl1
sfnyIbqgAfV5NKJj/hNDqT3gnUlUElOATQBaS2uSphE6uYsbUJKAEgDCn79H
yIAc/O14sjx6+Du5gAt2LiqYORcJZu0rrZcZiJ5LnmE0NJ3rDUi78z35i/O3
grt18be/x7qvIDx6/HtAfKGM1wrRWnRxaRkkCNxT9O4CEWDdE1KALWMISTnA
fsvVNEILzOFB2OSUS8ExLOmT4NbTM/WqGN0eEUCGek805t/7YiI5sTysbDWO
ceCqxVKrbjn9zbFJOy/49rbZ1YdTspAf11y8eF1ccR2g9T2cNeX80cCff763
t/cZPZmU+/v78uvzz90AnFVdlObUqumudy5eMSF8FnAfa9Wqg+WzZ95IO1Ty
giE1Tl4tHF5MxTKcpGVNWnwhojIONNiuMDeyUvXMZBeDoCpuEorMOkvXme2Y
KmwMM/fLX2NlAXuLuNQQ9jSq0mzN8oCyAnncWKW4Sna88UgUduXnZ+JIID6B
S0MtBXW4qhkHYfNTkpd99rFSgHVsLE4X/B3JHqGiaB26NH8JGltXPMis3GEY
3eMHKREzZb2KcapY1fiMA31iWe195tJWbJaDMT4JfJEx34W5MAeFupWFnVJd
juipfvrwU92zMNTklmgRSzuNKd4YLKa5Ut6azj1RX+F6mJtoTaUtdEmIi3dT
5xzLC4KRFg5MAwvcA8m1l05lEmSj2jI9Nd4I/KZrniEUozQzJqdMp72nYPNx
4AjnlktEQx4n8xCxvcJiWlYGC67UjHJr2fgalQNsyfwB+GAVBvC8IZjtdnoy
KHI385TTu6w6fVLXXcK3UuhU+QBogjWGT+bi72OtTycj6YCJNefW+IR6qieB
2i9xc6lwVxM6VJbFdNxcSkJXmdYbcamyTfyDnXKmgI6oRssqWreEz2vbfLm9
56Y5iHJmZRe5pOyMRia3e4FqlQweegCjcIGCwaZYjSrsa7DGdfykagSxPXPT
xOhCThVR9u2pzMmz38cuFan4YLrItejgg7gEtgnR9aB9CiqQTXq6JPlE2tlI
CQLNalynHkdZipiAQdsN5J+7zkpNwWhQwh+LKsmudeMONxtsHqEzMSkxWIeZ
eCfS1c0MaOojMGGaydRK6NJ2hz8bj+0IMxlkB8qcRGcc0ofkfxH3Ydz2WKhD
q8CsXS+qbU7Tm8hsZjRW7RFcKFZkP5KdBa9h2wHOZwHDaaViEDhhSk+YrZSw
Ae6QLtFG+/tKJYlL95BGSNPDNFAKocrFX+ro0aUzJziC005wwHRp2yK/vWcb
6CreYV1SdOka8qzKqCIVxjUtM7e0MSMfLGsshvldGo8YR7GUBI1EfpqNBwlq
/vDJUHPXEO7Tlaa3Vhsuk1HraH02qhXoAgJTyE5tlq3sSmLZ8ykIpjEbbmbw
vcq8Lb9HzvT9uERd5Htq7MGZJmviTA24DMw09Csomb/Xk8JPzJjlIzKbULRa
0tdCZk2jVxxSFICfqK1mH4c019gfepBElc5fmkGWtrNzKlltqoCYKxq0Z0pU
Xl9RQ5LP4B6nivlr6rlBVckpgp25c3uWm6rtQyIFsRFsNFnRZJXSR79TJkQA
OEk/ABulFfDn78+6HzmTR5h7bPhMBQ+Jsr3hSxXOSFTX747h97n6jc8aSwgf
U0RGz73Rf+CDllJqniSAfOcqZfpN303zJfpTPsb5g7YS8F1DhOB79t+4OrXS
oHmjrVPoMfJfd4zcHaONTL9ojPZVL6yqXxlYlRdav8YoeWMUD/H9ygAj5N+G
WP6PeQZuoNS2jd75u40t3rq5P2vCVWPGv+zLLSAbeUHMY2T9ie87Mtl6fqmA
Z/9t3vfetr631FzkXvCB2d2H4AWF57j7rvJrVSG1i71zXDt0KaS+JXe9/jf8
/jd91iWechM2NK9YVVuh3ODQX0Bv6mZho2ctx0UjwkdKWomeGV0I2EogZz3H
MRuGnunq+q3z3Ah8lsVqBe4sVQ81lfBIrcC4HwA5KlgoJrrmoT1XX7q79vd3
ls77ZyM6wiKJTBezlhbuXTaPr9etkhF3WLiYd3Yx8g77sXGFnhmCHrSk9H8K
KSAE2LEAH79K1jpVrxMsYBKYVoRDQKicshGMs9lY2fQ9BGOZzFJKHIiNnmcf
p8A0cEFPASLvceUxuoJFXyNzhu0JTOnVPph96kjAGmIVvDr5SwBzQ08yDa28
R2vy3qzyiJpFF1PSftQCv2sASPMX0LDste8HyFAU9ZLd8UG1S/iAefO4S2uM
3cjFUHZuLdTcuq5IGveg/426DYStHhCjBKvBsQWjn44fDI+QkgE2TwES6NXu
eo4onnpvxTbbwEiOKiLVjYr92+9hFxodYysboKKgKRDYG9w3ijglM44D0Pjs
dYWfqWrG2wbOJgaiYWWBSniFpKOpydh1Y8JYbqLtnamHwQnPFMniw+EH5/Pi
kpTP6WQV8kNHFp9q1+CoaeHnhdotnCXbRS1oA1w2cRgPZEyBMHlCMbtztfBD
SDsb2Qu0qdmNOIZtVF3AsjEhHFMgC/TRUWm2vVCVwqMBIln9HLnTwNm2dOpW
9ROZ8Pxti/lUSW0zSb1MrObRDqJ5IpUB9upzaaWv6rlgSoyhduE6d03Rvhse
3hTJJK0gslV7F02lFDAtG0MBV0tLDKazgzaaIJUVMTuVaBLuCxW6PzluERi/
+CpXJTWuZ8UdSxaOUcv4GgPRSKUTp93n31f++VEeMbpgKMwysIdXAU0GAVaU
UtMPnzRq76srkk7oG+qbEjEXVweJPfMwp9RaDrgOGhgG56weaJruIpYpefS5
1rB7XGpzRdPD8DJRr84w1R4LljJ6jO98S0dho1F0T10VUaOlC6qNjo+Lqkxe
UWkhyBurHpEBrC+EHOsWT9hlR3WiyyAc31GHpmeNYOcI4N6V7YpIayiPkqd0
nc7cmuNe7zdB96guW7rrRbkV08ytAiG7FdqGGi23javrihlumUqzuGrDXBpu
TqXabRq6NbCGdLtoHP3Ak3mB7UwoxWtZppHT5bVStYeqNZEDerNl/pIGKnty
0zKtXeYuvthCws4ZxAdI8KnI9GZUSbFXybqQr1NwqqNnsbetlFNurEtlLPCJ
Z5rJguORpEWrzpxzrn1PKJ1Rtc1tYydzYlGaP1Co+AMJvg+J2HmWAk9qqJQH
KLxX31FpvVww0UpN8mGsRE24aoJw5i8nr16G1JeyWsPbH4fcTXcdLbIet6Dt
mZ63lCiNSa49nqp9r7vvrGpr2mpd2obtEMft+6Ae4h1vN1OLtXlXhA1OP39v
8OQ7Z1fhlvlA4xbc+w0v9DfuHSOIlN5vLIAGS5Y9xU8RODu/JDkDe3vyo/Ed
xhNqpamaoCAnN+1VGFvV3zaTQSZrOZgpnK+ar6RTo5RwS7BqYxMW6gaAdU9U
DGllELNPW9raWtnzpPfgkDbnaFbt2totykjQMxD/K5f9RIRpUgbvTtJqe874
GBJufPC7NRo90B9IQoZRAoUIqIujFCj0XpydPA2wU7Su5Om9KCqD+HQGVTeq
OxuDTQHUazhIv7lz1gMK5822X/ADiNftWaoqo/uHh8GbP/WeUhPpy/lqEBze
D/4I+4CHawVHh8eH+F/w/NVlr03dNgw7W1jvslTRvjes1X3Ct1h+gtsUR5Sz
ott0VCEq6SF2yIt1/SlI9N8Fn3/uCqHgBGyMSfL5573fwd2RahFq1V9Fswhj
l0wFncVHbBbwiL6mm4jJntivScixXrdpT+vfqOpg3QYg99iqmDTB+0bHVpEj
XW0YKdeasuk5u41Oc6is5etSQ6sOjV+2PC8fTrFNXIitzcsi+6AJSc43M6T0
BZKS66tShU1gRuJ5Fx8w8xvwpLbcE+3PYI0UeynQOkupWy/ptJyK3Eir8LQb
UlFcTyOiloZLDY85Ea/RcdjqHtVoIqMMdew1bgL0jU4AaAVS10LOJRygblMR
BgRLUB8oVK/aqK0RGtKRzT2eoXE0j86/pRl3tFoSR0gnDBSPocA94E5C7fuU
e0OnfLv5JloHRx6tdeydPh/aPVCCHpt8PnWuQ6dkMWJV+YiuuLPm3ug6/omT
54RCmPgvOF5j01AqdCw9beZOJx/H/SFJB570IL07lNChmnCSI5zMUiJmmzS1
43ZVYSHbAlvYlT7Jx+enbRN9O+iB9tEIjQdFqshxcsean31z2Ov9y3/7H/xf
p8jZBNuG7NnhUSWEhNl4MrksCUzEKJvTRY3K/bYBD5QYzGPpMe+lQfalSEi+
7U1pOcuwqTu2LCUnG/mSKquRU3uHvHrPzhoF/WdpFEp/8G70BlxwkaaFEfcf
HvbOzRmyx8Hvj3q95UrqjY5pOuHhUXh4/xJndHR8dH/44OEX/5VtljCFRx5+
8ajHRw1zG9RPRCy/VrPLs7uglqXv3P7dTzfV8q6h+syL2Yw61GxTcwSRSPfP
o2us4Uf94ibSvZ3xYEesM+Ve9nYfIE+W5MCtWO7uUwCvLJbYQToa0yFg7Sjb
gPwBkqumquGtAvzaFDoJV1N6hE6ZvecGgQM+XQRpkH4oauN2VI7Mbx/coxrl
rrQCpIS+ESNu36t2olNLdj9g3u9Ka7dbpDPHzTLZnyjYKZQ7PunI4Z8rhlWz
z08Qv82U47a3arB96iKFLSHsnOy5SQQHXki3xa5p9y3JtP7+Iqo0Lm80R2v3
+my0Q6PS+LTRKdEVyoCPUtmgsNEIczuNzDevSMv0ScS1ju99GrPgY2ejTrrr
dG4zzbncyYp7SjVg0qFuf7MhboNtagy9wOUYe8u9Zh8J5XWrCTANsLYhIZd6
2Q0EHe+YlIT4D7za+9A4/enDvsSu0LbFwjH3aYuzHvxQYQF38uOH/WMvVuov
i6ORWlq5TsYOxyKFu1XRIbJf+9gQNS8fRlR+VLBRwAMuhlALEsIM8Whi26I7
GpKfRVIPXboxsOLdb3pC17pYT8HBRFc7mZCXQLB2o6YWkaHlZVUFfpI+0cyl
bOCnYReNj5cufKhceZkuEypzUwcfq4YXAxUlcqdCVSN2B6L3DsVtplnhaM6+
6caR4j7mlkV2jbJ0VG8llhKX/pUYyC82KxpY9nNtiV/Fb91FsC2NcMtzShu8
sOj3lXrIq970/SrDD5X2ZdDG7s4ubBaBx9B5u7J5iN7L0ITy8czxX5PUK2nB
oo+0auWfKYKlho2RlUUhplJHptMvREkfDH45Xv5Byi+PqSziOq3Xv8GP74qM
NJHNeGg/4kNBwoMu7GvYuw31poGd2qrVGKDwtJUjqPWtjXq2T+lqYpRRHYzG
4FfjeGwu6yZ7419V2jePk+GUNd6F90qJsTvoMhflBhrNNvPS7PaFhABbOxFK
cLBjR+SunNyhgy/WQSFyGtlmFYq8DraTgSwK3UWG02TEXGjbJgo7nDTWzgTL
wfbU07ZI1p2B8bBM//Ce5Dt8+NKf7jEgh7Ts3obMKDvPZpfcqC7gpMbRYUPo
g+UAaQe5zl+fXpy9Ont9efKSSn/CV2ej0cnzs1Ej5iVL+fD7ow9O8qxOWLPd
jqrZqNlsWO1NpE5VbJxqI30lgvGKunvE/4aepRZ7fXTYdhipQ9bCsxx4KTaa
DybzVX4FmsVWRtugoS5m639MMVyv80JzVqHrlriXbxpNQp26hJzHQRBbDjUw
xMOHlEqgSpUcmyOtjj275wq6BoP8OqCi2Khcf9O/fHE++n50eXH++vn3o7O3
Jxcnl2ejfneodPtieTXbAL/tvY07YdQwWWdzb7q2hvi9b1co6yNqHSrmgX5D
h9sF/F5VZGcIO3PeDbgbXtkIV9ItOkBa9eVkDPfNtmzD/JouVeOaEh5Gum9b
xpXfuRWkw/4FjvPcKB9ulG/ojMGuYun0ZRnp3nJtR2cmQ6ptJzd1oHbvWb+1
ruH2CSetDCQ7Xpwk2FNRYdDnfdubA4+htCbrVXJIiL/7bfq7Ozz5oIWcYegl
eo20L5N8Vs+PgwdHweb//ZNbmrRr0MC839sygGfIXWIJzVec0MJuo9jxhx0n
toWeBUEdXNhmm+70jqJowxS/5Wnbm9NgiA61WPapLmh3N4xItEkzeZed6aEc
alZITlXmlr1/+e//8/YTd95FtiDoa0zAg9y7cKE/0BsEryhM6BMqDDYOKK/U
clI8g6y/9ZW7T1vWz8ScDYbktscVvhCz344qmnlLP6VMcfGTT41u6hYY3SFO
ZoBYkIQH+1LqTJIl7YzaYSN+BM94eP9lw+IQnwo/LpkH0iGAcLpiq0p/QXkD
TapQE4//P2CsSEnHRw+GQC8bGOuXj7/abRRmrLIFu73SAdYw3EY4ghefxHL9
uNTNa5/ySjYQkPPFBq/dhp2Ab0SmN8UKTAMPAv7rMlJ77zsZKWz9JzFSXuC/
ByP14cMGRtraOC8H3Y4AhoOmi6RYAWN6g30vblKs8oo2c9Eb1aTNisRrhwYq
jYn0qJAyIEnI6yqHUZUyPhcORe0bp07d3muWQNDCGue+bIjfq6zlyGmige2x
ruSkXA6gb+gYQ81ATafnzoi1e/yzbp4ije64ZT67qMlLLr1Qn9FpNLe3z84u
T1/IyRwEnZE+17KjRzw3/PhhxV1IOhvFVtE1n23B/ejKyDqMemCa9OARwsl1
E1Ke8823HhpDqWR+L5aT7dBx0KV3h7dlJLarX5w0WDp7i6TrTvkR2wb/t86T
QEs6oqT6Y9tX+SnTbJUS4Wfam4cWsC/9gtDyZ4/dqKjCr3jSLjfmfWwfT2Vh
Br8oD7NjHFVm0soO7ir02RBU28Rq3MNht3Adu6WbteSWJ6EVVJOqIk+tsx8R
PQzxVwyTN76uA3pte8+OkOvQ+a6Rcjc15RfGvZ+fXeo9LdSxQWls2wf/MSLa
/9pFWh300qnl7vq8UnFoyy/a+Oc6ATszbjsOiPMLGVhwGF1HaYYqg2Vfmjpo
E/lqIK1Vrry5vl0nqaPrYs3J+xrp6Ngwwyh8+VHSR2S6yqZpliVxF9tyfKHb
I3hSmbVjnaDxiPro14kBKe7oKJWqNLGdAacDk5iVZ2mprXCTMmAiSexymnB7
Euu2wKkRgz7Bap9Bg52GLXa6OZcptbgMscRVicfnUiNAFXpGN3JwiqGlyuo7
XAhTpz4xWVSm1L7hP0uE7BeHfjrs7a32V8vPcfRwm8XWYC2NuROvXGZ4zkC3
zbebbei88iIBsgjeFWUWf7bjKzvzX0X41AjDpdtP4Mqf9BWTJeIwAs2GpSmH
w7L7XXq+jOyee/OO2ljU0jYDDxqDOWD/2Og6LThaUyZyfqJV2qraarQ1DBPG
VOpEoU8RdA4p5UT2JBdjqqD+FqpoDtNoOVPPPRtDfTNn69huPDXF/F5qtOU/
LqLjqPBgREfeWH2nf2E5u/+E4241WG+Lo8m7UlhnOAr7Un3Vm0nHZTLDk13M
IYmeg6GxERTOWineDfPlTpxVfOZVbVJl3JZW0gt487kc9rEbVIepYpKNEwYa
tRQj+HeF8Ue3izdVaq8qOWOAnbvB02RRYEs2/hOsiEWhWrJZl1T/phNAmbUS
2Xz0J4BQvjX8AQlgUeQsP0S0dh26DJuiFBosm3jvPZ7q9COQqiMDQnta6jRd
/I1fXBY3idWfxMj4LB2XlN+hDWlndXA7DHUCdiOx5/1rnZlt9/DaMF//l/aP
A3IMRMqPxeqUv/0UiG9nFnecuOVm1GtksvxZeP56KzHobn+wYd0Fap3vX78Z
nW1aEzzFK2g1DG30OXcLYmDSuknaVps6qsmc756rPnnKqMvvz+SaFV3uxqTm
+7wkPAfSa/F1qZmmmNkJ5zHl88F92/dk6KGzLKXD69iCt4hJ5qLxmDjaM2xN
gpffLGFA8cqNimmNzd8G6Dfj4/dW1GMIJ/yq+AkUvCh4i27tSfCSRxsE18Pg
/vBwGLylN9irM6mtlkp84ijKSm+HbT6VdVZGC/GlnZ68AtWIDvcTDjOJFlEZ
hdEyVUzmRBJGsNI4Tpa4MXgMhMvLgJT/GOFxnX9MF//3f+fJTyI5MbwKYHAa
arApTu5BbIoSY2emyZXWct/LpPaeZ8UYz6dOsklBUzzJshRLzPcN6vB0YVF4
qgSav/ts49OhxxuYF783/AHnPATes8+ODRm6gt0aFx+5k7Qz97pg8ljrHlp4
It75q7C6AelNBwyYLhiK4lDizri/DS5QPS7HeKR5OKZsT5Tp5JAfqcMsx2td
UBlJMZLiR07Rtttt3jmNV5+Q/i4Zz4viqnLcSkPUDanwPZms0EpoirDbe5Xc
CSfOHdUQJCmpOULnU62adxj+B2msL8lIPLD7onKA0mbu7oMjMiP8Z26GJ3m5
J4oOmytE8ruOcj0hOcTNNzASM2bkriTaCkJTDf5QvcOzwpYjjZNMlc8Lv986
iNamVn2wGnZZLPOk3jTu0ZdqYG2hdmxFGMdFJcW/6qQND890uzfoDB0AzlWS
LL3sFE8MZp4q59Ugl5doDm4jkpjlrUuwL3ntfFohdUPyAMWk+doJfOAH8IMD
2JOFbumH9HOTxqCqySkZsFc1Kqis3qjE2Fb+rlmsZmftszvIqjaHpFaritqA
mlMDniZ5CnowqMbY9yPFaEFd40GTQ90IBA/w5Qay1JptAPOMsqRCyiU3DVFE
MsOupHikgLf+zJyaCdIvITNBl6a5B8PJgSXmgL05Apw8s9d4xpTsyWZ0kY6G
FzoC4vTf425eyNbQyldKJB4kqg5ttrrdmO47UqEnh9liw52KjhPCth+NTkCL
FTVLMc0NU6tBgz6LuCnvJ74Gg9iQNrX74Ul/KzyxifoIxrgL5DiRToK6PV97
1eNEPRQsUqOhOAl/NPfJPAGphlepX2JqgpfuR8W4TfDMy2YxPtmNxDksn1gr
xErHr6imN7wXUe0ZiXrlqh6nYI6cvD5p83uQsJGf1/N+h7JdWVKy+iNoYC5r
SW4Ue263W2rCPg7652eXz4I9UA5mf0iTesqyOzRM7ywHHE54PZcYbH1W0PnK
pLcQb3V69Kpor2p6bC7K7Ns3QusskbseQcPuf0AiNo4bK4ENKdfKIO2/N6ee
KH+WsZ32cJb7Ms3XSJiqn7B7iCpCHJd/EFWYN0SNCw/IT8ehhoP9vjLBNdt/
NES3nWb9WOr5T27/bhywQgeVmJnsrRrpjtzkoWIHluoOa5xF/xTC57TJ4/i7
3iZ4WiTiJfxhNe1V95sWEX4O4C8enpdppQ9+syHjIEjfu1tcS4K7fznf2Kz5
ttkAm69rfxH/+amogPyfqn7z5EZNF8RPv3si/YGl0u+CKW9V56JqVwTRvY4A
SfSkWKJyf2u7gmUqhypv6qc9DF6b5Qm53uAxW+o05pHjGbpQQnxZgKGiegw9
PrpvubMfDh+pTgV4yCIIWoRjxyaRWwkf8DWcbz2kutDFghxc+WXxA+5spVeq
45VcWCRdflwCZ5ozDojNEzD99dCbetfTXbcRq49B8FkUsqHrPXa8rk2LiI07
tOPETO99KhO46xnSD9g5jdCyLlKbwksJSvjadVNTb7trLaBjMUn1Yb50B1Yy
oHbBZSy6l92P1VVeYfFabR49QwV2t6XpftaonshPhPWyIB1HmxYOqiLp+fvj
N79fLDmU1oVU2DeaMl5+FQTSoxlavuu9kYsWSzhG2zLJ8Qg4jdvqXdPzrNKN
TLp21tpQB/i0t937qkf4hN09auzvjhCR8+wBDKfyC9ZuurY6Z9LJcbpSU2Cd
eomfEp5zjud+w4taQEiMpupkQim/oQpQNvKixrOuJEHckQdUKoBr2volGFg7
JNAdbuIV31rstqW4LcmNk4ufVg38rR795wA1Et8eH1i3CHfmr9lr7hPpAj6r
d7pHuIPaFwffYvpYSzEFtTfExLK2cvr+H+Gt7/Gt75w/QMvEDVik+vw0MqtR
8eSCQ5hLvAKQzdPZPPhxFWV08JfxCCSTeU7ZH+RgtBRSdaZzpTKxphl7bHAA
7H+0TAoMJsQJCmxqbMSWKqhOGNdxzPtUgkERvcmHby6iq8ZTN0V5BcgOZm3Z
52qZB189+EKd5KvWSC4lilxN+fj3YFZw8h5awXgTVJZ3CR054H5fix/VbEVq
YetUHTFQzemwihXfSuuFZEKi/Z+jIYcLnEZpiX8MAxglWYxLOoVRA3KizlNW
tmycTFClpt6tsTIiBkESg6VBaYQYZrrB0k+xhHAWuAXWebhgGo+TScQqSsGO
UR4Fn6Dz2DUfmxSlPvLBRgi12vXQA10NpJNyMk/xpFq0Sp8UURljDqZ1BEPf
7CorXGis4TqAAuh88KicrewzG2hwMNAxO3oaXReqHb/Ko6qUP0gC/3yIKAZP
YV9kqo8ff3WIUz2v7QPs7RZAZgMM5grya7OYZqIdFYrI1HQWS/Q0i0NdL1Kt
bojWGYcO0U2CyaTnsMWzGbkqCXlsYVyZDotNv18l0oOPE2D7FatvKkQwZu56
KfDFSmdaAQ7FILunUxUuTFn5LSosxBiT76ZQN0CWtcMEFsinZt+UzqC5T4Za
uOkDeqYedPi68h8pl4F6i4QU6ic3RTArixXo+IFKXi91ypgc9Eo8kH7KUR6Y
O4bkQvnGhTlqkBqfdzWQX+DZB26oB5PZiiwWthDZqdnkx5MmolElB2RmydeB
qi+1ZjvGw+aZqFgk6Ir0aRlp/dNeBqlNoI4KjharGhQaPP3RfJUamtKcKTiO
2KlbNtC5QAToRTQDYgUMktAiW2ecCrsYRxmGCZQ6IA5HB2DoleND2OVWnGDT
3PJrA37aOjnRG9QJdIGhk4VwqiRdpDZZzep44ArFB7avriYJt9fEegjlH6wc
/2ATs6ZpVqNT5UQOaVzVVVIPRMPSbh0Vd9i6+SBljTeNZlfJeci6h1PAQ3KX
C5UXQKPQqeeVk7itl4gbSh5ZJnjlleVdbQaGAAKKFgzTf5eMR8XkKkEV7Pbd
CFPTmd7V4gQheWM48wEFcEwavnNUjrPmr20nXJISq5TTrMdlEcWAUU2XIQXM
FH4ZKmEH/eTKvmQdv0qcHR125tQIBqW/K5RSmLN1c8/lJHLYaGyWgTBv1R+w
/Ku0q5pggielDsTpvpZQpokG6dK0ymoZ0W4mxeeRa4uh0RO2mW5r97SWLEA5
z4Gq3Lw9KrBjezU3Hvh2tyz6HHIFfYBD07tJR5SvVRhhu7+eSt0QBivSC/Rk
C+wUARRMDSPymu0bRZEi8YTvnoDY4cTfOrEYcuMAYaum7kpOUJhHZWI4olAO
6R4W26TMaOCMql4Ktc+kVPqn4qOprhHUyGJ6YBjrwg5XWcEmhKiqXHFf6+i1
gr4qOtQg+ZhWtcMRKkkh4XVsJ2YkHry4GuOFsyejb5+QduJ28EDuSkc302dh
PzGjVMURAO75ZC31NVlqNSoXz7/W6DvaFKpjaCtgSaItaqJoFdJP8ewPPnyE
D50yx8kB78/wxO2SNAj8jIUmb6SbRZYug4oIEgPlxULaxeDYCXvPELL4Kcoq
QcmP0oqO8KuKLI31xjiH0yvclFxbTHcFbQgUNAqBaLWZ8zuMhouRrzxG/b5M
qyt2gdVpqOatk94oC40EzRLklbGPROcasE9P8vIBIhKAw6kHoPuRPaKAx63o
OFthVfNmMXmoRGG2XFCogaZtHZioNcgepm2GAObJFdmBqi0jJj3xT53wxAld
kus0KhaJaeJo3GetLDYkTQNw1HsTUJB3Tp691yota2eR67m2imWcmW8qPvOX
hNidpqycNd1HNo8Nv+w4rsWTgC0pPaYNv7/wg/yHbKs5KdLNjLpjdreY+iy1
XpPv2Vmx9bdah59V66AwYVO7tW1Yq7qiWEUPO2ycLoP4W1L5lv/9NSeV/3U2
DPj378Ty1wnX/4yNGLry2Lt58LaSiF24t519vhv/7upWr1i507XevfipCsh2
9YOyGDlKg4rULqqHvxHPRv1DltStd/B3mi3x/xq7su7QkHUXVaHdmXWDcuBC
9z+5PuBvcPe3Hk/WK3/r02K98omtD/0SYqeH/UKhg1LBOLnKi5ssiWcLiXBH
7pU7mDb73JP4m/40ytTRd8E9TB6/whRhSrjMrzDFdtwMbIB6eIWC4TkGLwb6
Oqbne26N0Ng2sTW++KSM7IskPiisxV4ByXRmp1QaJxH51K/T5KbiGOo0SWJ0
E6BLeol3MGWW3RF03AWGL1S2cNMLMOz9P7GWyiFB4QAA

-->

</rfc>
