<?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-coap-over-gatt-07" category="std" consensus="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.1 -->
  <front>
    <title>CoAP over GATT (Bluetooth Low Energy Generic Attributes)</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-core-coap-over-gatt-07"/>
    <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="25"/>
    <workgroup>CoRE</workgroup>
    <keyword>CoAP, bluetooth, gatt</keyword>
    <abstract>
      <?line 57?>

<t>Interaction from computers and cell phones to constrained devices is limited by the different network technologies used,
and by the available APIs.
This document describes a transport for the Constrained Application Protocol (CoAP) that uses Bluetooth GATT (Generic Attribute Profile)
and its use cases.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Constrained RESTful Environments Working Group mailing list (core@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://gitlab.com/chrysn/coap-over-gatt"/>.</t>
    </note>
  </front>
  <middle>
    <?line 64?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> can be used with different network and transport technologies,
for example UDP on 6LoWPAN networks.</t>
      <t>Not all those network technologies are available at end user devices in the vicinity of the constrained devices,
which inhibits direct communication and necessitates the use of gateway devices or cloud services.
In particular, 6LoWPAN is not available at all in typical end user devices,
and while 6LoWPAN-over-BLE (IPSP, the Internet Protocol Support Profile of Bluetooth Low Energy (BLE), <xref target="RFC7668"/>) might be compatible from a radio point of view,
many operating systems or platforms lack support for it,
especially in a user-accessible way.</t>
      <t>As a workaround to access constrained CoAP devices from end user devices,
this document describes a way encapsulate generic CoAP exchanges in Bluetooth GATT (Generic Attribute Profile).
This is explicitly not designed as means of communication between two devices in full control of themselves --
those should rather build an IP based network and transport CoAP as originally specified.
It is intended as a means for an application to escape the limitations of its environment,
with a special focus on web applications that use the Web Bluetooth <xref target="webbluetooth"/>.
In that, it is similar to CoAP-over-WebSockets <xref target="RFC8323"/>.
GATT, which has read and write semantics, is not a perfect match for CoAP's request/response semantics;
this specification bridges the gap in order to make CoAP transportable over what is sometimes the only available protocol.</t>
      <section anchor="application-example">
        <name>Application example</name>
        <t>Consider a network of home automation light bulbs and switches,
which internally uses CoAP on a 6LoWPAN network
and whose basic pairing configuration can be done without additional electronic devices.</t>
        <t>Without CoAP-over-GATT,
an application that offers advanced configuration requires the use of a dedicated gateway device
or a router that is equipped and configured to forward between the 6LoWPAN and the local network.
In practice, this is often delivered as a wired gateway device and a custom app.</t>
        <t>With CoAP-over-GATT,
the light bulbs can advertise themselves via BLE,
and the configuration application can run as a web site.
The user navigates to that web site, and it asks permission to contact the light bulbs using Web Bluetooth.
The web application can then exchange CoAP messages directly with the light bulb,
and have it proxy requests to other devices connected in the 6LoWPAN network.</t>
        <t>For browsers that do not support Web Bluetooth,
the same web application can be packaged into an native application
consisting of a proxy process that forwards requests received via CoAP-over-WebSockets on the loopback interface to CoAP-over-GATT,
and a browser view that runs the original web application in a configuration to use WebSockets rather than CoAP-over-GATT.</t>
        <t>That connection is no replacement when remote control of the system is desired
(in which case, again, a router is required that translates 6LoWPAN to the rest of the network),
but suffices for many commissioning tasks.</t>
      </section>
      <section anchor="alternatives">
        <name>Alternatives</name>
        <t>Several approaches were considered, but considered unsuitable for the intended use cases:</t>
        <ul spacing="normal">
          <li>
            <t>CoAP over 6LoWPAN over BLE (BLE IPSP):
While this is the natural choice for transporting CoAP over BLE,
it is unavailable on typical end user devices.
There is no clear path toward how that would be integrated in platforms like Android or iOS,
and even if it were, creating a network connection to a nearby device from within an application might not be possible (if how WLAN networks are managed is any indication).  </t>
            <t>
[ TBD: Illustrate how easy IPSP is when only working link-local like CoAP-over-GATT does,
see also <eref target="https://gitlab.com/chrysn/coap-over-gatt/-/issues/10">https://gitlab.com/chrysn/coap-over-gatt/-/issues/10</eref>. ]</t>
          </li>
          <li>
            <t>GoldenGate <xref target="goldengate"/>:
This introduces significant network overhead,
and burdens the end user device application with shipping a full network stack
that is executed in a position where it can not integrate fully with the operating system's network stack.  </t>
            <t>
Moreover, this places a retransmission layer on top of a partially reliable transport (GATT),
duplicating effort and possibly aggravating congestion situations.</t>
          </li>
          <li>
            <t>CoAP over UDP over SLIP over GATT UART <xref target="nefzger"/>:
This is similar to the GoldenGate approach,
but built on the GATT UART provided with Nordic Semiconductor's libraries<!-- https://learn.adafruit.com/introducing-adafruit-ble-bluetooth-low-energy-friend/uart-service -->.  </t>
            <t>
This shares the network stack duplication and retransmission concerns of GoldenGate.</t>
          </li>
          <li>
            <t>slipmux <xref target="I-D.bormann-t2trg-slipmux"/> over BLE GATT UART service:
This is similar to the previous item;
the stack duplication concern is addressed,
but retransmissions are still active atop of a service that already provides some reliability.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
    </section>
    <section anchor="protocol-description">
      <name>Protocol description</name>
      <section anchor="gatt-basics">
        <name>Boundary conditions: GATT properties</name>
        <t>[ This section may be shortened in later iterations,
but is kept around while the protocol is being developed
to easily fix mistakes made from wrong assumptions. ]</t>
        <t>CoAP-over-GATT has different properties than UDP transported over the Internet:</t>
        <ul spacing="normal">
          <li>
            <t>Messages sent by one party are received by the other party in the order in which they are sent.
There is no re-ordering.  </t>
            <t>
(There is also a total order on all message exchanged between two peers,
but that property is not useful because it's often not accessible through the Bluetooth stacks.)</t>
          </li>
          <li>
            <t>There is limited reliabiliy built into the protocol.  </t>
            <t>
Data transmissions initiated by the data source can be
unreliable ("write without response", "notify")
or reliable ("write with response", "indicate").  </t>
            <t>
The caveat with their relability is that acknowledgements are sent by the BLE stack,
without consulting with the application.
(This is not only done for simplicity but also for power efficiency:
There is only a short time window in which the data source is listening for confirmations).
Thus, these confirmations can not serve to acknowledge that the a CoAP request contained in the event was read, understood and is being processed.  </t>
            <t>
The reliability mechanisms are still useful, though:
Both "write" and "notify"/"indicate" update the GATT characteristic's state,
and while a slow application may miss data when sent in fast succession,
it is reasonable to expect from the BLE stack to deliver the last data to the application
when no more data is sent.</t>
          </li>
          <li>
            <t>Reads and writes may be subtly confused:
When a characteristic is written to,
and it is read before the BLE server application has had time to interact with its BLE stack,
the written value may be echoed back at read time.  </t>
            <t>
This is likely not problematic when "notify"/"indicate" is used
instead of polling reads,
but it seems prudent to take precautions.</t>
          </li>
        </ul>
      </section>
      <section anchor="requests-and-responses">
        <name>Requests and responses</name>
        <t>CoAP-over-GATT uses a GATT Characteristics to transport requst and response messages.
Similar CoAP-over-UDP it offers both reliable and unreliable transfer and message deduplication,
but as GATT's properties (see <xref target="gatt-basics"/>) differ from UDP's,
it uses a different serialization and a different kind of message IDs.</t>
        <t>Tokens are used like with other CoAP transports,
and allow keeping multiple requests active at the same time.</t>
        <t>A GATT server announces service of UUID 8df804b7-3300-496d-9dfa-f8fb40a236bc (abbreviated US in this document),
with one or more pairs of characteristics of UUID 8bf52767-5625-43ca-a678-70883a366866 (the downstream characteristic, abbreviated UCD)
and ab3720c8-7fc0-41f8-aa2a-9a45c2c01a4b (the upstream characteristic, abbreviated UCU)
through BLE advertisements from a BLE peripheral (typically a constrained device),
which are discovered by a BLE central (typically an end user device).
The server and client roles of CoAP and GATT are independent of each other:
either BLE participant can send requests in a CoAP client role.</t>
        <t>It is expected that as this document matures,
shorter (16 or 32 bit) identifiers will be requested and assigned.
[ See also <eref target="https://gitlab.com/chrysn/coap-over-gatt/-/issues/7">https://gitlab.com/chrysn/coap-over-gatt/-/issues/7</eref>. ]</t>
        <section anchor="message-sub-layer">
          <name>Message sub-layer</name>
          <t>At the UCU/UCD pair of CoAP-over-GATT characteristics, each party maintains a single bit Message ID (initialized at 1 when a connection is created),
and the last Message ID sent by the peer (initialized at 0 when a connection is created).</t>
          <t>Messages are serialized as GATT values.
The GATT client sends a message by writing it to UCD (reliably using the "write with response" or unreliably using "write without response" operation);
the GATT server sends them reliably using an "indicate" or unreliably "notify" event on UCU.
The serialization format is the same for all, and illustrated in <xref target="fig-message"/>:</t>
          <figure anchor="fig-message">
            <name>Components of a message</name>
            <artwork><![CDATA[
0   1   2   3   4       8       16      varying
+---+---+---+---+-------+-------+-------+---------+----+---------+
| R | M | C | A |  TKL  |  Code | Token | Options | ff | Payload |
+---+---+---+---+-------+-------+-------+---------+----+---------+
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>a single message description byte,
compose of 4 bits R (reserved), M (Message ID), C (Confirm) and A (Acknowledge ID),
followed by 4 bits of token length (TKL).</t>
            </li>
            <li>
              <t>Code, token, options, payload marker and payload as in <xref target="RFC7252"/>.  </t>
              <t>
Unlike there, there is no 16-bit Message ID field
(a similar role is taken by bits M and A),
and in empty messages,
the code is not sent.</t>
            </li>
          </ul>
          <t>The bits are set as follows:</t>
          <ul spacing="normal">
            <li>
              <t>The R bit is reserved for future extensions;
it MUST be written as 0,
and when a value of 1 is written,
the whole written value MUST be ignored.</t>
            </li>
            <li>
              <t>The Message ID bit is always set to the current Message ID of the sender.</t>
            </li>
            <li>
              <t>The Confirm bit is set if the sender asks the peer to acknowledge that the message has been noted.</t>
            </li>
            <li>
              <t>The Acknowledge ID is always set to the peer's last sent Message ID that had the Confirm bit set.</t>
            </li>
          </ul>
          <t>When receiving a message with the C bit set,
the recipient MUST eventually send a response message with radio reliability.</t>
        </section>
        <section anchor="minimal-use-of-the-message-sub-layer">
          <name>Minimal use of the message sub-layer</name>
          <t>Unless an implementation sends fast bursts of updates or large quantities of data
and tunes for their througput,
it can use a simple subset of the message sub-layer functionality
and still interoperate with any peer.</t>
          <t>Such an application needs to</t>
          <ul spacing="normal">
            <li>
              <t>always send reliably (i.e., use Write with Response and Inform)</t>
            </li>
            <li>
              <t>set the Message ID to 0 on the first message it sends,</t>
            </li>
            <li>
              <t>set the Confirm bit on every non-empty message it sends
(and leaves it unset on empty messages),</t>
            </li>
            <li>
              <t>wait for the peer to send a message with Acknowledge matching the last Message ID it sent
before sending another non-empty message, and</t>
            </li>
            <li>
              <t>always send an acknowledgement right after receiving a non-empty message with the Confirm bit set.</t>
            </li>
          </ul>
          <t>This way,
there is no need to keep track of whether the Confirm bit is strictly necessary,
and whether more messages may be sent with the same message ID.</t>
        </section>
        <section anchor="using-the-message-sub-layer">
          <name>Using the message sub-layer</name>
          <t>[ This section reflects ongoing experimentation with the above serialization format and rules.
Senders may use other patterns as long as they do not stall their peer by not sending any messages after the Confirm bit was set. ]</t>
          <t>To send a message unreliably in terms of CoAP transmission,
a sender sets its latest Message ID in the M bit, sets C to 0, and populates the remaining bits per the rules above.
It then sends the message unreliably on the radio
(it may be sent reliably, especially when the peer set the C bit before).
After a CoAP-unreliable message, the sender may send more CoAP-unreliable messages.
It should avoid sending multiple messages in the same connection event
(because the peer's BLE stack would be likely to not pass on the earlier message).</t>
          <t>To send a message reliably in terms of CoAP transmission,
a sender sets its latest Message ID in the M bit, sets C to 1, and populates the remaining bits per the rules above.
It then sends the message reliably on the radio
(it may send unreliably if a message is expected from the peer soon, but then needs to be prepared to send the same message again).
After sending that message,
the sender does not send any other message until a message is received with A equal to the sent message's M bit.
The sender may need to send the very same message again if no earlier transmission of the message happened reliably.
[ Do we need to give timing guidance here? Probably not, because it only happens if there is some expectation in the first place. ]
The sender may cancel the transmission by sending an empty message with the same M and C bits,
or by sending different message with these bits (which are then all unreliable transmissions).</t>
          <t>When receiving a message with the C bit set,
it is up to the recipient when to send the radio-reliable message.
If it is expected that a radio-reliable message will be sent soon,
it is permissible and useful to send unrelated unreliable messages that already account for the set C bit in their A bit.</t>
        </section>
        <section anchor="message-deduplication">
          <name>Message deduplication</name>
          <t>CoAP-over-GATT participants MUST ignore a message arriving at a characteristic
if it is identical to the one received previously in the same connection.
(The first message is never ignored).</t>
          <t>Note that it is not possible to send two identical consecutive messages unreliably.
When sending identical requests, the sender may vary the token.
Sending identical responses generally is rarely significant, even with the generalized <xref target="I-D.bormann-core-responses"/>,
because the mechanism to make responses "non-matching" in that document's terminology typically incurs variation.
When it does not, but the repetition is still significant, sending the messages reliably becomes necessary.</t>
        </section>
        <section anchor="requests-and-responses-1">
          <name>Requests and responses</name>
          <t>CoAP requests and responses are built on the message sub-layer
as they are in <xref target="RFC7252"/>:
requests are sent with a token chosen by the CoAP client,
and the CoAP server sends a response with the same token.</t>
          <t>Responses and message-layer acknowledgments can happen in the same message.
Unlike in <xref target="RFC7252"/>, there is no association between a request and its message ID:
Any message may serve as an acknowledgement;
it is always only the token that matches requests to responses.</t>
        </section>
        <section anchor="fragmentation">
          <name>Fragmentation</name>
          <t>Attribute values are limited to 512 Bytes (<xref target="bluetooth52"/> Part F Section 3.2.9),
practically limiting blockwise operation (<xref target="RFC7959"/>) to size exponents to 4 (resulting in a block size of 256 byte).
Even smaller messages might enhance the transfer efficiency
when they avoid fragmentation at the L2CAP level. [ TBD: Verify: ]</t>
        </section>
        <section anchor="multiple-characteristics">
          <name>Multiple characteristics</name>
          <t>If a server provides multiple UCU and UCD typed characteristics,
they form pairs in the sequence in which they are listed.
By using them in parallel,
multiple messages can be sent without waiting for individual confirmation.
This is similar to using RFC7252 with NSTART &gt; 1,
and may be used by the GATT client if the GATT server lists multiple pairs of UCU/UCD characteristics.
The GATT server can send messages only through UCU characteristics on which the GATT client enabled "indicate" or "notify";
if the GATT client does not support multiple characteristics,
it will just pick any pair, and only enable them on the pair's UCU.</t>
          <t>Each characteristic has its independent message ID bits.
All characteristics of a service share a single token space,
and responses need not necessarily be sent on the characteristic the request was sent on.</t>
          <t>The use of muliple characteristics is primarily practical
when large amounts of data are to be transferred.
These transfers can utilize much of BLE's bandwidth
because they make it easy to send much data within a single BLE connection event.</t>
          <t>Implementers are encouraged to benchmark their applications
and show that their throughput is limited by the number of characteristics used
before supporting multiple characteristics.</t>
        </section>
        <section anchor="communication-example">
          <name>Communication example</name>
          <t>The example illustrated in <xref target="fig-communication"/>
shows an observation request
with reliable and unreliable responses.
It chooses the most typical configuration
where the GATT server is also the BLE peripheral
(and thus sends avertisements).
The GATT client is also the CoAP client here.</t>
          <figure anchor="fig-communication">
            <name>Example message flow</name>
            <artwork><![CDATA[
    GATT server                          GATT client

  Send BLE advertisement with one UCU and one UCD ---------->

(Pairing in Just-Works mode and discovery not illustrated)

  <----- Write+Resp. M=1 C=1 A=0 T="01" GET /temp, Observe: 0

(The server sends temperature values unreliably for some time)

  Notify M=1 C=0 A=1 T="01" 2.05 Content, Obs: 1, "22°C" --->

  Notify M=1 C=0 A=1 T="01" 2.05 Content, Obs: 2, "21°C" --->

  <----- Write+Resp. M=0 C=1 A=0 T="02" GET /model

  Indicate M=1 C=1 A=0 T="02" 2.05 Content, "ExampleScan" -->

  <----- Write+Resp. M=0 C=0 A=1 empty

  Notify M=0 C=0 A=0 T="01" 2.05 Content, Obs: 3, "20°C" --->

(At this point, the temperature isn't changing for some time,
and the server sends a reliable notification)

  Indicate M=0 C=1 A=0 T="01" 2.05 Content, Obs: 4, "20°C" ->

  <----- Write+Resp. M=0 C=0 A=0 empty
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="addresses">
        <name>Addresses</name>
        <t>The URI scheme associated with CoAP over GATT is "coap"
as per the recommendation of <xref section="6" sectionFormat="of" target="I-D.ietf-core-transport-indication"/>.
The default value of Uri-Host is the MAC address of the CoAP server,
in hexadecimal encoding, followed by <tt>.ble.arpa</tt>.
<cref anchor="arpa-alt">The use of <tt>.ble.alt</tt> as defined in <xref target="RFC9476"/> was considered instead of <tt>.ble.arpa</tt>, but rejected for lack of management of its subdomains. Language from the <tt>.alt</tt> specification may be used when it comes to describing how this is not disturbing DNS operations.</cref></t>
        <t>User information and port are always absent with this scheme.</t>
        <t>Assembling the URI of a request for the discovery resource of a BLE device with the MAC address 00:11:22:33:44:55 would thus be assembled, under the rules of <xref section="6.4" sectionFormat="of" target="RFC7252"/>, to <tt>coap://001122334455.ble.arpa/.well-known/core</tt>.</t>
        <t>Locally defined host or service name registries may be used to create names
that are more suitable for human interaction.
For DNS, which is widely used for this purpose,
no record types are registered that map to Bluetooth MAC addresses at the time of writing.</t>
        <t>Note that on some platforms (e.g. Web Bluetooth <xref target="webbluetooth"/>),
the peer's or the own address may not be known application.
They may come up with an application-internal registered name component
(e. g. <tt>coap://id-SomeInternalIdentifier.alt/.well-known/core</tt>,
in this case using the <tt>.alt</tt> zone from <xref target="RFC9476"/>),
but must be aware that those can not be expressed towards anything outside the local stack --
the same way they would avoid using IPv6 zone identifiers or URIs whose host name is <tt>localhost</tt>.</t>
        <section anchor="use-with-persistent-addresses">
          <name>Use with persistent addresses</name>
          <t>When services are meant to provide long-lived and universally usable URIs,
addresses based on MAC addresses can be impractical,
because they fluctuate on hardware changes.
(Moreover, privacy mechanisms on the device or the platform can render them unusable even before hardware changes).</t>
          <t>In the absence of a usable host or service name registry,
implementers may opt for non-GATT addresses right away.
<xref section="2.4.1" sectionFormat="of" target="I-D.ietf-core-transport-indication"/> provides the means to advertise a different canonical address,
and to announce availability of that advertised service on the present transport.</t>
          <t>When long-lived addresses circumvent privacy preserving measures,
considerations concering the tracking of devices [ are TBD along the lines of "don't make it discoverable to unauthorized sources, and in case of doubt let the peer show its credentials first" ].</t>
        </section>
      </section>
    </section>
    <section anchor="further-development">
      <name>Further development</name>
      <section anchor="compression-and-reinterpretation-of-non-coap-characteristics">
        <name>Compression and reinterpretation of non-CoAP characteristics</name>
        <t>The use of SCHC is being evaluated in combination with CoAP-over-GATT;
the device can use the characteristic UUID to announce the static context used.</t>
        <t>Together with non-traditional response forms (<xref target="I-D.bormann-core-responses"/>
and contexts that expand, say, a numeric value 0x1234 to a message like</t>
        <artwork><![CDATA[
2.05 Content
Response-For: GET /temperature
Content-Format: application/senml+cbor
Payload (in JSON-ish equivalent):
[
    {1 /* unit */: "K", 2 /* value */: 0x1234}
]
]]></artwork>
        <t>This enables a different use case than dealing with limited environments:
Accessing BLE devices via CoAP without application specific gateways.
Any required information about the application can be expressed in the SCHC context.</t>
      </section>
      <section anchor="additional-use-of-advertisements">
        <name>Additional use of advertisements</name>
        <t>In the current specification,
advertisements are used to indicate that CoAP-over-GATT is being used.</t>
        <t>If Service Data is transported in the advertisement,
it contains an identifier of the device in the <tt>ble-sd.arpa</tt> zone,
such that the lower case hexadecimal representation of the Service Data value is prepended to <tt>.ble-sd.arpa</tt>
to form a name for the device.
There is no expectation for these names to be globally unique:
considerations for beacon lengths may require them to be as short as 2 bytes.
They are local alias names,
comparable to <tt>hostname.local</tt>,
that help applications filter devices
rather than establishing a connection with several devices
just to find the intended one.</t>
        <t>The use of Service Data names has two upsides compared to filtering by MAC address:</t>
        <ul spacing="normal">
          <li>
            <t>Service Data identifiers can be stable across changes in hardware.</t>
          </li>
          <li>
            <t>Service Data identifiers can be queried even on platforms
on which MAC addresses are not accessible,
such as on Web Bluetooth.</t>
          </li>
        </ul>
        <t>Two more uses of them are being considered:</t>
        <ul spacing="normal">
          <li>
            <t>Some resource metadata might already be transported in advertisements.  </t>
            <t>
These would need to be compact (in the order of magnitude of 10 bytes or less),
and could contain data otherwise only discovered by querying the .well-known/core resource,
or (hashes of) AS and audience values for ACE
to facilitate connection creation with a device known by its managed identity.  </t>
            <t>
[ This is largely superseded by Service Data identifiers:
The level of per deployment customization for what would and would not be hashed
is likely so large that there would not be any interoperability exceeding plain identifiers anyway. ]</t>
          </li>
          <li>
            <t>Advertisements could contain broadcast CoAP messages.  </t>
            <t>
Given that these non-traditional responses can not have embedded requests (as defined in <xref target="I-D.bormann-core-responses"/>) due to size contraints,
a mechanism such as <xref target="I-D.ietf-core-observe-multicast-notifications"/> could be used to distribute some consensus request:
Devices would learn that there is a consensus multicast request,
and convey any response by sending BLE advertisements.  </t>
            <t>
In some cases,
a consensus request may be global:
For example,
devices willing to participate in an <xref target="I-D.ietf-lake-authz"/> mediated enrollment
would respond to a conensus request that is an empty POST to their /.well-known/edhoc resource.
A field in an advertisement "responding" to that may then contain an EDHOC message 1,
and receivers can attempt to process it without further radio traffic,
only establishing a GATT connection upon success.
The kind of request that elicited that response, as well as possibly some constant prefix
(fixed method or suites)
is encoded in the type of field (possibly a dedicated service with own service data).</t>
          </li>
        </ul>
      </section>
      <section anchor="protocol-details">
        <name>Protocol details</name>
        <ul spacing="normal">
          <li>
            <t>Is there any good reason to allow read operations?  </t>
            <t>
A GATT client that is waiting for a Confirm bit to be acknowledged might attempt a Read
(for the case that the confirmation arrived in an unreliable message),
but might just as well perform the last write again.  </t>
            <t>
Reading would be more efficient (because it can happen without application intervention, and no data is sent),
but the added complexity might not be worth the enhancements.</t>
          </li>
          <li>
            <t>Fragmentation.
If the current approach of requiring devices to support large MTU sizes turns out to be impractical,
or if GATT level fragmentation vastly outperforms CoAP fragmentation,
it may be necessary to use composite reads and writes on GATT.  </t>
            <t>
Care has to be taken to use only operations supported by <xref target="webbluetooth"/>: that API does not expose reads with offsets.  </t>
            <t>
Offset based fragmentation may also be incompatible with the write-with-response approach suggested for reliability.</t>
          </li>
          <li>
            <t>Usability from WebBluetooth  </t>
            <t>
WebBluetooth clients may be unaware that two protocol instances
are running between the client and the server at the same time,
without any indication on the BLE side.  </t>
            <t>
Is there anything this protocol can do to help the clients discover
(or even resolve) the situation?  </t>
            <t>
See also <eref target="https://gitlab.com/chrysn/coap-over-gatt/-/issues/9">https://gitlab.com/chrysn/coap-over-gatt/-/issues/9</eref>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA considerations</name>
      <section anchor="blearpa-ble-sdarpa">
        <name>ble.arpa, ble-sd.arpa</name>
        <t>IANA is asked to create two new reserved domain names in the .arpa name space as described in <xref target="rfc6761"/>:
the suffixes <tt>.ble.arpa</tt> and <tt>.ble-sd.arpa</tt>.</t>
        <t>The expectation for Application Software are
that no DNS resolution is attempted;
instead, the hexadecimal prefix is processed into a binary address
(6 bytes for <tt>.ble.arpa</tt>, arbitrary lengths for <tt>.ble-sd.arpa</tt>),
and any operation on that address is pointed to the Bluetooth Low Energy device
with the indicated MAC address or Service Data, respectively.</t>
        <t>The Domain Reservation Considerations from <xref section="5" sectionFormat="of" target="RFC6761"/> for both domains are:</t>
        <ul spacing="normal">
          <li>
            <t>Users:
Users are not expected to recognize those names as special, merely as distinct from other names.</t>
          </li>
          <li>
            <t>Application Software:
Writers of application software are expected to pass them on to their CoAP implementation.
CoAP implementations are expected to recognize them as Bluetooth addresses,
and use their Bluetooth addresses
and MUST NOT pass them on to DNS based resolvers
(unless the API resolver happens to explicitly support resolution into BLE addresses, see below).</t>
          </li>
          <li>
            <t>Name resolution APIs and libraries:
Name resolution APIs and libraries MAY indicate that .ble.arpa names resolve to the BLE MAC address literals encoded inside them
(but no details for this are specified in known resolution APIs or libraries).
Otherwise, they SHOULD report them as NXDOMAIN.</t>
          </li>
          <li>
            <t>Caching DNS Servers:
Caching DNS servers MAY recognize the special domains and report them as NXDOMAIN.
Otherwise, they will cache the .arpa DNS servers' responses.</t>
          </li>
          <li>
            <t>Authoritative DNS Servers:
Authoritative DNS servers MAY recognize the special domains and report them as NXDOMAIN.
Otherwise, they will cache the .arpa DNS servers' responses.</t>
          </li>
          <li>
            <t>DNS Server Operators:
No impact on DNS server operators is expected.</t>
          </li>
          <li>
            <t>DNS Registries/Registrars:
Any changes to .ble.arpa or .ble-sd.arpa go through updates to this document and IANA.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <t>All data received over GATT is considered untrusted;
secure communication can be achieved using OSCORE <xref target="RFC8613"/>.</t>
      <t>Physical proximity can not be inferred from this means of communication.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC7595">
          <front>
            <title>Guidelines and Registration Procedures for URI Schemes</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <date month="June" year="2015"/>
            <abstract>
              <t>This document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes. It obsoletes RFC 4395.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="35"/>
          <seriesInfo name="RFC" value="7595"/>
          <seriesInfo name="DOI" value="10.17487/RFC7595"/>
        </reference>
        <reference anchor="rfc6761">
          <front>
            <title>Special-Use Domain Names</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
            <date month="February" year="2013"/>
            <abstract>
              <t>This document describes what it means to say that a Domain Name (DNS name) is reserved for special use, when reserving such a name is appropriate, and the procedure for doing so. It establishes an IANA registry for such domain names, and seeds it with entries for some of the already established special domain names.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6761"/>
          <seriesInfo name="DOI" value="10.17487/RFC6761"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7668">
          <front>
            <title>IPv6 over BLUETOOTH(R) Low Energy</title>
            <author fullname="J. Nieminen" initials="J." surname="Nieminen"/>
            <author fullname="T. Savolainen" initials="T." surname="Savolainen"/>
            <author fullname="M. Isomaki" initials="M." surname="Isomaki"/>
            <author fullname="B. Patil" initials="B." surname="Patil"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="C. Gomez" initials="C." surname="Gomez"/>
            <date month="October" year="2015"/>
            <abstract>
              <t>Bluetooth Smart is the brand name for the Bluetooth low energy feature in the Bluetooth specification defined by the Bluetooth Special Interest Group. The standard Bluetooth radio has been widely implemented and available in mobile phones, notebook computers, audio headsets, and many other devices. The low-power version of Bluetooth is a specification that enables the use of this air interface with devices such as sensors, smart meters, appliances, etc. The low-power variant of Bluetooth has been standardized since revision 4.0 of the Bluetooth specifications, although version 4.1 or newer is required for IPv6. This document describes how IPv6 is transported over Bluetooth low energy using IPv6 over Low-power Wireless Personal Area Network (6LoWPAN) techniques.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7668"/>
          <seriesInfo name="DOI" value="10.17487/RFC7668"/>
        </reference>
        <reference anchor="webbluetooth" target="https://webbluetoothcg.github.io/web-bluetooth/">
          <front>
            <title>Web Bluetooth</title>
            <author initials="R." surname="Grant">
              <organization/>
            </author>
            <author initials="O." surname="Ruiz-Henríquez">
              <organization/>
            </author>
            <date year="2020" month="February" day="24"/>
          </front>
        </reference>
        <reference anchor="goldengate" target="https://fitbit.github.io/golden-gate/">
          <front>
            <title>Golden Gate</title>
            <author initials="" surname="Fitbit, Inc">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="nefzger" target="https://www.maibornwolff.de/en/blog/talk-coap-me-iot-over-bluetooth-low-energy">
          <front>
            <title>Talk CoAP to me – IoT over Bluetooth Low Energy</title>
            <author initials="" surname="Matthias Nefzger">
              <organization/>
            </author>
            <date year="2021" month="March" day="01"/>
          </front>
        </reference>
        <reference anchor="RFC8323">
          <front>
            <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="S. Lemay" initials="S." surname="Lemay"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="B. Silverajan" initials="B." surname="Silverajan"/>
            <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor"/>
            <date month="February" year="2018"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP), although inspired by HTTP, was designed to use UDP instead of TCP. The message layer of CoAP over UDP includes support for reliable delivery, simple congestion control, and flow control.</t>
              <t>Some environments benefit from the availability of CoAP carried over reliable transports such as TCP or Transport Layer Security (TLS). This document outlines the changes required to use CoAP over TCP, TLS, and WebSockets transports. It also formally updates RFC 7641 for use with these transports and RFC 7959 to enable the use of larger messages over a reliable transport.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8323"/>
          <seriesInfo name="DOI" value="10.17487/RFC8323"/>
        </reference>
        <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="RFC7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks. Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates. In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS). These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
              <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs. In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers. Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
              <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations. Therefore, this specification updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7959"/>
          <seriesInfo name="DOI" value="10.17487/RFC7959"/>
        </reference>
        <reference anchor="bluetooth52" target="https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=478726">
          <front>
            <title>Bluetooth Core Specification v5.2</title>
            <author>
              <organization/>
            </author>
            <date year="2019" month="December" day="31"/>
          </front>
        </reference>
        <reference anchor="I-D.bormann-t2trg-slipmux">
          <front>
            <title>Slipmux: Using an UART interface for diagnostics, configuration, and packet transfer</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universitaet Bremen TZI</organization>
            </author>
            <author fullname="Tobias Kaupat" initials="T." surname="Kaupat">
              <organization>Lobaro UG</organization>
            </author>
            <date day="4" month="November" year="2019"/>
            <abstract>
              <t>   Many research and maker platforms for Internet of Things
   experimentation offer a serial interface.  This is often used for
   programming, diagnostic output, as well as a crude command interface
   ("AT interface").  Alternatively, it is often used with SLIP
   (RFC1055) to transfer IP packets only.

   The present report describes how to use a single serial interface for
   diagnostics, configuration commands and state readback, as well as
   packet transfer.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-slipmux-03"/>
        </reference>
        <reference anchor="I-D.bormann-core-responses">
          <front>
            <title>CoAP: Non-traditional response forms</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="1" month="September" year="2024"/>
            <abstract>
              <t>   In CoAP as defined by RFC 7252, responses are always unicast back to
   a client that posed a request.  The present memo describes two forms
   of responses that go beyond that model.  These descriptions are not
   intended as advocacy for adopting these approaches immediately, they
   are provided to point out potential avenues for development that
   would have to be carefully evaluated.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-core-responses-03"/>
        </reference>
        <reference anchor="I-D.ietf-core-transport-indication">
          <front>
            <title>CoAP Transport Indication</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP, [RFC7252]) is available
   over different transports (UDP, DTLS, TCP, TLS, WebSockets), but
   lacks a way to unify these addresses.  This document provides
   terminology and provisions based on Web Linking [RFC8288] to express
   alternative transports available to a device, and to optimize
   exchanges using these.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-transport-indication-06"/>
        </reference>
        <reference anchor="RFC9476">
          <front>
            <title>The .alt Special-Use Top-Level Domain</title>
            <author fullname="W. Kumari" initials="W." surname="Kumari"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document reserves a Top-Level Domain (TLD) label "alt" to be used in non-DNS contexts. It also provides advice and guidance to developers creating alternative namespaces.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9476"/>
          <seriesInfo name="DOI" value="10.17487/RFC9476"/>
        </reference>
        <reference anchor="I-D.ietf-core-observe-multicast-notifications">
          <front>
            <title>Observe Notifications as CoAP Multicast Responses</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server, and receive notifications as unicast
   responses upon changes of the resource state.  In some use cases,
   such as based on publish-subscribe, it would be convenient for the
   server to send a single notification addressed to all the clients
   observing a same target resource.  This document updates RFC7252 and
   RFC7641, and defines how a server sends observe notifications as
   response messages over multicast, synchronizing all the observers of
   a same resource on a same shared Token value.  Besides, this document
   defines how Group OSCORE can be used to protect multicast
   notifications end-to-end between the server and the observer clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-09"/>
        </reference>
        <reference anchor="I-D.ietf-lake-authz">
          <front>
            <title>Lightweight Authorization using Ephemeral Diffie-Hellman Over COSE</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Mališa Vučinić" initials="M." surname="Vučinić">
              <organization>INRIA</organization>
            </author>
            <author fullname="Geovane Fedrecheski" initials="G." surname="Fedrecheski">
              <organization>INRIA</organization>
            </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <date day="5" month="July" year="2024"/>
            <abstract>
              <t>   This document describes a procedure for authorizing enrollment of new
   devices using the lightweight authenticated key exchange protocol
   Ephemeral Diffie-Hellman Over COSE (EDHOC).  The procedure is
   applicable to zero-touch onboarding of new devices to a constrained
   network leveraging trust anchors installed at manufacture time.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-authz-02"/>
        </reference>
        <reference anchor="RFC6761">
          <front>
            <title>Special-Use Domain Names</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
            <date month="February" year="2013"/>
            <abstract>
              <t>This document describes what it means to say that a Domain Name (DNS name) is reserved for special use, when reserving such a name is appropriate, and the procedure for doing so. It establishes an IANA registry for such domain names, and seeds it with entries for some of the already established special domain names.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6761"/>
          <seriesInfo name="DOI" value="10.17487/RFC6761"/>
        </reference>
      </references>
    </references>
    <?line 612?>

<section anchor="change-log">
      <name>Change log</name>
      <t>Since -06:</t>
      <ul spacing="normal">
        <li>
          <t>Sketch usage example with EDHOC message 1 in beacons.</t>
        </li>
        <li>
          <t>Restructured to group "further development" points together.</t>
        </li>
        <li>
          <t>Discourage multi-characteristic operation unless necessary.</t>
        </li>
        <li>
          <t>Minor clarifications.</t>
        </li>
      </ul>
      <t>Since -05:</t>
      <ul spacing="normal">
        <li>
          <t>Use <tt>coap://${MAC}.ble.arpa</tt> instead of <tt>coap+gatt://</tt>.</t>
        </li>
        <li>
          <t>Apply template to IANA considerations.</t>
        </li>
      </ul>
      <t>Since -04:</t>
      <ul spacing="normal">
        <li>
          <t>Point out .arpa / .alt considerations.</t>
        </li>
      </ul>
      <t>Since -03:</t>
      <ul spacing="normal">
        <li>
          <t>Define semantics of service data field, define ble-sd.arpa for that purpose.</t>
        </li>
        <li>
          <t>Switch to .arpa names for MAC addresses for consistency with service data names.</t>
        </li>
        <li>
          <t>Use one characteristic per data direction. This  </t>
          <ul spacing="normal">
            <li>
              <t>simplifies implementations on platforms with little control over change
events,</t>
            </li>
            <li>
              <t>removes the necessity to process the R bit, and</t>
            </li>
            <li>
              <t>frees up that bit in messages.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Add communication example.</t>
        </li>
        <li>
          <t>Reference more open issues, including intention to get shorter IDs.</t>
        </li>
      </ul>
      <t>Since -02:</t>
      <ul spacing="normal">
        <li>
          <t>Message format extended by a leading byte, the option to have a token.
This enables role reversal and concurrent requests.</t>
        </li>
        <li>
          <t>The UC identifier was changed to reflect the incompatible change in protocol.</t>
        </li>
        <li>
          <t>A section on used BLE properties was added.</t>
        </li>
        <li>
          <t>A section providing outlook on other data for advertisements was added.</t>
        </li>
      </ul>
      <t>Since -01:</t>
      <ul spacing="normal">
        <li>
          <t>Point out (possibly conflicting) development directions.</t>
        </li>
        <li>
          <t>Describe URI scheme more completely, including persistent addresses.</t>
        </li>
        <li>
          <t>Aim for standards track.</t>
        </li>
        <li>
          <t>Describe rejeced alternative approaches.</t>
        </li>
      </ul>
      <t>Since -00:</t>
      <ul spacing="normal">
        <li>
          <t>Add note on SCHC possibilities.</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
58zsxi3+oEO56H5I7LJkLA3MxY3c1GrTjL1STW9C1C4uX6BxnzgoTuC6xU2v
dU+G+Dh+jp1mkuCNQOIqsxu2w0zBreQyYsfdpEUZBF0TLWIKm8phPsdPelVd
yp98h5Zlb52XW86yyPy2oGlVZgBqMISeW6GSxFqMBL6U62/01qUWZpz6rGz/
HZkY5JrE1aG1HxOiO98wz7mjLJAAegGeuA7uueiblj6RZxUZ/gQt0r1Ba4yy
H7N7V15XtfkZP6i7U8/T1+xqZtPUBjcCD/cSXr/mLw1M2lpfFecZX7gox9dO
4qAvxQmmLtfFF1IlsSOuzuBwozDJWmOkruvudEY25UQKdwNwnoFbfIq69R0F
YIMr9TqEOjykJiQaqhrBi353t0QnZsU9jAL7IupJBr1u+5dIx5IWVsgw4UtQ
sQekSwOJTQPIP3TDf3mwkDtBJvfAESa7hq2GDXxc9PCZU6QxQlDxC2FtRQwX
i2tWlXm+kjZ6wYacRCIwANaHy41n8i2Ab9/c3GpjV1aZXtLDpssy8doDsxwu
5O6Sgtcv7BzoxtyI5GYVriQlUXg2p9deXP305tL70yeOGNpRpnYDreQEn6YP
eOZe1jUDzDUGkssqxJXoo2D1xtXovu2VulSnudo1XFIZnqCTVvxl8B6aLA/Q
cKkzxyFDcDqwhL/9ICjPq03MkSjJ2EdcsKC/LKr8BDfPRUPSz9YD0Tuc1e6c
QaTtAITg+LAbMhWM1nSxspTRNj7lwkZiIC5wMOSHcJ7X0D3XtcoGmH2B4Rgy
KoLZhK+v87CDLlH8XcT0DouFjnfCVoy4156v7lfXNJQ6m6rkjHlaBCNGfUUX
e4i/GrZzSHuiddy230U5cHMTZA/2oRxtMH8WnmnjLp7IxVRu+mUpBhwc6TgF
xO6Da8ghyx206AZtWY+FN2wSkIFAACGjssvemIxBN2kHLn/KA1WhCT7y6JFw
hN2GnA3JiWvDkNM7X/W7psC41/NeIOOmgTk+lgKqUzTQ4trsIUbu1e171uv0
UctztFpHv15ejV2GbC6MIKa335p0T9hFe3rbKM51um3vKZ1QolrRtwK6oZRy
DxQEqnaHidAOOpHSmMu4kut32iXBlyV1CZb8jn3dYcWl2E1HT4XjLt5ed60w
aPqqHQAiXvM5Wvt56zf8syYk+wjAobiIzuMRgwnhvrzBRxnhn966dtSq28VC
7szP/RQid/HuK/O+dn4GJ5bJ7+2+VgMDVYJ/q5h2JYgizDVvymC2FqspxB1G
qgRtIfcTgom7KvM7RdPdERbhwKL+PEWXzeOLHOQTiekMtFCjF8M4xFTAIGhp
CZJysNXBUXuHF7oDpvSeu8brMr+3A4HJzdz7TroP/s/HDTz/lhNt1xevL0w/
BmX16spF+L4WHwtTwI/HYVnru17pB5gv7Ka7Yys1QA3dVPXzGhJEc/OSFCZl
Grt6an9XzZPzp+cnaGTl82LY6UdaIihHMrn6MfrYdbn0w+9w1vVNOW+YU+iP
hLqkv1A2ZPy2rvNXdbhNv460GCoV+DCxIIZP0gY6bkmH7BokDkniNciLDs81
9gE0vYpqXJEpqfCsC/P9I/5UOmAhGLPvOC72VQnjGgWEHMyMjw381ynVXlpd
miftF6mrXmAyZH/A8mAXNJozkq+Esu9s1xt0uZPDkOqQy8s/4Zz8ux8uhbCS
4gB4WicGRaaiBjQA4h98fNxdYZDaH8WWv1itKwl/xbUbJD8ks8k96jz+DpON
3WgovW2J51nnPMYbPL0JakwaHXvZvYB9ehDxFS3fE+hcTDYO/dvBMGaP/Lre
WzE8I+L78FtDfPbAOZSafM6qxx7SZ/hexOs3t3uwgv1F2auSqfi+bCv3m8Em
MB7uM39/R4Zuua82cAY3lCMIgwQWDlyeCzuz5IPJRILXsSYn9BV8+QoD60d0
ghi//RSx73/ayVl6MVPuUPi9eBBcIc/nPLYxDx1VV4RcARtwaeDqiJvZlaS5
vd59VwK0l2QFdqFF1sMBy6Pi3rgcx1DKeDc/vXn/8grZSh5IpyR//R+v3ry6
uH4t4xtiuWAMet2wjWLshL8W0yXo6DGQ/4oFL20chnxms33wuC82wbjoQIcH
O37Za3wnuZKSUCPDxncg3v/w/xu4O0jNG1a2pYD8uoTAIs1FFO3eV41cVu6b
Plh8/UrvfK/Ekf4YKwYwr1tTjMSQHa8Sn4TKn8IX1zzqJwgwA4fTi/hqPVlk
tuSkbtsKPtSuNUd7MTvq/jpTr0eqN+6bv9YNxg83jng2eNispblOsJ29t67s
/ubm8s27F/plGucn/GUa0dvltuaCKUbKo8SyDXsAskL6fl1jUPa5b0TR7zzC
rDqc8VKm9OflIopuMuTyRsfnkuy8s/gOjlbHgUo3GVu7nUgckioJ9nrMc/2I
NqijayZ5QShfm4P5fv3xQOwsyCDVOrx+BYeN+4MlATPaKQJ2dluVanBB6CuM
m+DvESLl4NNF4+5kT5xV9L0c/+4Taa6HwBUKG7bwzB/g5NGDH8Zq4rbcO8hf
bkOne8TbC/Y74/3eyrf8kNYTRjwyaPz4/Fun/NYV59u67zkBRGHULvH+UPNy
oVOpGhXTWaXJh9Pt/NUiLCGBJseT/Ry6TuOUVo1k6+oOwb5q8QWP6A3ZoRDn
V/GgfNkDeI5Tt/Cvv9IJo3MYml2zHSb5XSmxafLgawL4DgRzLNczucecDfdX
/I0C934itHzl1DbMA+GDd3LzGuMg8M68slauhQJZenEySKEi95ruSKxKgnA6
F0MTTQKUfP+KY4EhIrq8lTuAXMLNxD8gPjduMJpMDnREn4QDgt3sBB6mk7rB
cbnmHngMktQH1m5hTtzG7vaYTp10hVseE1RZaZtxKUwX/7sk71gH0ry/DAuI
3M6ok4DZk+KJEOrwBkGrftsHbuj4WbyEPj9KoiwkVcuN592gRizPmY3+09JJ
og1MeVne4X39/g9mfaSQ+mnxYCWP05Md8etyY0gYkbuFfNQgVEkdzzI+rjSW
CntkmdaSh2ksRip0pH6sxYkPlq2kqxhf68kNWtw50tuBm0HRotJ9w0TwvRLB
oY6njjExSAiI4Wq2HA0xf4bH/zeroqTtx3QAAA==

-->

</rfc>
