<?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.14 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amsuess-core-stateless-oscore-00" category="exp" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.0 -->
  <front>
    <title>Stateless OSCORE</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-core-stateless-oscore-00"/>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <date year="2024" month="September" day="09"/>
    <workgroup>core</workgroup>
    <keyword>oscore</keyword>
    <keyword>stateless</keyword>
    <keyword>server</keyword>
    <keyword>symmetric</keyword>
    <keyword>key distribution</keyword>
    <abstract>
      <?line 31?>

<t>OSCORE (Object Security for Constrained Restful Environemnts, <xref target="RFC8613"/>)
provides secure communication between peers that share symmetric key material.
This document describes how a server can operate with an arbitrarily large number of peers,
and how key material for this kind of operation can be provisioned to the client.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-amsuess-core-stateless-oscore/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        CoRE Research Group mailing list (<eref target="mailto:core@irtf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://codeberg.org/chrysn/stateless-oscore"/>.</t>
    </note>
  </front>
  <middle>
    <?line 38?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>[ See also abstract. ]</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>For the purpose of this document,
a server is stateless
if a new client can establishing an OSCORE context with the server
only increases the server’s storage requirements at rate of the logarithm of the number of existing clients.
(Practically, the storage requirements are not increased at all per new client,
but the required counter of established clients may increase to the point of requiring a longer identifier).</t>
      </section>
      <section anchor="motivating-background">
        <name>Motivating background</name>
        <t>The Network Time Security mechanism (<xref target="RFC8915"/>)
describes cookies that enable a client to request time from a server in a secure way
while the server remains stateless.</t>
        <t>Applied to OSCORE,
the same mechanism may protect any CoAP based time retrievals
as well as other CoAP based information discovery
where a server acting on a replayed request is not harmful,
for example DNS over CoAP <xref target="I-D.ietf-core-dns-over-coap"/>.</t>
        <t>Storing OSCORE contexts is not very costly in terms of memory:
when deriving from the master key without a master salt,
a security context containing a recipient ID,
a 4-byte recipient ID,
but no sender sequence number (could be global)
but no sender ID (it can be fixed 0-byte as suitable for servers without role reversal)
and no replay window (see <xref target="sec-impl-reqs"/>)
uses 20 bytes, so storing all possible 4 billion contexts “just” takes 80 Gigabytes,
which is managable for a server in the mid-2020s and may well fit in its RAM.
However, when used with clients that are unilaterally authenticated,
that limit can be exceeded by attackers,
creating a denial-of-service problem.</t>
      </section>
      <section anchor="sec-ops">
        <name>Operating a stateless OSCORE server</name>
        <section anchor="prerequisites">
          <name>Prerequisites</name>
          <t>An OSCORE server may operate in a stateless way
under a set of requirements.</t>
          <ul spacing="normal">
            <li>
              <t>The server does not perform role reversal with its clients.</t>
            </li>
            <li>
              <t>All resources accessible through that security context are safe in the sense of <xref target="RFC7252"/>,
meaning they do not take any other action on the resource than retrieval,
i.e., they are only GET and FETCH requests.  </t>
              <t>
A server MAY also use support methods that are not defined to be safe,
as long as the allowed operations take no actions other than retrieval
or the application is otherwise robust against replays sent in any order.</t>
            </li>
          </ul>
          <t>That the server may establish OSCORE contexts that are not stateless;
the constraints above do not apply to those contexts.
The server may tell those contexts apart from
a prefix to the KID,
the KID context,
or by using different lengths of KIDs / KID contexts
for the stateful contexts.</t>
        </section>
        <section anchor="sec-impl-reqs">
          <name>Implementation requirements</name>
          <t>As a stateless OSCORE server can not store a OSCORE context per peer,
it needs to re-derive the security context from data provided by the client as part of the request.
That information can be encoded in the KID or in the KID context.</t>
          <t>As the key material is re-derived,
the replay window is in an uninitialized state.
Consequently, the server can not decide whether a request is a replay.
Therefore, it MUST NOT use the sender’s nonce for the response, and MUST instead use an own sequence number.
As the sender sequence number for that context is not stored, it needs to use some global counter for sender sequence numbers.</t>
          <t>Some justification for why potentially replayed requests can safely be responded to
can be found in <xref section="3.1" sectionFormat="of" target="I-D.amsuess-lwig-oscore-00"/>.</t>
        </section>
        <section anchor="sec-impl-suggestion">
          <name>Suggested implementation</name>
          <t>A stateless server may use the following pattern to re-derive its keys:</t>
          <t>The server partitions its recipient IDs into two fields, an Internal Key ID (IKI) and an Internal Key Counter (IKC).
Their total length limits the number of clients an OSCORE context is active with at any time;
the separation allows the server to roll over its internal keys and notify clients whose state may get lost.
The IKC can be incremented but can not overflow;
instead, a new internal key with a new IKI needs to be created.
When the IKI number space is exhausted,
a new internal key may replace an old key (with the IKI wrapping in modulo arithmetic),
and clients using the replaced key lose access to the server through this mechanism.</t>
          <t>A typical size of the IKI is 1 byte,
while the IKC is sized 4 bytes.
This allows serving 2^40 or roughly 1 trillion clients,
and can be expanded to a total of 7 bytes (10^16 clients) within the default algorithm’s KID.</t>
          <t>For every IKI, the server maintains an internal key that is exclusively used as input material for OSCORE master keys.
The master secret of the OSCORE context corresponding to a key ID is derived by applying an extraction function
such as HKDF <xref target="RFC5869"/> to the key and the IKC.
The other parameters of the OSCORE context are pre-agreed.</t>
          <t>When a new client is provisioned,
the KID (consisting of IKI and IKC) and the master secret
are sent to the client through a secure channel.
From then on, the client can use that KID to send safe requests to the server,
and the server can reconstruct the security context from the IKI and IKC.</t>
          <t>The IKI and IKC are not protected:
The server can be made to derive the OSCORE context for any IKI/IKC combination by an attacker.
They are only verified when the derived key material successfully decrypts the request.</t>
          <t>When a client sends a request from a IKI that may be reused with a new key in the foreseeable future
(possibly taking into account some estimate of the request intervals of clients),
the server provisions the client with a new key through <xref target="sec-option"/>.</t>
          <t>There is no requirement in this specification to use this particular implementation.
For example, a server may also use information sent in the KID Context,
and may store the encrypted key material in the KID context instead of re-deriving it.
However, there is no known advantage to that.</t>
        </section>
      </section>
      <section anchor="sec-option">
        <name>Distributing key material</name>
        <t>The previously standardized methods of establishing an OSCORE context,
EDHOC <xref target="RFC9528"/> and the ACE-OSCORE profile <xref target="RFC9203"/> create key material by mutual agreement --
but for stateless servers, transfer from the server is necessary.</t>
        <t>Stateless contexts can be set up from non-stateless contexts:
When a client sends a request to a server,
the server can tell the client to switch to a stateless context using the OSCORE-Context-Setup option.
That option can be sent along with a successful response when there is room in the message,
or with an unsuccessful 4.01 Unauthorized response
(in which case the content of the OSCORE-Context-Setup indicate a context that is authorized).</t>
        <t>The OSCORE-Context-Setup option is Elective, Safe-to-Forward and NoCacheKey.
It is repeatable, and only sent in response messages.
The option number is CPA220.
Future specifications may describe their semantics of repeated options or their presence in a request;
recipients unaware of those semantics ignore them in requests, and ignore all but the first in the response.</t>
        <t>The content of the option is
[ yet to be specified, but will be some cnf/osc representation of the master secret and the server’s recipient ID ].
The KID context, the client’s recipient ID and the master salt are absent (KID context) or the empty byte string unless specified in the option.
The defaults for OSCORE version, HKDF and algorithm are those of the encapsulating OSCORE context
(if there is one -- this could also be established through CoAP over (D)TLS),
otherwise OSCORE’s defaults apply.</t>
        <t>A client receiving this option SHOULD NOT continue using the security session through which that option was received
any more for requests that are safe.
Instead, it SHOULD establish an OSCORE context with the provided details for further requests.
The client MAY rely on the server not to send requests
(and therefore does not need to process requests to the server-dictated / empty recipient ID),
and MAY forego the creation of keeping a replay window if it does not intend to send requests with multiple responses.</t>
        <t>A client MUST treat the KID context and its Sender ID as opaque values.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to register into the CoAP Option Numbers Registry in the CoRE Parameters group:</t>
      <ul spacing="normal">
        <li>
          <t>Number: CPA220.  </t>
          <t>
The RFC Editor is requested to replace “CPA220” with the assigned number at registration time,
and remove this paragraph.
The number 220 is suggested: It has the right properties,
is free,
and is the largest free number in the 1-byte extended space.
This leaves smaller numbers of the same space free for more new numbers
where delta encoding with other typical options
would allow the new number to use a shorter serialization.</t>
        </li>
        <li>
          <t>Name: OSCORE-Context-Setup</t>
        </li>
        <li>
          <t>Reference: <xref target="sec-option"/> of this document</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t><xref section="8.2" sectionFormat="of" target="RFC8915"/> on Cookie Encryption Key Compromise applies to the Internal Key.</t>
      <t>Failure to follow the requirement of using an own sequence number
would result in nonce reuse and thus possibly compromise of that security context’s key material.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8915">
          <front>
            <title>Network Time Security for the Network Time Protocol</title>
            <author fullname="D. Franke" initials="D." surname="Franke"/>
            <author fullname="D. Sibold" initials="D." surname="Sibold"/>
            <author fullname="K. Teichel" initials="K." surname="Teichel"/>
            <author fullname="M. Dansarie" initials="M." surname="Dansarie"/>
            <author fullname="R. Sundblad" initials="R." surname="Sundblad"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This memo specifies Network Time Security (NTS), a mechanism for using Transport Layer Security (TLS) and Authenticated Encryption with Associated Data (AEAD) to provide cryptographic security for the client-server mode of the Network Time Protocol (NTP).</t>
              <t>NTS is structured as a suite of two loosely coupled sub-protocols. The first (NTS Key Establishment (NTS-KE)) handles initial authentication and key establishment over TLS. The second (NTS Extension Fields for NTPv4) handles encryption and authentication during NTP time synchronization via extension fields in the NTP packets, and holds all required state only on the client via opaque cookies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8915"/>
          <seriesInfo name="DOI" value="10.17487/RFC8915"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-core-dns-over-coap">
          <front>
            <title>DNS over CoAP (DoC)</title>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Cenk Gündoğan" initials="C." surname="Gündoğan">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Thomas C. Schmidt" initials="T. C." surname="Schmidt">
              <organization>HAW Hamburg</organization>
            </author>
            <author fullname="Matthias Wählisch" initials="M." surname="Wählisch">
              <organization>TUD Dresden University of Technology &amp; Barkhausen Institut</organization>
            </author>
            <date day="28" month="June" year="2024"/>
            <abstract>
              <t>   This document defines a protocol for sending DNS messages over the
   Constrained Application Protocol (CoAP).  These CoAP messages are
   protected by DTLS-Secured CoAP (CoAPS) or Object Security for
   Constrained RESTful Environments (OSCORE) to provide encrypted DNS
   message exchange for constrained devices in the Internet of Things
   (IoT).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-dns-over-coap-07"/>
        </reference>
        <reference anchor="I-D.amsuess-lwig-oscore-00">
          <front>
            <title>DNS over CoAP (DoC)</title>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Cenk Gündoğan" initials="C." surname="Gündoğan">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Thomas C. Schmidt" initials="T. C." surname="Schmidt">
              <organization>HAW Hamburg</organization>
            </author>
            <author fullname="Matthias Wählisch" initials="M." surname="Wählisch">
              <organization>TUD Dresden University of Technology &amp; Barkhausen Institut</organization>
            </author>
            <date day="28" month="June" year="2024"/>
            <abstract>
              <t>   This document defines a protocol for sending DNS messages over the
   Constrained Application Protocol (CoAP).  These CoAP messages are
   protected by DTLS-Secured CoAP (CoAPS) or Object Security for
   Constrained RESTful Environments (OSCORE) to provide encrypted DNS
   message exchange for constrained devices in the Internet of Things
   (IoT).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-dns-over-coap-07"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <abstract>
              <t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a very compact and lightweight authenticated Diffie-Hellman key exchange with ephemeral keys. EDHOC provides mutual authentication, forward secrecy, and identity protection. EDHOC is intended for usage in constrained scenarios, and a main use case is to establish an Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
        <reference anchor="RFC9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework. It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </reference>
      </references>
    </references>
    <?line 220?>

<!--
# Change log

-->

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Tamme Dittrich for setting me on the track to this with his presentation of time synchronization on the RIOT Summit 2024.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA4VaXXMbx5V9n1/Rlh5MpgCIpGVHppPdsEgqYjmWVCJdW1tx
kmrMNIA2Z7on0z2EEBb/Wd72j+2593bPDCCu90UiBv1xP8899w7m83nxcK6+
KYpoY23O1YvbqKOpTQjqw+3lh0/XL4rKl043+K7q9CrOdRN6fD0vfWfmIa+e
+8APTk6KEo/WvtudK/O5LULsjG7O1c313dui2Pruft35vj1XtLx4MK4354VS
6eGl/3SNT422taz4k+3iauG7NZ52pvXnahNjG85fvSp9ZZamW9OXr8pNtwvu
1aE4RXFvdrizoivmKj2kP4eV8sl0D6aTP3dNY2JnS/6E7aqy0MEu+2i9K4rQ
6C7+45+9jyacq50JRaH7uPEdrphjj1JirMtNh31WO3XRhP/5N1+koFLvIpnm
oqdDNT80Sd2840/JxIvSN0VRzOdzpZdYrstYFOIVdfRh+aspo7o1Zd/ZuFMr
38F6jpZZZyr1yYS46mt17R5s551pXAwz9fj41ae3l2++O/3m6em4aDv/YCsT
oD9OMZCuaXpn4UCoqpYmbo1xqjWmCypudFRho7FsMBGbp4EhoUm9KO42NihE
S98YFxXOLWE2nL7xW6WTjVUJi/jWdNiltjZuFD7rbmkhd2frnap1tzbK9Q18
q/xKbp8V2lV8zvRG1jnSpfcWX2OxHEzC0zVLo1jDgAewSPRYDCVrC/EWYtfG
VlWNMHmpbuAXX/WlePmXv8KyRuk6+MH2C/XL37DypbozXWOdr/16VxRvWQbc
1HetD4akiFM7QPSsOp6OYWdXsIkz2yQPCwyX6WVtw8a6Ndkl+br0LprPUcxF
d6Vw9Q72sq5EggUTJt98TRf5TsOQnflnbztDkgQFD7LdWUajoABsHjdNfjBa
3XymUIQUIl1YFEcfyQaIjbrezeSuZ69AfDgfB7EquhR74Mduou6sQD7xKWl3
JamRbs92oMciAJw+6ppd2XoLy2GDHMJWg1ZuTcausM2urOmOF+y1n3y0D5qV
WuqSUchVBYLWqPeIdACTurONGTOqMeVGOxsadfT4SFnz/em3lDVjYJfe31uT
csM4yIyQyQ6FjCQWdFGRzl11vhnTwDr+m9Nuq3fFdmOxeXQh9gIV3CRioMVF
2+JsjmQJjVnBOwA4E2nJUoj7SPCg3Q6ocPERKpMvWJCOctc8ILYLHdTWwDn4
3+OkbrrWOqRXI9kECCw9pCI5TWdGNSgkYFBP2gCea73Dzqw24p1CAZjRAIlm
BaWr+aybFppevb9VdKLc+Pj4nzfzq4U1cSV1pXKAcHyNT7p9eoLut4g2umo/
J0K+hITDwxA5JRQCqQkUGY1pqBSR3FADsPFAh7AvyHSNDhRzhCqUXR5BqfPD
oOuUvSkgch7S//CNhFtnStuyw2+uaPXr+XIXzcFjCnbncZKr6GCyjyuHfDtC
6NcVwdW69ktdHx+sv7lSRzZmSFvZz7DxiVwDx4XeRo48Mq+4JQzKdL4mWegZ
nUso6nzyFBa5CpB6FIB0j49Qc27hmzncFyjOewKVsxNFF6F0AAlD8gHnsw/B
0rWv1dLWNWNu9smLX1HdXqio73HCmxP1Z7vWcgrFebkhpzXa6fUg9zQv2C+2
mp+dnJ0AUCAyRTTH6coSsiiLOz5d/LQo3vkt6TZT7N6ewpZBMoMGJyZBEqpa
TVWD0EtRvSZwIKJSUQphUW2b0cTmc2lMhcOWWBwj0IJrEIFPFK8DXFCA5n41
J7ltyZUGyjSCNR+kDvHScECosqaPL8nivg1PtOWl+tgZhrFgI5GKC3ewnoyQ
C6egx3AwAUjPoUJ2nCCigDJk+p26G6Gl8kaSBqdRju9HiViQTDxg/+/UBYzf
meD7rsReXeJf8X7cAEfXm0QPDjOF2YJemexWBLSUSOEhvz/79uzpaUaEz2jO
JywC4fIsHYUPA5hAk+bSTFAjZUOEoYvdCGl0ll2YxUxOovu5Sv75+o4j6e31
3eW7DFBkGKUusll+uvhvKfiII2RV2/ouQjAkUjWJJJKsMiubGMVSFKR7kYtU
e+h/khChhuisRk4SRCPkn6iSMXdfAxyUGIUmtE9czKbFWwvZEGnIL4X0QYGI
KZuJxDnODjZZh2hYUHXTcVpVKIiG6voFlu4pOYTXD1xkyswtqcgvgc3ZTSTm
Tioy8Z982KK42782UgLvr8FekGlGYyBn28Gsn3Nt/5FwM/2RN8wKmAY52QeK
lcquVkgZKF0bt44bxnusDurVdFMoVsmgrBFx4lFGzrwbqkiUKWLrPT4jWTri
IhIz/EZSE4CI8TyXyQMGRySICO2sANg4YEwQmjDnypTr/0EScbGqdNQq8XXG
pZHKUsCxHROLS9G9EOdPy3iGN0e9U5WTkmzlu+mndPOClaWHe6wbsThIXImP
9gsKFnAYEuo6i46mtv/CdWyzRUFNChfAOBDJfdtVKJ2VIUiXvJ/yicwyOLoQ
L7DyDFilfvr59k69/3DHuZuQpmIi7DxV2hwCgI2W7p8xGvAuyiGjK95JvcnW
HRboRTbD/1G/5XAdB48lTsJBULF8g68ZW3yTS/3AeqV4P3c8Rekt7aCiCkKb
EIE2bDdgeiB6jmyMJDxkYIFtSviEL5dZ+4qRq8h0gmgw+evxEcyXj/5mcUqx
xJQsd/v11q7HHp8ZGaXObb9e4yIKpv0kmuRNkDV4StkzSZ0JOGS3rTyhJmV3
i8JrOrefH1SVEIvhvJiiCwW/FUSlBVPqRZFIgLL14A6mrgI5nno9HA3r/4i4
JnZ18+PNMUfE4ZeXyT1YcXnMQWfhax/xtYCOEIdw0D5l/vFlD0cxDCs/5OZX
KDrxcoHZYKCNmJALyLStY1vAQEKc6VabZSWjKGF3iJHdIMCW8ZZNznZegx3U
XsDBKCiVMYFbK3IfoUsfh2Skq1aQ44ci5cksta3Tq5Mu/BymHKMdBzNpMtWi
+C+iaJFvvcmmCq1GnMMm5vNG94Hp2DPHk+Qc26WkKMgyPT4aGmI6ctuhElHk
IJYbdPI16ix3twZM71gmCNksUkAG5CqNHFiTsYTc5DKULT/QHKKuudUigFRx
11JXrAJALkMwyYOFp8ydZ5PmjixOYwAGxNdCrdPgJLmb+SSEO/v76xOCZb4X
6XuqQBASzxYtkkqZsrY6ZTYcIREKYX4vV6ij05O/n36Xdx6zwxLgg8zovqYm
fe3ZXgBNFIGFjDYMN1bQZ7ZPIyy3QBzhe65iHGSHljWs/EDIw7xcU7S2iKy9
6U3KjrENS7wht2AG4TMUtoNUAhYlQGNnkt73ks80fpHyxAyeCEqaqGBfl4jk
qncy7Ak9OhKI9+7Hq7fUiYKYfvvmu++fnnIM0Klk6uRAkVC4GyUrAoxarueF
JDYFYjPX685QFkga7E1+IO1kTDWSniOiXGkMg8MppkgKQqJBnD07FUy30+xh
wg9y8A4DBwpfZ+pF8Tb1wUSrZ9MtFFWCyXAnCROlGxU2P5SXvSSReDwo6ABj
Jo59mXnoc+wm50zSb1EkeBqeDKw0DTZMdT6tACkJGl3xbGjCpg7cwb2m44B+
xejnm6V1ad6541lk6vfYy5MOAtfQNKmSVlMSR0JsjxwhmAg+wDKxB0ym27Wp
Ogy0LIdAMjWZNUxYTpoTkfJsfQI/rt1jeyvhQ/emHCYehC5e2uk+wsfFUWrQ
d9R1CCxSipRMOISCUFFuJvPAgWdRQtN8aFLKjtOoKVXcHK9hGjQHsuWwk9GC
b5kBPIlvOyMkaUq2RRlCxxYVfCA6iTTxN1zpy77W3QHfWAhYyXBpNo4TyHhD
TzelwmG4UJLtMncYed4gDJ6+BhcjLx56+ku+PFBJ7r/nw7TJxsmkIk6Uv3fE
NnX1oKHGOo01dZQZwtXw2gFH7N2cJweJUlEeAGIerO9DTYJDBd1VXGJy+zod
qj47XJ4V11fvPlwm/Pv+27M3wL+czxeX1/O0HJ5fUTFL685OvsE6qfH7QiKb
GkQi/mLoYwfP5zzZYq57wAJBzIDMLqyIC2dIGOfmzlBW6W7Hk8C8degjU/7T
7KNvZT94//h2alh5/v8kH1eRDGcHUJYaWDMZ8AaEPIqH7Dq8bMIyxHjzFGTz
WxMhpjgwtWnyYVSE2jqeJqSkGnFl6GEGJJJ46jy0zuMzMtbacL+cX7L0bnLG
68XJqfrZyZsrjpR8anGEM2RKV+rEylkhd1CHD7RB68cDNbJt0j9zgfGW44Ts
v2EP2nBdG+bIM3WLcjOPfo7s3iKmOSLf+0tdbgzo+aK4idKOtghAQj/p6xiw
c4YP5kpGSQwj3ZaIKA65/HhxdnYCIGH83Achef2QB/9kBEtFt9E0RQyS7y3z
3HRuSEMcS1gJaKZ2zrox0H4ohi4FbNTpLdeZVZqPjCfbtUsw1IguUnhFzfQl
TWPz25SV7cKAa1nzZPQDLw7mppddOxPzNEv0pr6VDt1aOj31rKVbvUIPSMqy
UqnXSwfuc7Z9LvD1flumfvmbeGE63Jnk1uHyQ7qja2FWeslePpocc5zHZ6Zp
QTN4Sk5AilTqnQBO1jDbaUzEgQ2HKTsleLJEkJghcpuYuTJLIU5LVoCrdRtQ
ouKXbyuQW6sxYcH2gIhS2OQNAFeqpdl7/5WrKL8n4cbv6Or47i+3KMjjRFCu
+TqM4jPp5f4koRXsaaQc8YXJ+7fvPvz8lyuenJCM1vVmAlsDWQs07uXJqwgj
+BAnwLXVIV1hqoIYVkOhSUYcyWKeLhKHROrmftLGLMY4mfyNl5/DEKwyaEFq
8dSq75iPj5PduxGoabDbUSPi3bSs8Iw50dq8rzhKoSazpXFUTi0trcbt3B4+
T4HnwMDIMPAqxd80jFMTSuLQ4etE0vmtgqTRvTFtfq20N1FbkZUGYYigueoL
4cVGDfxv23pM/zANAx550U8y4hfshSEFp9wOb53otWCrcbgCG+z5oJfq5uL9
Bf/SAE5Ig+2i4Id2MIvYCipazleZweA6DuIPEjHvZbqlPvGqbuCy9BMQ9XHs
q+SXIfQKQ3acD0hdKH6rAR6irisbffeMBDI0eCFbXoxRpBHQa5rhpwJAr8ZF
kMQ6bSNDfbZv4x9GBgo+o9vNIt2e9uN0buzzPOxc3dCbz0T97XrDrUtrwF/p
NZiixSvwonyHlZX86wduAsxwdLLLqbzxg6cMN/o8OxEpsLk2+oF+yNGgGlBs
J+MmUOI3xDJs4ZMpZThBiauntThJXu5Wpo5ahsQ2E5D0piKNOlKNox0Jt2oE
KY/AhvMybwd1QfGXwtDxKDgRdnIo/1LmOTJA334yPN4vsWS/hfjiNxYUlsNr
+8PQHOeabxZntPWr4V0+AcIlv8NX10LyaZnM/Rq4qyFs5dcwZkj06XiQZiSA
IKIL+FZml9MfNTSp3AqiPj9cLsSESFYawliXBtbc7qW61wc1NHPlKBhb4Zm3
bl+Hg9/l8C9d6DcPRfGHr8DBX6rLjXZr/gEIffkfZL+LkrqR2lRrfvFRPJ6L
fKb644sVCpN5wa2GdvdsijvdIKSubKTfAW3S+DpyzWtMBlqatdyL4WxCJ86h
Q/JAv0oIO1eiurgUH/mITzcoTbd9Q29nz07OXi+K/wUbQ71JsyYAAA==

-->

</rfc>
