<?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.30 (Ruby 3.4.1) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-18" category="std" consensus="true" submissionType="IETF" updates="8610, 8949" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title>CBOR Extended Diagnostic Notation (EDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-18"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 116?>

<t>This document formalizes and consolidates the definition of the Extended
Diagnostic Notation (EDN) of the Concise Binary Object Representation
(CBOR), addressing implementer experience.</t>
      <t>Replacing EDN's previous informal descriptions, it updates
RFC 8949, obsoleting its Section 8, and RFC 8610, obsoleting its
Appendix G.</t>
      <t>It also specifies and uses registry-based extension points, using one
to support text representations of epoch-based dates/times and of IP
addresses and prefixes.</t>
      <t><cref anchor="status">(This cref will be removed by the RFC editor:)<br/>
The present <tt>-18</tt> corrects a few omissions from <tt>-17</tt>; it is not
intended to make technical changes from <tt>-17</tt>.
It is intended for use as an input document for the
CBOR WG meeting at IETF 123.</cref></t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/edn-literal/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        cbor Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/edn-literal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 139?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Concise Binary Object Representation (CBOR) (RFC8949) <xref target="STD94"/>
    is a data format whose design goals include the possibility of
    extremely small code size, fairly small message size, and
    extensibility without the need for version negotiation.
In addition to the binary interchange format, the original CBOR specification
    described a text-based "diagnostic notation" (<xref section="6" sectionFormat="of" target="RFC7049"/>, now Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), in
    order to be able to converse about CBOR data items without having
    to resort to binary data.
<xref section="G" sectionFormat="of" target="RFC8610"/> extended this into what is also known as
Extended Diagnostic Notation (EDN).</t>
      <t>Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.</t>
      <t>Standardizing EDN in addition to the actual binary interchange format CBOR does
not serve to create a competing interchange format, but enables the use of
a shared diagnostic notation in tools for and in documents about CBOR.
Still, between tools for CBOR development and diagnosis, document
generation systems, continuous integration (CI)
environments, configuration files, and user interfaces for viewing and
editing for all these, EDN is often "interchanged" and therefore
merits a specification that facilitates interoperability within this
domain as well as reliable translation to and from CBOR.
EDN is not designed or intended for general-purpose use in protocol
elements exchanged between systems engaged in processes outside those
listed here.</t>
      <t>​This document consolidates and formalizes the definition of EDN,
providing a formal grammar (see <xref target="grammar"/> and <xref target="app-grammars"/>), and
incorporating small changes based on implementation experience.
It updates <xref target="RFC8949"/>, obsoleting Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
<xref target="RFC8610"/>, obsoleting <xref section="G" sectionFormat="of" target="RFC8610"/>.
It is intended to serve as a single reference target that can be used
in specifications that use EDN.</t>
      <t>It also specifies two registry-based extension points for the
diagnostic notation:
one for additional encoding indicators, and
one for adding application-oriented literal forms.
It uses these registries to add encoding indicators for a more
complete coverage of encoding variation,
and to add application-oriented literal forms that enhance EDN with text
representations of epoch-based date/times and of IP addresses
and prefixes <xref target="RFC9164"/> as well as an application-oriented literal that
represents cryptographic hash values computed from byte strings.</t>
      <t>In addition, this document registers a media type identifier
and a content-format for CBOR diagnostic notation.  This does not
elevate its status as an interchange format, but recognizes that
interaction between tools is often smoother if media types can be used.</t>
      <aside>
        <t>Examples in RFCs often do not use media type identifiers, but
special sourcecode type names that are allocated
in <eref target="https://www.rfc-editor.org/materials/sourcecode-types.txt">https://www.rfc-editor.org/materials/sourcecode-types.txt</eref>.
At the time of writing, this resource lists four sourcecode type
names that can be used in RFCs for including CBOR data items and
CBOR-related languages:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cbor</tt> (which is actually not useful, as CBOR is a binary format
and cannot be used in textual examples in an RFC),</t>
          </li>
          <li>
            <t><tt>cbor-diag</tt> (which is another name for EDN, as defined in the
present document),</t>
          </li>
          <li>
            <t><tt>cbor-pretty</tt> (which is a possibly annotated and pretty-printed
hexdump of an encoded CBOR data item, along the lines of the
grammar of <xref target="h-grammar"/>, as used for instance for some of the examples
in <xref section="A.3" sectionFormat="of" target="RFC9290"/>), and</t>
          </li>
          <li>
            <t><tt>cddl</tt> (which is used for the Concise Data Definition Language,
CDDL, see <xref target="terminology"/> below).</t>
          </li>
        </ul>
      </aside>
      <t>Note that EDN is not meant to be the only text-based representation of
CBOR data items.
For instance, <xref target="YAML"/> <xref target="RFC9512"/> is able to represent most CBOR
data items, possibly requiring use of YAML's extension points.
YAML does not provide certain features that can be useful with tools
and documents needing text-based representations of CBOR data items
(such as embedded CBOR or encoding indicators),
but it does provide a host of other features that EDN does not provide
such as anchor/alias data sharing, at a cost of higher implementation
and learning complexity.</t>
      <section anchor="structure-of-this-document">
        <name>Structure of This Document</name>
        <t><xref target="diagnostic-notation"/> of this document has been built from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/>.
The latter provided a number of useful extensions to the
diagnostic notation originally defined in <xref section="6" sectionFormat="of" target="RFC7049"/>.
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/> have
collectively been called "Extended Diagnostic Notation" (EDN), giving
the present document its name.
<!--
Similarly, this notation could be extended in a separate document to
provide documentation for NaN payloads, which are not covered in this document.
-->
        </t>
        <t>After introductory material, <xref target="app-ext"/>
illustrates the concept of application-oriented extension literals by
defining the "dt", "ip", and "hash" extensions.
<xref target="stand-in"/> defines mechanisms
for dealing with unknown application-oriented literals and
deliberately elided information.
<xref target="grammars"/> gives the formal syntax of EDN in ABNF, with
explanations for some features of and additions to this syntax, as an
overall grammar (<xref target="grammar"/>) and specific grammars for the content of
app-string and byte-string literals (<xref target="app-grammars"/>).
This is followed by the conventional sections
for
<xref format="title" target="sec-iana"/> (<xref format="counter" target="sec-iana"/>),
<xref format="title" target="seccons"/> (<xref format="counter" target="seccons"/>),
and References (<xref format="counter" target="sec-normative-references"/>, <xref format="counter" target="sec-informative-references"/>).
An informational comparison of EDN with CDDL follows in
<xref target="edn-and-cddl"/></t>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> defines the original CBOR diagnostic notation,
and <xref section="G" sectionFormat="of" target="RFC8610"/> supplies a number of extensions to the
diagnostic notation that result in the Extended Diagnostic Notation
(EDN).
The diagnostic notation extensions include popular features such as
embedded CBOR (encoded CBOR data items in byte strings) and comments.
A simple diagnostic notation extension that enables representing CBOR
sequences was added in <xref section="4.2" sectionFormat="of" target="RFC8742"/>.
As diagnostic notation is not used in the kind of interchange
situations where backward compatibility would pose a significant
obstacle, there is little point in not using these extensions; as at
least some elements of the extended form are now near-universally
used, the terms "diagnostic notation" and "EDN" have become
synonyms in the context of CBOR.</t>
        <t>Therefore, when we refer to "<em>diagnostic notation</em>", we mean to
include the original notation from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> as well as the
extensions from <xref section="G" sectionFormat="of" target="RFC8610"/>, <xref section="4.2" sectionFormat="of" target="RFC8742"/>, and the
present document.
However, we stick to the abbreviation "<em>EDN</em>" as it has become quite
popular and is more sharply distinguishable from other meanings than
"DN" would be.</t>
        <t>In a similar vein, the term "ABNF" in this document refers to the
language defined in <xref target="STD68"/> as extended in <xref target="RFC7405"/>, where the
"characters" of Section <xref target="RFC5234" section="2.3" sectionFormat="bare"/> of RFC 5234 <xref target="STD68"/> are Unicode scalar values.
Brief snippets of grammar may be given in the text as I-Regexp regular
expressions <xref target="RFC9485"/>.</t>
        <t>The term "CDDL" (Concise Data Definition Language) refers to the data
definition language defined in
<xref target="RFC8610"/> and its registered extensions (such as those in <xref target="RFC9165"/>), as
well as <xref target="I-D.ietf-cbor-update-8610-grammar"/>.
Additional information about the relationship between the two
languages EDN and CDDL is captured in <xref target="edn-and-cddl"/>.</t>
        <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 <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="non-objectives-of-this-document">
        <name>(Non-)Objectives of this Document</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> states the objective of defining a
common human-readable diagnostic notation with CBOR.
In particular, it states:</t>
        <blockquote>
          <t>All actual interchange always happens in the binary format.</t>
        </blockquote>
        <section anchor="for-humans">
          <name>For Humans</name>
          <t>One important application of EDN is the notation of CBOR data for
humans: in specifications, on whiteboards, and for entering test data.
A number of features, such as comments inside prefixed string literals, are mainly
useful for people-to-people communication via EDN.
Programs also often output EDN for diagnostic purposes, such as in
error messages or to enable comparison (including generation of diffs
via tools) with test data.</t>
        </section>
        <section anchor="determinism">
          <name>Determinism?</name>
          <t>For comparison with test data, it is often useful if different
implementations generate the same (or similar) output for the same
CBOR data items.
This is comparable to the objectives of deterministic serialization
for CBOR data items themselves (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
However, there are even more representation variants in EDN than in
binary CBOR, and there is little point in specifically endorsing a
single variant as "deterministic" when other variants may be more
useful for human understanding, e.g., the <tt>&lt;&lt; &gt;&gt;</tt> notation as
opposed to <tt>h''</tt>; an EDN generator may have quite a few options
that control what presentation variant is most desirable for the
application that it is being used for.</t>
          <t>Because of this, a deterministic representation is not defined for
EDN, and there is no expectation for "roundtripping" from EDN to
CBOR and back, i.e., for an ability
to convert EDN to binary CBOR and back to EDN while achieving exactly
the same result as the original input EDN — the original EDN possibly
was created by humans or by a different EDN generator.</t>
        </section>
        <section anchor="basic-output-format">
          <name>Basic Output Format</name>
          <t>However, there is a certain expectation that EDN generators can be
configured to some basic output format, which:</t>
          <ul spacing="normal">
            <li>
              <t>looks like JSON where that is possible;</t>
            </li>
            <li>
              <t>inserts encoding indicators only where the binary form differs from
preferred encoding;</t>
            </li>
            <li>
              <t>uses hexadecimal representation (<tt>h''</tt>) for byte strings, not
<tt>b64''</tt> or embedded CBOR (<tt>&lt;&lt;&gt;&gt;</tt>);</t>
            </li>
            <li>
              <t>does not generate elaborate blank space (newlines, indentation) for
pretty-printing, but does use common blank spaces such as after <tt>,</tt>
and <tt>:</tt>.</t>
            </li>
          </ul>
          <t>EDN generators may provide configuration to consistently select either
the unescaped (directly readable) or an escaped (ASCII equivalent) form of
characters in string literals; the latter allows EDN to be used when the
diagnostic value of fully escaped characters may be desired or in
environments where non-ASCII characters may not enjoy full data
transparency.
Similar to JSON, EDN is designed to allow a simple tool to convert any
EDN (including EDN with application extensions unknown to the tool)
into fully escaped (printable ASCII and newlines only) form, as well
as to inversely recover unescaped characters for all escapes where
this is possible or for certain subsets of the characters (such as
Unicode categories L, M, N, P, S, plus Zs or just ASCII space).</t>
          <t>Additional features such as ensuring
deterministic map ordering (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) on output,
or even deviating from the basic
configuration in some systematic way, can further assist in comparing
test data.
Information obtained from a CDDL model can help in choosing
application-oriented literals or specific string representations such
as embedded CBOR or <tt>b64''</tt> in the appropriate places.</t>
        </section>
      </section>
    </section>
    <section anchor="diagnostic-notation">
      <name>Overview over CBOR Extended Diagnostic Notation (EDN)</name>
      <t>CBOR is a binary interchange format.  To facilitate documentation and
debugging, and in particular to facilitate communication between
entities cooperating in debugging, this document defines a simple
human-readable diagnostic notation.  All actual interchange always
happens in the binary format.</t>
      <t>Note that diagnostic notation truly was designed as a diagnostic
format; it originally was not meant to be parsed.
Therefore, no formal definition (as in ABNF) was given in the original
documents.
Recognizing that formal grammars can aid interoperation of tools and
usability of documents that employ EDN, <xref target="grammars"/> now provides ABNF
definitions.</t>
      <t>EDN is a true superset of JSON as it is defined in <xref target="STD90"/> in
conjunction with <xref target="RFC7493"/> (that is, any interoperable <xref target="RFC7493"/> JSON
text also is an EDN text), extending it both to cover the greater
expressiveness of CBOR and to increase its usability.</t>
      <t>EDN borrows the JSON syntax for numbers (integer and
floating-point, <xref target="numbers"/>), certain simple values (<xref target="simple-values"/>),
UTF-8 <xref target="STD63"/> text
strings, arrays, and maps (maps are called objects in JSON; the
diagnostic notation extends JSON here by allowing any data item in the
map key position).</t>
      <t>As EDN is used for truly diagnostic purposes, its implementations <bcp14>MAY</bcp14>
support generation and possibly ingestion of EDN for CBOR data items
that are well-formed but not valid.
It is <bcp14>RECOMMENDED</bcp14> that an implementation enables such usage only
explicitly by configuration (such as an API or CLI flag).
Validity of CBOR data items is discussed in Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with basic validity discussed in Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
tag validity discussed in Section <xref target="RFC8949" section="5.3.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
Tag validity is more likely a subject for individual
application-oriented extensions, while the two cases of basic validity
(for text strings and for maps) are addressed in Sections
<xref format="counter" target="text-validity"/> and <xref format="counter" target="map-validity"/> under the heading
of <em>validity</em>.</t>
      <t>The rest of this section provides an overview over specific features
of EDN, starting with certain common syntactical features and then
going through kinds of CBOR data items roughly in the order of CBOR major
types.
Any additional detailed syntax discussion needed has been deferred to
<xref target="grammar"/>.</t>
      <section anchor="app-lit">
        <name>Application-Oriented Extension Literals</name>
        <t>EDN provides <em>literals</em> that represent CBOR data items textually.
Many of the forms of literals provided are predefined by this
document, but it also defines an extension point that enables defining
<em>application-oriented extension literals</em>, or <em>extension literals</em> for short.</t>
        <t>Extension literals start with a <em>prefix</em> that identifies the
application-oriented extension, immediately followed by a sequence
literal (<xref target="embedded"/>) or a single-quoted string literal (<xref target="strings"/>).
The latter form uses its single-quoted string literal as a shorthand
form for a sequence literal representing a sequence with exactly that
one string data item.</t>
        <aside>
          <t>This notation is generalized from
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, which provides for notating byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by a prefix (»h« for
base16, »b32« for base32, »h32« for base32hex, »b64« for base64 or
base64url).</t>
          <t>This syntax can be thought to establish a name space, with the names
"h", "b32", "h32", and "b64" taken, but other names being unallocated.
The present specification allows registering additional names for this namespace,
which we call <em>application-extension identifiers</em>.</t>
        </aside>
        <t>More precisely, an <em>application-extension identifier</em> is a name consisting of a
lower-case ASCII letter (<tt>[a-z]</tt>) and zero or more additional ASCII
characters that are either lower-case letters, digits, or hyphens (<tt>[a-z0-9-]</tt>).
»false«, »true«, »null«, and »undefined« cannot be used as such
identifiers and are reserved.</t>
        <t>Application-extension identifiers are registered in a registry
(<xref target="appext-iana"/>).</t>
        <t>An application-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
a variant prefix derived from its application-extension identifier by
replacing each lower-case character by its upper-case counterpart (such
as <tt>DT</tt>).
As a convention for such definitions, using the all-uppercase variant
implies making use of a tag appropriate for this application-oriented
extension (such as tag number 1 for <tt>DT</tt>, where <tt>dt</tt> stands for the
unwrapped number).</t>
        <t>This specification defines a number of generally applicable
application-oriented extensions (<xref target="app-ext"/>), both to motivate
making these extensions generally available, and to illustrate the
concept.</t>
      </section>
      <section anchor="comments">
        <name>Comments</name>
        <t>For presentation to humans, EDN text may benefit from comments.
JSON famously does not provide for comments, and the original
diagnostic notation in <xref section="6" sectionFormat="of" target="RFC7049"/> inherited this property.</t>
        <t>EDN now provides two comment syntaxes, which can be used where the
syntax allows blank space (outside of constructs such as numbers,
string literals, etc.):</t>
        <ul spacing="normal">
          <li>
            <t>inline comments, delimited by slashes ("<tt>/</tt>"):  </t>
            <t>
In a position that allows blank space, any text within and including
a pair of slashes is considered blank space (and thus effectively a
comment).</t>
          </li>
          <li>
            <t>end-of-line comments, delimited by "<tt>#</tt>" and an end of line (LINE
FEED, U+000A):  </t>
            <t>
In a position that allows blank space, any text within and including
a pair of a "<tt>#</tt>" and the end of the line is considered blank space
(and thus effectively a comment).</t>
          </li>
        </ul>
        <t>Comments can be used to annotate a CBOR structure as in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
/grasp-message/ [/M_DISCOVERY/ 1, /session-id/ 10584416,
                 /objective/ [/objective-name/ "opsonize",
                              /D, N, S/ 7, /loop-count/ 105]]
]]></sourcecode>
        <t>This reduces to <tt>[1, 10584416, ["opsonize", 7, 105]]</tt>.</t>
        <t>Another example, combining
the use of inline and end-of-line comments:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{
 /kty/ 1 : 4, # Symmetric
 /alg/ 3 : 5, # HMAC 256-256
  /k/ -1 : h'6684523ab17337f173500e5728c628547cb37df
             e68449c65f885d1b73b49eae1'
}
]]></sourcecode>
        <t>This reduces to <tt>{1: 4, 3: 5, -1: h'6684523AB17337F173500E5728C628547CB37DFE68449C65F885D1B73B49EAE1'}</tt>.</t>
      </section>
      <section anchor="encoding-indicators">
        <name>Encoding Indicators</name>
        <t>Sometimes it is useful to indicate in the diagnostic notation which of
several alternative representations were actually used; for example, a
data item written »1.5« by a diagnostic decoder might have been
encoded as a half-, single-, or double-precision float.</t>
        <t>The convention for encoding indicators is that anything starting with
an underscore and all immediately following characters that are alphanumeric or
underscore is an encoding indicator, and can be ignored by anyone not
interested in this information.  For example, <tt>_</tt> or <tt>_3</tt>.</t>
        <t>Encoding indicators are always optional.</t>
        <t>Encoding indicators are placed immediately to the right of the data
item or of a syntactic feature that can stand for the data item the
encoding of which the encoding indicator is controlling.
<xref target="tab-ei"/> provides examples for encoding indicators used with various
kinds of data items.</t>
        <table anchor="tab-ei">
          <name>Examples of Encoding Indicators for Different Data Items (mt = major type)</name>
          <thead>
            <tr>
              <th align="left">mt</th>
              <th align="left">examples</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">
                <tt>1_1</tt>, <tt>0x4711_3</tt></td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">
                <tt>-1_1</tt></td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">
                <tt>'A'_1</tt></td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">
                <tt>"A"_1</tt></td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">
                <tt>[_1 "bar"]</tt></td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">
                <tt>{_1 "bar": 1}</tt></td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">
                <tt>1_1(4711)</tt></td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">
                <tt>1.5_2</tt>, <tt>0x4711p+03_3</tt></td>
            </tr>
          </tbody>
        </table>
        <t>(In the following, an abbreviation of the form <tt>ai=</tt>nn gives nn as
the numeric value of the field <em>additional information</em>, the low-order 5
bits of the initial byte: see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
This field is used in encoding the "argument", i.e., the value, tag, or
length; <tt>ai=0</tt> to <tt>ai=23</tt> mean that the value of the <tt>ai</tt> field
immediately <em>is</em> the argument, <tt>ai=24</tt> to <tt>ai=27</tt> mean that the
argument is carried in 2<sup>ai-24</sup> (1, 2, 4, or 8)
additional bytes, and <tt>ai=31</tt> means that indefinite length
encoding is used.)</t>
        <t>An underscore followed by a decimal digit <tt>n</tt> indicates that the
preceding item (or, for arrays and maps, the item starting with the
preceding bracket or brace) was encoded with an additional information
value of <tt>ai=</tt>24+<tt>n</tt>.  For example, <tt>1.5_1</tt> is a half-precision floating-point
number (2<sup>1</sup> = 2 additional bytes or 16 bits), while <tt>1.5_3</tt> is encoded as
double precision (2<sup>3</sup> = 8 additional bytes or 64 bits).
<!--
This encoding
indicator is not shown in {{examples}}.
 -->
        </t>
        <t>The encoding indicator <tt>_</tt> is an abbreviation of what would in full
form be <tt>_7</tt>, which is not used.
Therefore, an underscore <tt>_</tt> on its own stands for indefinite length
encoding (<tt>ai=31</tt>).
(Note that this encoding indicator is only available behind the opening
brace/bracket for <tt>map</tt> and <tt>array</tt> (<xref target="ei-container"/>): strings have a special syntax
<tt>streamstring</tt> for indefinite length encoding except for the special
cases <tt>''_</tt> and <tt>""_</tt> (<xref target="ei-string"/>).)</t>
        <t>The encoding indicators <tt>_0</tt> to <tt>_3</tt> can be used to indicate <tt>ai=24</tt>
to <tt>ai=27</tt>, respectively; they therefore stand for 1, 2, 4, and 8
bytes of additional information (ai) following the initial byte in the
head of the data item.
(The abbreviation of <tt>_7</tt> into <tt>_</tt> was discussed above.
<tt>_4</tt> to <tt>_6</tt> are not currently used in CBOR, but will be available if
and when CBOR is extended to make use of <tt>ai=28</tt> to <tt>ai=30</tt>.)</t>
        <t>Surprisingly, Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> does not address <tt>ai=0</tt> to
<tt>ai=23</tt> — the assumption seems to have been that preferred serialization
(Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) will be used when converting CBOR
diagnostic notation to an encoded CBOR data item, so leaving out the
encoding indicator for a data item with a preferred serialization
will implicitly use <tt>ai=0</tt> to <tt>ai=23</tt> if that is possible.
The present specification allows making this explicit:</t>
        <t><tt>_i</tt> ("immediate") stands for encoding with <tt>ai=0</tt> to <tt>ai=23</tt>, i.e.,
it indicates that the argument is encoded directly in the initial byte
of the CBOR item.</t>
        <t>While no pressing use for further values for encoding indicators
comes to mind, this is an extension point for EDN; <xref target="reg-ei"/> defines
a registry for additional values.</t>
        <t>Encoding Indicators are discussed in further detail in <xref target="ei-string"/> for
indefinite length strings and in <xref target="ei-container"/> for arrays and maps.</t>
      </section>
      <section anchor="numbers">
        <name>Numbers</name>
        <!--
## Hexadecimal, Octal, and Binary Numbers {#hexadecimal-octal-and-binary-numbers}
 -->

<t>In addition to JSON's decimal number literals, EDN provides hexadecimal, octal,
and binary number literals in the usual C-language notation (octal with 0o
prefix present only).</t>
        <t>Numbers composed only of digits (of the respective base) are
interpreted as CBOR integers (major type 0/1, or where the number
cannot be represented in this way, major type 6 with tag 2/3).
A leading "<tt>+</tt>" sign is a no-op, and a leading "<tt>-</tt>" sign inverts the
sign of the number.
So <tt>0</tt>, <tt>000</tt>, <tt>+0</tt> all represent the same integer zero, as does <tt>-0</tt>.
Similarly,
<tt>1</tt>, <tt>001</tt>, <tt>+1</tt> and <tt>+0001</tt> all stand for the same integer one, and
<tt>-1</tt> and <tt>-0001</tt> both designate the same integer minus one.</t>
        <t>Using a decimal point (<tt>.</tt>) and/or an exponent (<tt>e</tt> for decimal, <tt>p</tt>
for hexadecimal) turns the number into a floating point number (major
type 7) instead, irrespective of whether it is an integral number
mathematically.
Note that, in floating point numbers, <tt>0.0</tt> is not the same number as
<tt>-0.0</tt>, even if they are mathematically equal.</t>
        <t>In <xref target="tab-numbers"/>, all the items on a row are the same number (also
shown in CBOR, hexadecimally), but they are distinct from items in a
different row.</t>
        <table anchor="tab-numbers">
          <name>Example Sets of Equivalent Notations for Some Numbers</name>
          <thead>
            <tr>
              <th align="left">EDN</th>
              <th align="left">CBOR hex</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>4711</tt>, <tt>0x1267</tt>, <tt>0o11147</tt>, <tt>0b1001001100111</tt></td>
              <td align="left">
                <tt>19 1267</tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.5</tt>, <tt>0.15e1</tt>, <tt>15e-1</tt>, <tt>0x1.8p0</tt>, <tt>0x18p-4</tt></td>
              <td align="left">
                <tt>F9 3E00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0</tt>, <tt>+0</tt>, <tt>-0</tt></td>
              <td align="left">
                <tt>00     </tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0.0</tt>, <tt>+0.0</tt></td>
              <td align="left">
                <tt>F9 0000</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>-0.0</tt></td>
              <td align="left">
                <tt>F9 8000</tt> # float16</td>
            </tr>
          </tbody>
        </table>
        <t>The non-finite floating-point numbers <tt>Infinity</tt>, <tt>-Infinity</tt>, and <tt>NaN</tt> are
written exactly as in this sentence (this is also a way they can be
written in JavaScript, although JSON does not allow them).</t>
        <t>See <xref target="decnumber"/> for additional details of the EDN number syntax.</t>
        <t>(Note that literals for further number formats, e.g., for representing
rational numbers as fractions, or for NaNs with non-zero payloads, can
be added as application-oriented literals.
Background information beyond that in <xref target="STD94"/> about the representation
of numbers in CBOR can be found in the informational document
<xref target="I-D.bormann-cbor-numbers"/>.)</t>
      </section>
      <section anchor="strings">
        <name>Strings</name>
        <t>CBOR distinguishes two kinds of strings: text strings (the bytes in
the string constitute UTF-8 <xref target="STD63"/> text, major type 3), and byte strings
(CBOR does not further characterize the bytes that constitute the
string, major type 2).</t>
        <section anchor="text-string-literals">
          <name>Text String Literals</name>
          <t>EDN notates text strings in a form compatible to that of notating text
strings in JSON (i.e., as a double-quoted string literal), with a
number of usability extensions.
In JSON, no control characters are allowed to occur
directly in text string literals; if needed, they can be specified using
escapes such as <tt>\t</tt> or <tt>\r</tt>.
In EDN, string literals additionally can contain newlines (LINEFEED
U+000A), which are copied into the resulting string like other
characters in the string literal.
To deal with variability in platform presentation of newlines, any
carriage return characters (U+000D) that may be present in the EDN
string literal are not copied into the resulting string (see <xref target="cr"/>).
No other control characters can occur directly in a string literal,
and the handling of escaped characters (<tt>\r</tt> etc.) is as in JSON.</t>
          <t>JSON's escape scheme for characters that are not on Unicode's basic
multilingual plane (BMP) is cumbersome (see Section <xref target="RFC8259" section="7" sectionFormat="bare"/> of RFC 8259 <xref target="STD90"/>).
EDN keeps it, but also adds the syntax <tt>\u{NNN}</tt> where NNN is the
Unicode scalar value as a hexadecimal number.
This means the following are equivalent (the first <tt>o</tt> is escaped as
<tt>\u{6f}</tt> for no particular reason):</t>
          <sourcecode type="cbor-diag"><![CDATA[
"D\u{6f}mino's \u{1F073} + \u{2318}"   # \u{}-escape 3 chars
"Domino's \uD83C\uDC73 + \u2318"       # escape JSON-like
"Domino's 🁳 + ⌘"                       # unescaped
]]></sourcecode>
        </section>
        <section anchor="byte-string-literals">
          <name>Byte String Literals</name>
          <t>EDN adds a number of ways to notate byte strings, some of which
provide detailed access to the bits within those bytes (see
<xref target="encoded-byte-strings"/>).
However, quite often, byte strings carry bytes that can be meaningfully
notated as UTF-8 text (<xref target="sq-lit"/>).</t>
        </section>
        <section anchor="sq-lit">
          <name>Single-Quoted String Literals</name>
          <t>Analogously to text string literals delimited by double quotes, EDN
allows the use of single quotes (without a prefix) to express byte
string literals with UTF-8 text; for instance, the following are
equivalent:</t>
          <artwork><![CDATA[
'hello world'
h'68656c6c6f20776f726c64'
]]></artwork>
          <t>The escaping rules of JSON strings are applied equivalently for
text-based byte string literals, e.g., <tt>\\</tt> stands for a single
backslash and <tt>\'</tt> stands for a single quote.
However, to facilitate parsing, in single-quoted strings EDN excludes
certain escaping mechanisms available for double-quoted strings:</t>
          <ul spacing="normal">
            <li>
              <t><tt>\/</tt> is an escape in JSON that is available for EDN text strings as
well to ensure all JSON texts are EDN literals.
Since EDN's single-quoted strings to not occur in JSON, this legacy
compatibility feature is not available for them.</t>
            </li>
            <li>
              <t><tt>\u</tt>-based escapes are not available for characters in the range
from U+0020 to U+007e (essentially, printable ASCII).</t>
            </li>
          </ul>
          <t>Single-quoted string literals can occur unprefixed and stand for the
byte string that encodes its text string value (the "content"), or be
prefixed by what looks like an application-extension prefix (see
<xref target="app-lit"/>).</t>
          <t>In a prefixed string literal, the text content of the single-quoted
string literal is not used directly as a byte string, but is further
processed in a way that is defined by the meaning given to the prefix.
Depending on the prefix, the result of that processing can, but need
not be, a byte string value.</t>
          <t>Prefixed string literals (which are always single-quoted after the
prefix) are used both for base-encoded byte string literals (see <xref target="encoded-byte-strings"/>) and for
application-oriented extension literals (see <xref target="app-lit"/>, called app-string).
(Additional kinds of base-encoded string literals can be defined as
application-oriented extension literals by registering their prefixes;
there is no fundamental difference between the two predefined
base-encoded string literal prefixes (<tt>h</tt>, <tt>b64</tt>) and any such potential
future extension literal prefixes.)</t>
        </section>
        <section anchor="ei-string">
          <name>Encoding Indicators of Strings</name>
          <t>For indefinite length encoding, strings (byte and text strings) have a
special syntax <tt>streamstring</tt>.
This is used (except for the special cases <tt>''_</tt> and <tt>""_</tt> below) to
notate their detailed composition into individual "chunks" (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), by representing the individual chunks in
sequence within parentheses, each optionally followed by a comma, with
an encoding indicator <tt>_</tt> immediately after the opening parenthesis:
e.g., <tt>(_ h'0123', h'4567')</tt> or <tt>(_ "foo", "bar")</tt>.
The overall type (byte string or text string) of the string is
provided by the types of the individual chunks, which all need to be
of the same type (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          <t>For an indefinite-length string with no chunks inside, <tt>(_ )</tt>
would be ambiguous as to whether a byte string (encoded 0x5fff) or a text string
(encoded 0x7fff) is meant and is therefore not used.
The basic forms <tt>''_</tt> and <tt>""_</tt> can be used instead and are reserved for
the case of no chunks only --- not as short forms for the (permitted,
but not really useful) encodings with only empty chunks, which
need to be notated as <tt>(_ '')</tt>, <tt>(_ "")</tt>, etc.,
when it is desired to preserve the chunk structure.</t>
        </section>
        <section anchor="encoded-byte-strings">
          <name>Base-Encoded Byte String Literals</name>
          <t>Besides the unprefixed byte string literals that are analogous to JSON text
string literals, EDN provides base-encoded byte string literals.
These are notated as prefixed string literals that carry one of the base encodings <xref target="RFC4648"/>, without
padding, i.e., the base encoding is
enclosed in a single-quoted string literal, prefixed by »h« for base16 or
»b64« for base64 or base64url (the actual encodings of the latter do
not overlap, so the string remains unambiguous).
For example, the byte string consisting of the four bytes <tt>12 34 56 78</tt>
(given in hexadecimal here) could be written <tt>h'12345678'</tt> or <tt>b64'EjRWeA'</tt>.</t>
          <aside>
            <t>(Note that Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> also mentions »b32« for
base32 and »h32« for base32hex.
This has not been implemented widely
and therefore is not directly included in this specification.
These and further byte string formats now can easily be added back as
application-oriented extension literals.)</t>
          </aside>
          <t>Examples often benefit from some blank space (spaces, line breaks) in
byte strings literals.
In certain EDN prefixed byte string literals, blank space is ignored; for
instance, the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   h'48656c6c6f20776f726c64'
   h'48 65 6c 6c 6f 20 77 6f 72 6c 64'
   h'4 86 56c 6c6f
     20776 f726c64'
]]></sourcecode>
          <t>The internal syntax of prefixed single-quote literals such
as <tt>h''</tt> and <tt>b64''</tt> can also allow comments as blank space (see <xref target="comments"/>).</t>
          <sourcecode type="cbor-diag"><![CDATA[
   h'68656c6c6f20776f726c64'
   h'68 65 6c /doubled l!/ 6c 6f # hello
     20 /space/
     77 6f 72 6c 64' /world/
]]></sourcecode>
          <t>Slash characters are part of the base64 classic alphabet (see
Table 1 in <xref section="4" sectionFormat="of" target="RFC4648"/>), and they therefore need be in the
<tt>b64''</tt> set of characters that contribute to the byte string.
Therefore, only end-of-line comments are available in b64 byte string
literals.</t>
          <sourcecode type="cbor-diag"><![CDATA[
   b64'/base64 not a comment/ but one follows # comment'
   h'FDB6AC 7BAE27A2D69CA2699E9EDFDBBADA2779FA25 968C2C'
]]></sourcecode>
          <t>These two byte string literals stand for the same byte string; the
deliberately confusing base64 content starts with
<tt>b64'/bas'</tt> which is the same as h'FDB6AC' and ends with b64'lows'
which is the same as <tt>h'968C2C'</tt>.</t>
        </section>
        <section anchor="embedded">
          <name>CBOR Sequence Literals</name>
          <t>In diagnostic notation, a sequence of zero or more CBOR data item literals can
be enclosed in <tt>&lt;&lt;</tt> and <tt>&gt;&gt;</tt>, optionally prefixed by an
application-extension prefix; we speak of <em>sequence literals</em>.
EDN mainly deals with individual data items, not with CBOR sequences
<xref target="RFC8742"/>, so the CBOR sequence represented by the sequence literal needs
to be further processed to obtain the value of the literal.</t>
          <t>Prefixed sequence literals refer to the application extension (see
<xref target="app-lit"/>) identified by the prefix and apply the extension to its
sequence content, resulting in a single data item.
This data item may be a string or may not (always) be, depending on
the definition of the application extension.</t>
          <t>An unprefixed sequence literal applies CBOR encoding to the
data items in its content, taken as a CBOR sequence.
The value of the
literal thus is a byte string with the encoded content; we also speak of
<em>embedded CBOR</em>.
For instance, each pair of columns in the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   <<1>>              h'01'
   <<1, 2>>           h'0102'
   <<"hello", null>>  h'65 68656c6c6f f6'
   <<>>               h''
]]></sourcecode>
        </section>
        <section anchor="text-validity">
          <name>Validity of Text Strings</name>
          <t>To be valid CBOR, Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> requires that text
strings are byte sequences in UTF-8 <xref target="STD63"/> form.
EDN provides several ways to construct such byte strings (see <xref target="concat"/>
for details).
These mechanisms might operate on subsequences that do not themselves
constitute UTF-8, e.g., by building larger sequences out of
concatenating the subsequences; for validity of a text string
resulting from these mechanisms it is only of importance that the
result is UTF-8.
Both double-quoted and single-quoted string literals have been defined
such that they lead to byte sequences that are UTF-8: the source
language of EDN is UTF-8, and all escaping mechanisms lead only to
adding further UTF-8 characters.
Only prefixed string literals, other application-extensions, or
in certain cases concatenation (<xref target="concat"/>) can generate non-UTF-8 byte
sequences.</t>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, EDN
implementations <bcp14>MAY</bcp14> support generation and possibly ingestion of EDN
for CBOR data items that are well-formed but not valid; when this is
enabled, such implementations <bcp14>MAY</bcp14> relax the requirement on text
strings to be valid UTF-8.</t>
          <t>Note that neither CBOR about its text strings nor EDN about its source
language make any requirements except for conformance to <xref target="STD63"/>.
No additional Unicode processing or validation such as normalization
or checking whether a scalar value is actually assigned is foreseen by
EDN, particularly not any processing that is dependent on a specific
Unicode version.
Such processing, if offered, <bcp14>MUST NOT</bcp14> get in the way of processing the
data item represented in EDN (i.e., it may be appropriate to issue
warnings but not to error out or to generate output that does not match
the input at the UTF-8 level).</t>
          <!--
## Concatenated Strings {#concatenated-strings}

While the ability to include whitespace enables line-breaking of
encoded byte strings, a mechanism is needed to be able to include
text strings as well as byte strings in direct UTF-8 representation
into line-based documents (such as RFCs and source code).

We extend the diagnostic notation by allowing multiple text strings or
multiple byte strings to be notated separated by whitespace; these
are then concatenated into a single text or byte string, respectively.
Text strings and byte strings do not mix within such a
concatenation, except that byte string notation can be used inside a
sequence of concatenated text string notation to encode characters
that may be better represented in an encoded way.  The following four
values are equivalent:


~~~~
   "Hello world"
   "Hello " "world"
   "Hello" h'20' "world"
   "" h'48656c6c6f20776f726c64' ""
~~~~

Similarly, the following byte string values are equivalent:


~~~~
   'Hello world'
   'Hello ' 'world'
   'Hello ' h'776f726c64'
   'Hello' h'20' 'world'
   '' h'48656c6c6f20776f726c64' '' b64''
   h'4 86 56c 6c6f' h' 20776 f726c64'
~~~~

(Note that the approach of separating by whitespace, while familiar
from the C language, requires some attention — a single comma makes a
big difference here.)

-->

</section>
      </section>
      <section anchor="arrays-and-maps">
        <name>Arrays and Maps</name>
        <t>EDN borrows the JSON syntax for arrays and maps.
(Maps are called objects in JSON.)</t>
        <t>For maps, EDN extends the JSON syntax by allowing any data item in the
map key position (before the colon).</t>
        <t>JSON requires the use of a comma as a separator character between
the elements of an array as well as between the members (key/value
pairs) of a map.
(These commas also were required in the original diagnostic
notation defined in <xref target="STD94"/> and <xref target="RFC8610"/>.)
The separator commas are now optional in the places where EDN syntax
allows commas.
(Stylistically, leaving out the commas is more idiomatic when they
occur at line breaks.)</t>
        <t>In addition, EDN also allows, but does not require, a trailing comma before the closing bracket/brace,
enabling an easier to maintain "terminator" style of their use.</t>
        <t>In summary, the following eight examples are all equivalent:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 3]
[1, 2, 3,]
[1  2  3]
[1  2  3,]
[1  2, 3]
[1  2, 3,]
[1, 2  3]
[1, 2  3,]
]]></sourcecode>
        <t>as are</t>
        <sourcecode type="cbor-diag"><![CDATA[
{1: "n", "x": "a"}
{1: "n", "x": "a",}
{1: "n"  "x": "a"}
# etc.
]]></sourcecode>
        <aside>
          <t>CDDL's comma separators in the equivalent contexts (CDDL groups) are
  entirely optional
  (and actually are terminators, which together with their optionality
  allows them to be used like separators as well, or even not at all).
  In summary, comma use is now aligned between EDN and CDDL, in a
  fully backwards compatible way.</t>
        </aside>
        <section anchor="ei-container">
          <name>Encoding Indicators of Arrays and Maps</name>
          <t>A single underscore can be written after the opening brace of a map or
the opening bracket of an array to indicate that the data item was
represented in indefinite-length format.  For example, <tt>[_ 1, 2]</tt>
contains an indicator that an indefinite-length representation was
used to represent the data item <tt>[1, 2]</tt>.</t>
          <t>At the same position, encoding indicators for specifying the size of
the array or map head for definite-length format can be used instead,
specifically <tt>_i</tt> or <tt>_0</tt> to <tt>_3</tt>.  For example <tt>[_0 false, true]</tt> can be
used to specify the encoding of the array <tt>[false, true]</tt> as <tt>98 02 f4 f5</tt>.</t>
        </section>
        <section anchor="map-validity">
          <name>Validity of Maps</name>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, EDN implementations <bcp14>MAY</bcp14> support
generation and possibly ingestion of EDN for CBOR data items that are
well-formed but not valid (Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          <t>For maps, this is relevant for map keys that occur more than once, as in:</t>
          <sourcecode type="cbor-diag"><![CDATA[
{1: "to", 1: "fro"}
]]></sourcecode>
        </section>
      </section>
      <section anchor="tags">
        <name>Tags</name>
        <t>A tag is
written as a decimal unsigned integer for the tag number, followed by the tag content
in parentheses; for instance, a date in the format specified by RFC 3339
(ISO 8601) could be
notated as:</t>
        <t indent="5">0("2013-03-21T20:04:00Z")</t>
        <t>or the equivalent epoch-based time as the following:</t>
        <t indent="5">1(1363896240)</t>
        <t>The tag number can be followed by an encoding indicator giving the
encoding of the tag head.  For example:</t>
        <t indent="5">1_1(1363896240)</t>
        <t>(assuming preferred encoding for the tag content) is encoded as</t>
        <sourcecode type="cbor-pretty"><![CDATA[
d9 0001        # tag(1)
   1a 514b67b0 # unsigned(1363896240)
]]></sourcecode>
      </section>
      <section anchor="simple-values">
        <name>Simple values</name>
        <t>EDN uses JSON syntax for the simple values True (»<tt>true</tt>«), False
(»<tt>false</tt>«), and Null (»<tt>null</tt>«).
Undefined is written »<tt>undefined</tt>« as in JavaScript.</t>
        <t>These and all other simple values can be given as "simple()" with the
appropriate integer in the parentheses.  For example, »<tt>simple(42)</tt>«
indicates major type 7, value 42, and »<tt>simple(0x14)</tt>« indicates
»<tt>false</tt>«, as does »<tt>simple(20)</tt>« or »<tt>simple(0b10100)</tt>«.</t>
      </section>
    </section>
    <section anchor="app-ext">
      <name>Application-Oriented Extension Literals</name>
      <t>This document extends the syntax used in diagnostic notation to also
enable application-oriented extensions.
This section defines a number of application-oriented extensions.</t>
      <section anchor="dt">
        <name>The "dt" Extension</name>
        <t>The application-extension identifier "dt" is used to notate a
date/time literal that can be used as an Epoch-Based Date/Time as per
Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The content of the literal is a single Standard Date/Time String as per
Section <xref target="RFC8949" section="3.4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, as a text or byte string.</t>
        <t>The value of the literal is a number representing the result of a
conversion of the given Standard Date/Time String to an Epoch-Based
Date/Time.
If fractional seconds are given in the text (production
<tt>time-secfrac</tt> in <xref target="abnf-grammar-dt"/>), the value is a
floating-point number; the value is an integer number otherwise.
In the all-upper-case variant of the app-prefix, the value is enclosed
in a tag number 1.</t>
        <t>Each row of <xref target="tab-equiv-dt"/> shows an example of "dt" notation and
equivalent notation not using an application-extension identifier.</t>
        <table anchor="tab-equiv-dt">
          <name>dt and DT literals vs. plain EDN</name>
          <thead>
            <tr>
              <th align="left">dt literal</th>
              <th align="left">plain EDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>-14159024</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.0Z'</tt></td>
              <td align="left">
                <tt>-14159024.0</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.5Z'</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;'1969-07-21T02:56:16.5Z'&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;"1969-07-21T02:56:16.5Z"&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>DT'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>1(-14159024)</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="dt-grammar"/> for an ABNF definition for the content of <tt>dt</tt> literals.</t>
      </section>
      <section anchor="ip">
        <name>The "ip" Extension</name>
        <t>The application-extension identifier "ip" is used to notate an IP
address literal that can be used as an IP address as per <xref section="3" sectionFormat="of" target="RFC9164"/>.</t>
        <t>The content of the literal is a single IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>, as a text or byte string.</t>
        <t>With the lower-case app-string prefix <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the upper-case app-string prefix <tt>IP</tt>, the literal is such a byte string
tagged with tag number 54, if an IPv6address is used, or tag number
52, if an IPv4address is used.</t>
        <t>As an additional case, the upper-case app-string prefix <tt>IP''</tt> can be used
with an IP address prefix such as <tt>2001:db8::/56</tt> or <tt>192.0.2.0/24</tt>, with the equivalent tag as its value.
(Note that <xref target="RFC9164"/> representations of address prefixes need to
implement the truncation of the address byte string as described in
<xref section="4.2" sectionFormat="of" target="RFC9164"/>; see example below.)
For completeness, the lower-case variant <tt>ip'2001:db8::/56'</tt> or  <tt>ip'192.0.2.0/24'</tt> stands for
an unwrapped <tt>[56,h'20010db8']</tt> or <tt>[24,h'c00002']</tt>; however, in this case the information
on whether an address is IPv4 or IPv6 often needs to come from the context.</t>
        <t>Note that this application-extension provides no direct representation
of the "Interface format"
defined in <xref section="3.1.3" sectionFormat="of" target="RFC9164"/>, an address combined with an
optional prefix length and an optional zone identifier, and therefore
no way to reference a zone identifier at all.
(If needed, this format can be put together by building their
structures explicitly, e.g., an interface format without a zone
identifier can be represented as in <tt>52([ip'192.0.2.42',24])</tt>, or an
interface format with zone identifier 42 as in
<tt>54([ip'fe80::0202:02ff:ffff:fe03:0303',64,42])</tt>.)</t>
        <t>Each row of <xref target="tab-equiv-ip"/> shows an example of "ip" notation and
equivalent notation not using an application-extension identifier.</t>
        <table anchor="tab-equiv-ip">
          <name>ip and IP literals vs. plain EDN</name>
          <thead>
            <tr>
              <th align="left">ip literal</th>
              <th align="left">plain EDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>ip'192.0.2.42'</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip&lt;&lt;'192.0.2.42'&gt;&gt;</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.42'</tt></td>
              <td align="left">
                <tt>52(h'c000022a')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.0/24'</tt></td>
              <td align="left">
                <tt>52([24,h'c00002'])</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip'2001:db8::42'</tt></td>
              <td align="left">
                <tt>h'20010db8000000000000000000000042'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::42'</tt></td>
              <td align="left">
                <tt>54(h'20010db8000000000000000000000042')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::/64'</tt></td>
              <td align="left">
                <tt>54([64,h'20010db8'])</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="ip-grammar"/> for an ABNF definition for the content of <tt>ip</tt> literals.</t>
      </section>
      <section anchor="hash">
        <name>The "hash" Extension</name>
        <t>The application-extension identifier "hash" is used to notate the
input to a cryptographic hash function as well as identify such a hash
function to obtain a byte string that represents the output of that
hash function.</t>
        <t>The content of the literal is a string, optionally followed by either
an integer or a text string that identifies the hash function in the
COSE Algorithms registry of the CBOR Object Signing and Encryption
(COSE) registry group <xref target="IANA.cose"/>, either by the identifier (value:
integer or string), or, if no algorithm is registered with this value,
by its name used in the registry.
If the second item is not given, the default algorithm used is -16
("SHA-256").</t>
        <t>No uppercase variant prefix is defined for the application-extension
identifier "hash".</t>
        <table anchor="tab-equiv-hash">
          <name>hash literals vs. plain EDN</name>
          <thead>
            <tr>
              <th align="left">hash literal</th>
              <th align="left">plain EDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo'&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash'foo'</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', -16&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', "SHA-256"&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', -44&gt;&gt;</tt></td>
              <td align="left">h'F7FBBA6E0636F890E56FBBF3283E524C<br/>6FA3204AE298382D624741D0DC663832<br/>6E282C41BE5E4254D8820772C5518A2C<br/>5A8C0C7F7EDA19594A7EB539453E1ED7'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', "SHA-512"&gt;&gt;</tt></td>
              <td align="left">h'F7FBBA6E0636F890E56FBBF3283E524C<br/>6FA3204AE298382D624741D0DC663832<br/>6E282C41BE5E4254D8820772C5518A2C<br/>5A8C0C7F7EDA19594A7EB539453E1ED7'</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="stand-in">
      <name>Stand-in Representations in Binary CBOR</name>
      <t>In some cases, an EDN consumer cannot construct actual CBOR items that
represent the CBOR data intended for eventual interchange.
This document defines stand-in representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The EDN consumer does not know (or does not implement) an
application-extension identifier used in the EDN document
(<xref target="unknown"/>) but wants to preserve the information for a later
processor.</t>
        </li>
        <li>
          <t>The generator of some EDN intended for human consumption (such as in
a specification document) may not want to include parts of the final
data item, destructively replacing complete subtrees or possibly
just parts of a lengthy string by <em>elisions</em> (<xref target="elision"/>).</t>
        </li>
      </ul>
      <t>Implementation note:
Typically, the ultimate applications will fail if they encounter tags
unknown to them, which the ones defined in this section likely are.
Where chains of tools are involved in processing EDN, it may be useful
to fail earlier than at the ultimate receiver in the chain unless
specific processing options (e.g., command line flags) are given that
indicate which of these stand-ins are expected at this stage in the
chain.</t>
      <section anchor="unknown">
        <name>Handling unknown application-extension identifiers</name>
        <t>When ingesting CBOR diagnostic notation, any
application-oriented extension literals are usually decoded and
transformed into the corresponding data item during ingestion.
If an application-extension is not known or not implemented by the
ingesting process, this is usually an error and processing has to
stop.</t>
        <t>However, in certain cases, it can be desirable to exceptionally carry an
uninterpreted application-oriented extension literal in an ingested
data item, allowing to postpone its decoding to a specific later
stage of ingestion.</t>
        <t>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Unresolved Application-Extension Tag, tag
number CPA999 (<xref target="iana-standin"/>).
The content of this tag is an array of a text string for the
application-extension identifier, and another array:</t>
        <ul spacing="normal">
          <li>
            <t>For app-strings, the second array contains a single item, a text
string containing the text notated by the single-quoted string in the
app-string.</t>
          </li>
          <li>
            <t>For app-sequences, the second array contains zero or more items,
which represent each item in the sequence contained in the
app-sequence.</t>
          </li>
        </ul>
        <t>For example, <tt>cri'https://example.com'</tt> can be represented as
<tt>/CPA/ 999(["cri", ["https://example.com"]])</tt>, or
<tt>hash&lt;&lt;"data", -44&gt;&gt;</tt> as <tt>/CPA/ 999(["hash", ["data", -44]])</tt>.</t>
        <!-- edn-abnf -fe "cri'https://example.com'" -->
<!-- edn-abnf -fe 'hash<<"data", -44>>' -->

<t>If a stage of ingestion is not prepared to handle the Unresolved
Application-Extension Tag, this is an error and processing has to
stop, as if this stage had been ingesting an unknown or unimplemented
application-extension literal itself.</t>
        <t><cref anchor="cpa">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
      </section>
      <section anchor="elision">
        <name>Handling information deliberately elided from an EDN document</name>
        <t>When using EDN for exposition in a document or on a whiteboard, it is
often useful to be able to leave out parts of an EDN document that are
not of interest at that point of the exposition.</t>
        <t>To facilitate this, this specification
supports the use of an <em>ellipsis</em> (notated as three or more dots
in a row, as in <tt>...</tt>) to indicate parts of an EDN document that have
been elided (and therefore cannot be reconstructed).</t>
        <t>Upon ingesting EDN as a representation of a CBOR data item for further
processing, the occurrence of an ellipsis usually is an error and
processing has to stop.</t>
        <t>However, it is useful to be able to process EDN documents with
ellipses in the automation scripts for the documents using them.
This specification defines a CBOR Tag that can be used in the ingestion
for this purpose:
The Diagnostic Notation Ellipsis Tag, tag number CPA888 (<xref target="iana-standin"/>).
The content of this tag either is</t>
        <ol spacing="normal" type="1"><li>
            <t>null (indicating a data item entirely replaced by an ellipsis), or it is</t>
          </li>
          <li>
            <t>an array, the elements of which are alternating between fragments
of a string and the actual elisions, represented as ellipses
carrying a null as content.</t>
          </li>
        </ol>
        <t>Elisions can stand in for entire subtrees, e.g. in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, ..., 3]
{ "a": 1,
  "b": ...,
  ...: ...
}
]]></sourcecode>
        <t>A single ellipsis (or key/value pair of ellipses) can imply eliding
multiple elements in an array (members in a map); if more detailed
control is required, a data definition language such as CDDL can be
employed.
(Note that the stand-in form defined here does not allow multiple
key/value pairs with an ellipsis as a key: the CBOR data item would
not be valid.)</t>
        <t>Subtree elisions can be represented in a CBOR data item by using
<tt>/CPA/888(null)</tt> as the stand-in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 888(null), 3]
{ "a": 1,
  "b": 888(null),
  888(null): 888(null)
}
]]></sourcecode>
        <t>Elisions also can be used as part of a (text or byte) string:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" + ... + "gned: Alice & Bob",
  "bytes_in_IRI": 'https://a.example/' + ... + '&q=Übergrößenträger',
  "signature": h'4711...0815',
}
]]></sourcecode>
        <t>The example "contract" combines string concatenation via the <tt>+</tt>
operator (<xref target="grammar"/>) with
ellipses; while the example
"signature" uses special syntax that allows the use of ellipses
between the bytes notated <em>inside</em> <tt>h''</tt> literals.</t>
        <t>String elisions can be represented in a CBOR data item by a stand-in
that wraps an array of string fragments alternating with ellipsis
indicators:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": /CPA/888(["Herewith I buy", 888(null),
                        "gned: Alice & Bob"]),
  "bytes_in_IRI": 888(['https://a.example/', 888(null),
                       '&q=Übergrößenträger']),
  "signature": 888([h'4711', 888(null), h'0815']),
}
]]></sourcecode>
        <t>Note that the use of elisions is different from "commenting out" EDN
text, e.g.:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "signature": h'4711/.../0815',
  # ...: ...
}
]]></sourcecode>
        <t>The consumer of this EDN will ignore the comments and therefore will
have no idea after ingestion that some information has been elided;
validation steps may then simply fail instead of being informed about
the elisions.</t>
      </section>
    </section>
    <section anchor="grammars">
      <name>ABNF Definitions</name>
      <t>This section collects grammars in ABNF form (<xref target="STD68"/> as extended in
<xref target="RFC7405"/>) that serve to define the syntax of EDN and some
application-oriented literals.</t>
      <t>Implementation note: The ABNF definitions in this section are
intended to be useful in a Parsing Expression Grammar (PEG) parser
interpretation (see <xref section="A" sectionFormat="of" target="RFC8610"/> for an introduction into PEG).</t>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Extended Diagnostic Notation</name>
        <t>This subsection provides an overall ABNF definition for the syntax of
CBOR extended diagnostic notation.</t>
        <aside>
          <t>This ABNF definition treats all single-quoted string literals the same,
whether they are unprefixed and constitute byte string literals, or
prefixed and their content subject to further processing.
The text string value of the single-quoted strings that goes into that
further processing is described using separate ABNF definitions in
<xref target="app-grammars"/>; as a convention, the grammar for the content of an
app-string with prefix, say, <tt>p</tt>, is described by an ABNF definition
with the rule name <tt>app-string-p</tt>.</t>
          <t>As an implementation note, some implementations may want to integrate
the parsing and processing of app-string content for certain
application extensions with the overall grammar.
Example grammars for such integrated parsers are provided with this
specification in <xref target="integrated-grammars"/>.</t>
        </aside>
        <t>For simplicity, the internal parsing for the built-in EDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt> and <tt>b64''</tt> are provided in <xref target="h-grammar"/> and
<xref target="b64-grammar"/>.
However, the prefixes <tt>b32''</tt> and <tt>h32''</tt> are not in wide use and an
ABNF definition in this document could therefore not be based on
implementation experience.</t>
        <figure anchor="abnf-grammar">
          <name>Overall ABNF Definition of CBOR EDN</name>
          <sourcecode type="abnf" name="cbor-edn.abnf"><![CDATA[
seq             = S [item *(MSC item) SOC]
one-item        = S item S
item            = map / array / tagged
                / number / simple
                / string / streamstring

string1         = (tstr / bstr) spec
string1e        = string1 / ellipsis
ellipsis        = 3*"." ; "..." or more dots
string          = string1e *(S "+" S string1e)

number          = (hexfloat / hexint / octint / binint
                   / decnumber / nonfin) spec
sign            = "+" / "-"
decnumber       = [sign] (1*DIGIT ["." *DIGIT] / "." 1*DIGIT)
                         ["e" [sign] 1*DIGIT]
hexfloat        = [sign] "0x" (1*HEXDIG ["." *HEXDIG] / "." 1*HEXDIG)
                         "p" [sign] 1*DIGIT
hexint          = [sign] "0x" 1*HEXDIG
octint          = [sign] "0o" 1*ODIGIT
binint          = [sign] "0b" 1*BDIGIT
nonfin          = %s"Infinity"
                / %s"-Infinity"
                / %s"NaN"
simple          = %s"false"
                / %s"true"
                / %s"null"
                / %s"undefined"
                / %s"simple(" S item S ")"
uint            = "0" / DIGIT1 *DIGIT
tagged          = uint spec "(" S item S ")"

app-prefix      = lcalpha *lcldh ; including h and b64
                / ucalpha *ucldh ; tagged variant, if defined
app-string      = app-prefix sqstr
app-sequence    = app-prefix "<<" seq ">>"
sqstr           = SQUOTE *single-quoted SQUOTE
bstr            = app-string / sqstr / app-sequence / embedded
                  ; app-string/-sequence could be any type
tstr            = DQUOTE *double-quoted DQUOTE
embedded        = "<<" seq ">>"

array           = "[" (specms S item *(MSC item) SOC / spec S) "]"
map             = "{" (specms S keyp *(MSC keyp) SOC / spec S) "}"
keyp            = item S ":" S item

; We allow %x09 HT in prose, but not in strings
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-7F / NONASCII
non-lf          = %x09 / %x0D / %x20-7F / NONASCII
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A
; optional space
S               = *blank *(comment *blank)
; mandatory space
MS              = (blank/comment) S
; mandatory comma and/or space
MSC             = ("," S) / (MS ["," S])
; optional comma and/or space
SOC             = S ["," S]

; check semantically that strings are either all text or all bytes
; note that there must be at least one string to distinguish
streamstring    = "(_" MS string *(MSC string) SOC ")"
spec            = ["_" *wordchar]
specms          = ["_" *wordchar MS]

double-quoted   = unescaped
                / SQUOTE
                / "\" escapable-d

single-quoted   = unescaped
                / DQUOTE
                / "\" escapable-s

escapable1      = %s"b" ; BS backspace U+0008
                / %s"f" ; FF form feed U+000C
                / %s"n" ; LF line feed U+000A
                / %s"r" ; CR carriage return U+000D
                / %s"t" ; HT horizontal tab U+0009
                / "\"   ; \ backslash (reverse solidus) U+005C

escapable-d     = escapable1
                / DQUOTE
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

escapable-s     = escapable1
                / SQUOTE
                / (%s"u" hexchar-s) ;  uXXXX      U+XXXX

hexchar         = "{" (1*"0" [ hexscalar ] / hexscalar) "}"
                / non-surrogate
                / two-surrogate
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
two-surrogate   = high-surrogate "\" %s"u" low-surrogate
high-surrogate  = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate   = "D" ("C"/"D"/"E"/"F") 2HEXDIG
hexscalar       = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate / 1*3HEXDIG

; single-quote hexchar-s: don't allow 0020..007e
hexchar-s       = "{" (1*"0" [ hexscalar-s ] / hexscalar-s) "}"
                / non-surrogate-s
                / two-surrogate
non-surrogate-s = "007F"                 ; rubout
                / "00" ("0"/"1"/"8"/"9"/HEXDIGA) HEXDIG
                / "0" HEXDIG1 2HEXDIG
                / non-surrogate-1
non-surrogate-1 = ((DIGIT1 / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
hexscalar-s     = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate-1 / HEXDIG1 2HEXDIG
                / ("1"/"8"/"9"/HEXDIGA) HEXDIG
                / "7F"
                / HEXDIG1

; Note that no other C0 characters are allowed, including %x09 HT
unescaped       = %x0A ; new line
                / %x0D ; carriage return -- ignored on input
                / %x20-21
                     ; omit 0x22 "
                / %x23-26
                     ; omit 0x27 '
                / %x28-5B
                     ; omit 0x5C \
                / %x5D-7F
                / NONASCII

DQUOTE          = %x22    ; " double quote
SQUOTE          = "'"     ; ' single quote
DIGIT           = %x30-39 ; 0-9
DIGIT1          = %x31-39 ; 1-9
ODIGIT          = %x30-37 ; 0-7
BDIGIT          = %x30-31 ; 0-1
HEXDIGA         = "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
HEXDIG          = DIGIT / HEXDIGA
HEXDIG1         = DIGIT1 / HEXDIGA
lcalpha         = %x61-7A ; a-z
lcldh           = lcalpha / DIGIT / "-"
ucalpha         = %x41-5A ; A-Z
ucldh           = ucalpha / DIGIT / "-"
ALPHA           = lcalpha / ucalpha
wordchar        = "_" / ALPHA / DIGIT ; [_a-z0-9A-Z]
NONASCII        = %x80-D7FF / %xE000-10FFFF
]]></sourcecode>
        </figure>
        <t>While an ABNF grammar defines the set of character strings that are
considered to be valid EDN by this ABNF, the mapping of these
character strings into the generic data model of CBOR is not always
obvious.</t>
        <t>The following additional items should help in the interpretation:</t>
        <ol spacing="normal" type="1"><li>
            <t>As mentioned in the terminology (<xref target="terminology"/>), the ABNF terminal
  values in this document define Unicode scalar values (characters)
  rather than their UTF-8 encoding.  For example, the Unicode PLACE OF
  INTEREST SIGN (U+2318) would be defined in ABNF as %x2318.</t>
          </li>
          <li anchor="cr">
            <t>Unicode CARRIAGE RETURN (U+000D, often seen escaped as "\r" in many
  programming languages) that exist in the input (unescaped) are
  ignored as if they were not in the input wherever they appear.
  This is most important when they are found in (text or byte) string
  contexts (see the "unescaped" ABNF rule).
  On some platforms, a carriage return is always added in front of a
  LINE FEED (U+000A, also often seen escaped as "\n" in many
  programming languages), but on other platforms, carriage returns are
  not used at line breaks.
  The intent behind ignoring unescaped carriage returns is to ensure
  that input generated or processed on either of these kinds of
  platforms will generate the same bytes in the CBOR data items
  created from that input.
  (Platforms that use just a CARRIAGE RETURN by itself to signify an end of line
  are no longer relevant and the files they produce are out of scope
  for this document.)
  If a carriage return is needed in the CBOR data item, it can be
  added explicitly using the escaped form <tt>\r</tt>.</t>
          </li>
          <li anchor="decnumber">
            <t><tt>decnumber</tt> stands for an integer in the usual decimal notation, unless at
  least one of the optional parts starting with "." and "e" are
  present, in which case it stands for a floating point value in the
  usual decimal notation.  Note that the grammar now allows <tt>3.</tt> for
  <tt>3.0</tt> and <tt>.3</tt> for <tt>0.3</tt> (also for hexadecimal floating point
  below); implementers are advised that some platform numeric parsers
  accept only a subset of the floating point syntax in this document
  and may require some preprocessing to use here.</t>
          </li>
          <li>
            <t><tt>hexint</tt>, <tt>octint</tt>, and <tt>binint</tt> stand for an integer in the usual base 16/hexadecimal
  ("0x"), base 8/octal ("0o"), or base 2/binary ("0b") notation.
  <tt>hexfloat</tt> stands
  for a floating point number in the usual hexadecimal notation (which
  uses a mantissa in hexadecimal and an exponent in decimal notation,
  see Section 5.12.3 of <xref target="IEEE754"/>, Section 6.4.4.3 of <xref target="C"/>, or Section
  5.13.4 of <xref target="Cplusplus"/>; floating-suffix/floating-point-suffix from
  the latter two is not used here).</t>
          </li>
          <li>
            <t>For <tt>hexint</tt>, <tt>octint</tt>, <tt>binint</tt>, and when <tt>decnumber</tt> stands for an integer, the
  corresponding CBOR data item is represented using major type 0 or 1
  if possible, or using tag 2 or 3 if not.
  In the latter case, this specification does not define any encoding
  indicators that apply.
  If fine control over encoding is desired, this can be expressed by
  being explicit about the representation as a tag:
  E.g., <tt>987654321098765432310</tt>, which is equivalent to <tt>2(h'35 8a 75
  04 38 f3 80 f5 f6')</tt> in its preferred serialization, might be
  written as <tt>2_3(h'00 00 00 35 8a 75 04 38 f3 80 f5 f6'_1)</tt> if
  leading zeros need to be added during serialization to obtain
  specific sizes for tag head, byte string head, and the overall byte
  string.  </t>
            <t>
When <tt>decnumber</tt> stands for a floating point value, and for
<tt>hexfloat</tt> and <tt>nonfin</tt>, a floating point data item with major
type 7 is used in preferred serialization (unless modified by an
encoding indicator, which then needs to be <tt>_1</tt>, <tt>_2</tt>, or <tt>_3</tt>).
For this, the number range needs to fit into an <xref target="IEEE754"/> binary64 (or the size
corresponding to the encoding indicator), and the precision will be
adjusted to binary64 before further applying preferred serialization
(or to the size corresponding to the encoding indicator).
Tag 4/5 representations are not generated in these cases.
Future app-prefixes could be defined to allow more control for
obtaining a tag 4/5 representation directly from a hex or decimal
floating point literal.</t>
          </li>
          <li anchor="spec">
            <t><tt>spec</tt> stands for an encoding indicator.
  See <xref target="encoding-indicators"/> for details.</t>
          </li>
          <li anchor="concat">
            <t>Extended diagnostic notation allows a (text or byte) string to be
  built up from multiple (text or byte) string literals, separated by
  a <tt>+</tt> operator; these are then concatenated into a single string.  </t>
            <t><tt>string</tt>, <tt>string1e</tt>, <tt>string1</tt>, and <tt>ellipsis</tt> realize: (1) the
representation of strings in this form split up into multiple
chunks, and (2) the use of ellipses to represent elisions
(<xref target="elision"/>).  </t>
            <t>
Note that the syntax defined here for concatenation of components
uses an explicit <tt>+</tt> operator between the components to be
concatenated (<xref section="G.4" sectionFormat="of" target="RFC8610"/> used simple juxtaposition,
which was not widely implemented and got in the way of making the use
of commas optional in other places via the rule <tt>OC</tt>).  </t>
            <t>
Text strings and byte strings do not mix within such a
concatenation, except that byte string literal notation can be used
inside a sequence of concatenated text string notation literals, to
encode characters that may be better represented in an encoded way.
The following four text string values (adapted from <xref section="G.4" sectionFormat="of" target="RFC8610"/> by updating to explicit <tt>+</tt> operators) are equivalent:  </t>
            <artwork><![CDATA[
"Hello world"
"Hello " + "world"
"Hello" + h'20' + "world"
"" + h'48656c6c6f20776f726c64' + ""
]]></artwork>
            <t>
Similarly, the following byte string values are equivalent:  </t>
            <artwork><![CDATA[
'Hello world'
'Hello ' + 'world'
'Hello ' + h'776f726c64'
'Hello' + h'20' + 'world'
'' + h'48656c6c6f20776f726c64' + '' + b64''
h'4 86 56c 6c6f' + h' 20776 f726c64'
]]></artwork>
            <t>
The semantic processing of these constructs is governed by the
following rules:  </t>
            <ul spacing="normal">
              <li>
                <t>A single <tt>...</tt> is a general ellipsis, which by itself can stand
for any data item.
Multiple adjacent concatenated ellipses are equivalent to a single
ellipsis.</t>
              </li>
              <li>
                <t>An ellipsis can be concatenated (on one or both sides) with string
chunks (<tt>string1</tt>); the result is a CBOR tag number CPA888 that contains an
array with joined together spans of such chunks plus the ellipses
represented by <tt>888(null)</tt>.</t>
              </li>
              <li>
                <t>If there is no ellipsis in the concatenated list, the result of
processing the list will always be a single item.</t>
              </li>
              <li>
                <t>The bytes in the concatenated sequence of string chunks are simply
joined together, proceeding from left to right.
If the left hand side of a concatenation is a text string, the
joining operation results in a text string, and that
result needs to be valid UTF-8 except for implementations that
support and are enabled for generation/ingestion of EDN for CBOR
data items that are well-formed but not valid.
If the left hand side is a byte string, the right hand side also
needs to be a byte string.</t>
              </li>
              <li>
                <t>Some of the strings may be app-strings.
If the result type of the app-string is an actual (text or byte)
string, joining of those string chunks occurs as with chunks
directly notated as string literals; otherwise the occurrence of more than
one app-string or an app-string together with a directly notated
string cannot be processed.
(This determination must be made at the time the app-string is
interpreted; see <xref target="unknown"/> for how this may not be immediately
during parsing.)</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for Application Extension Content</name>
        <t>This subsection provides ABNF definitions for the content of
application-oriented extension literals defined in <xref target="STD94"/> and in this
specification, where applicable.
These grammars describe the <em>decoded</em> content of the <tt>sqstr</tt> components that
combine with the application-extension identifiers used as prefixes to form
application-oriented extension literals.
Each of these may integrate ABNF rules defined in <xref target="abnf-grammar"/>,
which are not always repeated here.</t>
        <t><xref target="tab-prefixes"/> summarizes the app-prefix values defined in this document.</t>
        <table anchor="tab-prefixes">
          <name>App-prefix Values Defined in this Document</name>
          <thead>
            <tr>
              <th align="left">app-prefix</th>
              <th align="left">content of single-quoted string</th>
              <th align="left">result type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">hexadecimal form of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">H</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">base64 forms (classic or base64url) of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">B64</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">RFC 3339 date/time</td>
              <td align="left">number (int or float)</td>
            </tr>
            <tr>
              <td align="left">DT</td>
              <td align="left">"</td>
              <td align="left">Tag 1 on the above</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP address or prefix</td>
              <td align="left">byte string, <br/>array of length and byte string</td>
            </tr>
            <tr>
              <td align="left">IP</td>
              <td align="left">"</td>
              <td align="left">Tag 54 (IPv6) or 52 (IPv4) on the above</td>
            </tr>
          </tbody>
        </table>
        <t>Note that implementation platforms may already provide implementations
of grammars used in application-extensions, such as of RFC 3339 for
<tt>dt''</tt> and of IP address syntax for <tt>ip''</tt>.
EDN-based tools may want to use these implementation libraries instead
of using the grammars that are provided here as a reference.</t>
        <section anchor="h-grammar">
          <name>h: ABNF Definition of Hexadecimal representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in hex,
such as <tt>h''</tt>, <tt>h'0815'</tt>, or <tt>h'/head/ 63 /contents/ 66 6f 6f'</tt>
(another representation of <tt>&lt;&lt; "foo" &gt;&gt;</tt>), is described by the ABNF in <xref target="abnf-grammar-h"/>.
This syntax accommodates both lower case and upper case hex digits, as
well as blank space (including comments) around each hex digit.</t>
          <figure anchor="abnf-grammar-h">
            <name>ABNF Definition of Hexadecimal Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  ["#" *non-lf]
ellipsis        = 3*"."
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT           = %x30-39 ; 0-9
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
S               = *blank *(comment *blank )
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="b64-grammar">
          <name>b64: ABNF Definition of Base64 representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in base64 is
described by the ABNF in <xref target="abnf-grammar-h"/>.</t>
          <t>This syntax allows both the classic (<xref section="4" sectionFormat="of" target="RFC4648"/>) and the
URL-safe (<xref section="5" sectionFormat="of" target="RFC4648"/>) alphabet to be used.
It accommodates, but does not require base64 padding.
Note that inclusion of classic base64 makes it impossible to have
in-line comments in b64, as "/" is valid base64-classic.</t>
          <figure anchor="abnf-grammar-b64">
            <name>ABNF definition of Base64 Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *inon-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *iblank *(icomment *iblank)
iblank          = %x0A / %x20  ; Not HT or CR (gone)
icomment        = "#" *inon-lf %x0A
inon-lf         = %x20-D7FF / %xE000-10FFFF
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39
]]></sourcecode>
          </figure>
        </section>
        <section anchor="dt-grammar">
          <name>dt: ABNF Definition of RFC 3339 Representation of a Date/Time</name>
          <t>The syntax of the content of <tt>dt</tt> literals can be described by the
ABNF for <tt>date-time</tt> from <xref target="RFC3339"/> as summarized in <xref section="3" sectionFormat="of" target="RFC9165"/>:</t>
          <figure anchor="abnf-grammar-dt">
            <name>ABNF Definition of RFC3339 Representation of a Date/Time</name>
            <sourcecode type="abnf" name="cbor-edn-dt.abnf"><![CDATA[
app-string-dt   = date-time

date-fullyear   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                          ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap sec
                          ; rules
time-secfrac    = "." 1*DIGIT
time-numoffset  = ("+" / "-") time-hour ":" time-minute
time-offset     = "Z" / time-numoffset

partial-time    = time-hour ":" time-minute ":" time-second
                  [time-secfrac]
full-date       = date-fullyear "-" date-month "-" date-mday
full-time       = partial-time time-offset

date-time       = full-date "T" full-time
DIGIT           =  %x30-39 ; 0-9
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ip-grammar">
          <name>ip: ABNF Definition of Textual Representation of an IP Address</name>
          <t>The syntax of the content of <tt>ip</tt> literals can be described by the
ABNF for <tt>IPv4address</tt> and <tt>IPv6address</tt> in <xref section="3.2.2" sectionFormat="of" target="RFC3986"/>,
as included in slightly updated form in <xref target="abnf-grammar-ip"/>.</t>
          <figure anchor="abnf-grammar-ip">
            <name>ABNF Definition of Textual Representation of an IP Address</name>
            <sourcecode type="abnf" name="cbor-edn-ip.abnf"><![CDATA[
app-string-ip = IPaddress ["/" uint]

IPaddress     = IPv4address
              / IPv6address

; ABNF from RFC 3986, re-arranged for PEG compatibility:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

HEXDIG        = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT         = %x30-39 ; 0-9
DIGIT1        = %x31-39 ; 1-9
uint          = "0" / DIGIT1 *DIGIT
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="integrated-grammars">
        <name>ABNF Definitions for Integrated Extension Parsers</name>
        <t>For some applications of EDN, it is an optimization to integrate
parsers for the content of some prefixed single-quoted string literals into
the main parser, handling both the string literal syntax (e.g., escapes such
as <tt>\'</tt> and <tt>\\</tt>) and the syntax of the extension content in one go.</t>
        <t>For application-extensions that only use printable ASCII characters
(from U+0020 to U+007E) minus single-quote <tt>'</tt> and backslash <tt>\</tt>, the ABNF
such as that given in <xref target="app-grammars"/> can be directly used as an
integrated parser, after adding some glue ABNF.
For instance, for app-string-dt, add an alternative to <tt>bstr</tt> that
points to a rule for prefixed single-quoted string literals (<xref target="abnf-grammar-sq-glue"/>).</t>
        <figure anchor="abnf-grammar-sq-glue">
          <name>Glue Code for Integrated DT Parser</name>
          <sourcecode type="abnf" name="cbor-edn-glue.abnf"><![CDATA[
bstr            = sq-app-string-dt /
                  app-string / sqstr / app-sequence / embedded
sq-app-string-dt = (%s"dt'"/%s"DT'") app-string-dt "'"
]]></sourcecode>
        </figure>
        <t>To facilitate writing integrated ABNF for more complex prefixed
string literals, the ABNF definitions in <xref target="abnf-grammar-sq"/> may
be useful and are used in the rest of this section.</t>
        <figure anchor="abnf-grammar-sq">
          <name>ABNF Definitions Useful for Integrated Extension Parsers</name>
          <sourcecode type="abnf" name="cbor-edn-bricklets.abnf"><![CDATA[
i-HT =        %s"\t" / %s"\u" ("0009" / "{" *("0") "9}")
i-LF = %x0a / %s"\n" / %s"\u" ("000A" / "{" *("0") "A}")
i-CR = %x0d / %s"\r" / %s"\u" ("000D" / "{" *("0") "D}")

i-blank = i-LF / i-CR / " "
i-non-lf = i-HT / i-CR / %x20-26 / "\'" / %x28-5b
         / "\\" / %x5d-7f / i-NONASCII

i-NONASCII = NONASCII / %s"\u" ESCGE7F

; hex escaping for U+007F or greater
ESCGE7F = "D" ("8"/"9"/"A"/"B") 2HEXDIG
          %s"\u" "D" ("C"/"D"/"E"/"F") 2HEXDIG
        / FOURHEX1 / "0" HEXDIG1 2HEXDIG / "00" TWOHEX1
        / "{" *("0")
          ("10" 4HEXDIG / HEXDIG1 4HEXDIG
           / FOURHEX1 / HEXDIG1 2HEXDIG / TWOHEX1)
          "}"

; xxxx - 0xxx - Dhigh\uDloow
FOURHEX1 = (DIGIT1 / "A"/"B"/"C" / "E"/"F") 3HEXDIG
         / "D" ODIGIT 2HEXDIG
; 00xx - ASCII + 007F
TWOHEX1  = ("8"/"9" / HEXDIGA) HEXDIG / "7F"
]]></sourcecode>
        </figure>
        <t>Two subsections with ABNF for integrated parsers follow, one for <tt>h''</tt>,
and one for <tt>b64''</tt>.
There is no requirement for a new application-extension to supply ABNF
for an integrated parser (or any ABNF at all!), in particular if the
parsing function is likely to be fulfilled by a platform library.
If ABNF for the content of a single-quoted string is available in an
application-extension specification, ABNF for an integrated parser can
be written as a separate activity or also automatically derived.
At the time of writing, one example for a tool performing such a
derivation is available as open-source software <xref target="ABNFROB"/>.</t>
        <section anchor="sq-h-grammar">
          <name>h: ABNF Definition of Integrated Parser</name>
          <t>With glue code similar to that in <xref target="abnf-grammar-sq-glue"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-h"/> can be used as an integrated parser
for <tt>h''</tt> prefixed single-quote strings.</t>
          <figure anchor="abnf-grammar-sq-h">
            <name>ABNF Definition for Integrated Hex Parser</name>
            <sourcecode type="abnf" name="cbor-edn-h.abnf"><![CDATA[
sq-app-string-h = %s"h'" app-string-h "'"
app-string-h = h-S *(HEXDIG h-S HEXDIG h-S / ellipsis h-S)
    ["#" *(i-non-lf)]

h-S = *(i-blank) *(h-comment *(i-blank))
h-non-slash = i-blank / %x21-26 / "\'" / %x28-2e
            / %x30-5b / "\\" / %x5d-7f / i-NONASCII
h-comment = "/" *(h-non-slash) "/"
          / "#" *(i-non-lf) i-LF
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-b64-grammar">
          <name>b64: ABNF Definition of Integrated Parser</name>
          <t>With glue code similar to that in <xref target="abnf-grammar-sq-glue"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-b64"/> can be used as an integrated parser
for <tt>h''</tt> prefixed single-quote strings.</t>
          <figure anchor="abnf-grammar-sq-b64">
            <name>ABNF Definition for Integrated Base64 Parser</name>
            <sourcecode type="abnf" name="cbor-edn-b64.abnf"><![CDATA[
sq-app-string-b64 = %s"b64'" app-string-b64 "'"
app-string-b64  = b64-S *(4(b64dig b64-S))
                  [b64dig b64-S b64dig b64-S
                   ["=" b64-S "=" / b64dig b64-S ["="]] b64-S]
                  ["#" *i-non-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
b64-S           = *i-blank *(b64-comment *i-blank)
b64-comment     = "#" *i-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFC-XXXX with the RFC
number of this RFC, [IANA.cbor-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>CBOR Diagnostic Notation Application-extension Identifiers Registry</name>
        <t>IANA is requested to create an "Application-Extension Identifiers"
registry in a new "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "expert review"
(Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions">The experts are instructed to be frugal in the allocation of
application-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for application-extensions that are likely to enjoy wide
use and can make good use of their conciseness.
The expert is also instructed to direct the registrant to provide a
specification (Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>), but can make exceptions,
for instance when a specification is not available at the time of
registration but is likely forthcoming.
If the expert becomes aware of application-extension identifiers that are deployed and
in use, they may also initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Application-Extension Identifier:</dt>
          <dd>
            <t>a lower case ASCII <xref target="STD80"/> string that starts with a letter and can
contain letters, digits, and hyphens after that (<tt>[a-z][a-z0-9-]*</tt>).
No other entry in the registry can have the same
application-extension identifier.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana">
          <name>Initial Content of Application-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">Application-extension Identifier</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">h32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">false</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">true</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">null</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">undefined</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Address/Prefix</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">hash</td>
              <td align="left">Cryptographic Hash</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="reg-ei">
        <name>Encoding Indicators</name>
        <t>IANA is requested to create an "Encoding Indicators"
registry in the newly created "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "specification required"
(Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions-ei">The experts are instructed to be frugal in the allocation of
encoding indicators that are suggestive of generally applicable semantics,
keeping them in reserve for encoding indicator registrations that are likely to enjoy wide
use and can make good use of their conciseness.
If the expert becomes aware of encoding indicators that are deployed and
in use, they may also solicit a specification and initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Encoding Indicator:</dt>
          <dd>
            <t>an ASCII <xref target="STD80"/> string that starts with an underscore letter and
can contain zero or more underscores, letters and digits after that
(<tt>_[_A-Za-z0-9]*</tt>). No other entry in the registry can have the same
Encoding Indicator.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description.
This description may employ an abbreviation of the form <tt>ai=</tt>nn,
where nn is the numeric value of the field <em>additional information</em>, the
low-order 5 bits of the initial byte (see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana-ei"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana-ei">
          <name>Initial Content of Encoding Indicator Registry</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_4</td>
              <td align="left">Reserved (for ai=28)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_5</td>
              <td align="left">Reserved (for ai=29)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_6</td>
              <td align="left">Reserved (for ai=30)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_7</td>
              <td align="left">Reserved (see _)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <aside>
          <t>As the "Reference" column reflects, all the encoding indicators
initially registered are already defined in Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with the exception of <tt>_i</tt>, which is defined in <xref target="grammar"/> of the
present document.</t>
        </aside>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table anchor="new-media-type">
          <name>New Media Type application/cbor-diagnostic</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">cbor-diagnostic</td>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">RFC-XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>cbor-diagnostic</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools interchanging a human-readable form of CBOR</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t><br/>
            </t>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.diag</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CBOR WG mailing list (cbor@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>LIMITED USE</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>CBOR diagnostic notation represents CBOR data items, which are the
format intended for actual interchange.
The media type application/cbor-diagnostic is intended to be used
within documents about CBOR data items, in diagnostics for human
consumption, and in other representations of CBOR data items that
are necessarily text-based such as in configuration files or other
data edited by humans, often under source-code control.</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>IANA is requested to register a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.core-parameters"/>
sub-registry, within the "Constrained RESTful Environments (CoRE)
Parameters" Registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table anchor="tab-content-format">
          <name>New Content-Format for application/cbor-diagnostic</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>TBD1 is to be assigned from the space 256..9999, according to the
procedure "IETF Review or IESG Approval", preferably a number less
than 1000.</t>
      </section>
      <section anchor="iana-standin">
        <name>Stand-in Tags</name>
        <t><cref anchor="cpa_1">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
        <t>In the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>, IANA is requested to assign the
tags in <xref target="tab-tag-values"/> from the "specification required" space
(suggested assignments: 888 and 999), with the present document as the
specification reference.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tags</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">CPA888</td>
              <td align="left">null or array</td>
              <td align="left">Diagnostic Notation Ellipsis</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="right">CPA999</td>
              <td align="left">array</td>
              <td align="left">Diagnostic Notation<br/>Unresolved Application-Extension</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="STD94"/> and <xref target="RFC8610"/> apply.</t>
      <t>The EDN specification provides two explicit extension points,
application-extension identifiers (<xref target="appext-iana"/>) and encoding
indicators (<xref target="reg-ei"/>).
Extensions introduced this way can have their own security
considerations (see, e.g., <xref section="5" sectionFormat="of" target="I-D.ietf-cbor-edn-e-ref"/>).
When implementing tools that support the use of EDN extensions, the
implementer needs to be careful not to inadvertently introduce a
vector for an attacker to invoke extensions not planned for by the
tool operator, who might not have considered security considerations
of specific extensions such as those posed by their use of
dereferenceable identifiers (<xref section="6" sectionFormat="of" target="I-D.bormann-t2trg-deref-id"/>).
For instance, tools might require explicitly enabling the use of each
extension that is not on an allowlist.
This task can possibly be
made less onerous by combining it with a mechanism for supplying any
parameters controlling such an extension.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
            <front>
              <title>Concise Binary Object Representation (CBOR)</title>
              <author fullname="C. Bormann" initials="C." surname="Bormann"/>
              <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
              <date month="December" year="2020"/>
              <abstract>
                <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
                <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="94"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <referencegroup anchor="STD68" target="https://www.rfc-editor.org/info/std68">
          <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
            <front>
              <title>Augmented BNF for Syntax Specifications: ABNF</title>
              <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
              <author fullname="P. Overell" initials="P." surname="Overell"/>
              <date month="January" year="2008"/>
              <abstract>
                <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="68"/>
            <seriesInfo name="RFC" value="5234"/>
            <seriesInfo name="DOI" value="10.17487/RFC5234"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD63" target="https://www.rfc-editor.org/info/std63">
          <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629">
            <front>
              <title>UTF-8, a transformation format of ISO 10646</title>
              <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
              <date month="November" year="2003"/>
              <abstract>
                <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="63"/>
            <seriesInfo name="RFC" value="3629"/>
            <seriesInfo name="DOI" value="10.17487/RFC3629"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC9164">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This specification defines two Concise Binary Object Representation (CBOR) tags for use with IPv6 and IPv4 addresses and prefixes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9164"/>
          <seriesInfo name="DOI" value="10.17487/RFC9164"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
        <reference anchor="IANA.cose" target="https://www.iana.org/assignments/cose">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP26" target="https://www.rfc-editor.org/info/bcp26">
          <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
        <referencegroup anchor="STD80" target="https://www.rfc-editor.org/info/std80">
          <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20">
            <front>
              <title>ASCII format for network interchange</title>
              <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
              <date month="October" year="1969"/>
            </front>
            <seriesInfo name="STD" value="80"/>
            <seriesInfo name="RFC" value="20"/>
            <seriesInfo name="DOI" value="10.17487/RFC0020"/>
          </reference>
        </referencegroup>
        <reference anchor="IEEE754" target="https://ieeexplore.ieee.org/document/8766229">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="IEEE Std" value="754-2019"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/>
        </reference>
        <reference anchor="C" target="https://www.iso.org/standard/82075.html">
          <front>
            <title>Information technology — Programming languages — C</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9899:2024"/>
          <annotation> 
The standard is widely known as C23. Its technical content is also available via <eref target="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf">https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf</eref>.</annotation>
          <refcontent>Edition 5</refcontent>
        </reference>
        <reference anchor="Cplusplus" target="https://www.iso.org/standard/83626.html">
          <front>
            <title>Programming languages — C++</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="14882:2024"/>
          <annotation> 
The standard is widely known as C++23. Its technical content is also available via <eref target="https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf">https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf</eref>.</annotation>
          <refcontent>Edition 7</refcontent>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC9290">
          <front>
            <title>Concise Problem Details for Constrained Application Protocol (CoAP) APIs</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="October" year="2022"/>
            <abstract>
              <t>This document defines a concise "problem detail" as a way to carry machine-readable details of errors in a Representational State Transfer (REST) response to avoid the need to define new error response formats for REST APIs for constrained environments. The format is inspired by, but intended to be more concise than, the problem details for HTTP APIs defined in RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9290"/>
          <seriesInfo name="DOI" value="10.17487/RFC9290"/>
        </reference>
        <referencegroup anchor="STD90" target="https://www.rfc-editor.org/info/std90">
          <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
            <front>
              <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
              <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
              <date month="December" year="2017"/>
              <abstract>
                <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
                <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="90"/>
            <seriesInfo name="RFC" value="8259"/>
            <seriesInfo name="DOI" value="10.17487/RFC8259"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-numbers">
          <front>
            <title>On Numbers in CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR), as defined in STD 94
   (RFC 8949), is a data representation format whose design goals
   include the possibility of extremely small code size, fairly small
   message size, and extensibility without the need for version
   negotiation.

   Among the kinds of data that a data representation format needs to be
   able to carry, numbers have a prominent role, but also have inherent
   complexity that needs attention from protocol designers and
   implementers of CBOR libraries and of the applications that use them.

   This document gives an overview over number formats available in CBOR
   and some notable CBOR tags registered, and it attempts to provide
   information about opportunities and potential pitfalls of these
   number formats.


   // This is a rather drafty initial revision, pieced together from
   // various components, so it has a higher level of redundancy than
   // ultimately desired.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-numbers-02"/>
        </reference>
        <reference anchor="RFC9165">
          <front>
            <title>Additional Control Operators for the Concise Data Definition Language (CDDL)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point.</t>
              <t>The present document defines a number of control operators that were not yet ready at the time RFC 8610 was completed:.plus,.cat, and.det for the construction of constants;.abnf/.abnfb for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and.feature for indicating the use of a non-basic feature in an instance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9165"/>
          <seriesInfo name="DOI" value="10.17487/RFC9165"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-update-8610-grammar">
          <front>
            <title>Updates to the CDDL grammar of RFC 8610</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="24" month="June" year="2024"/>
            <abstract>
              <t>   The Concise Data Definition Language (CDDL), as defined in RFC 8610
   and RFC 9165, provides an easy and unambiguous way to express
   structures for protocol messages and data formats that are
   represented in CBOR or JSON.

   The present document updates RFC 8610 by addressing errata and making
   other small fixes for the ABNF grammar defined for CDDL there.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-update-8610-grammar-06"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-e-ref">
          <front>
            <title>External References to Values in CBOR Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="2" month="July" year="2025"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949) is a data
   format whose design goals include the possibility of extremely small
   code size, fairly small message size, and extensibility without the
   need for version negotiation.

   CBOR diagnostic notation (EDN) is widely used to represent CBOR data
   items in a way that is accessible to humans, for instance for
   examples in a specification.  At the time of writing, EDN did not
   provide mechanisms for composition of such examples from multiple
   components or sources.  This document uses EDN application extensions
   to provide two such mechanisms, both of which insert an imported data
   item into the data item being described in EDN:

   The e'' application extension provides a way to import data items,
   particularly constant values, from a CDDL model (which itself has
   ways to provide composition).

   The ref'' application extension provides a way to import data items
   that are described in EDN.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-e-ref-02"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-deref-id">
          <front>
            <title>The "dereferenceable identifier" pattern</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="3" month="March" year="2025"/>
            <abstract>
              <t>   In a protocol or an application environment, it is often important to
   be able to create unambiguous identifiers for some meaning (concept
   or some entity).

   Due to the simplicity of creating URIs, these have become popular for
   this purpose.  Beyond the purpose of identifiers to be uniquely
   associated with a meaning, some of these URIs are in principle
   _dereferenceable_, so something can be placed that can be retrieved
   when encountering such a URI.


   // The present revision -04 includes a few clarifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-05"/>
        </reference>
        <reference anchor="RFC9512">
          <front>
            <title>YAML Media Type</title>
            <author fullname="R. Polli" initials="R." surname="Polli"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="E. Aro" initials="E." surname="Aro"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document registers the application/yaml media type and the +yaml structured syntax suffix with IANA. Both identify document components that are serialized according to the YAML specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9512"/>
          <seriesInfo name="DOI" value="10.17487/RFC9512"/>
        </reference>
        <reference anchor="YAML" target="https://yaml.org/spec/1.2.2/">
          <front>
            <title>YAML Ain't Markup Language (YAML™) Version 1.2</title>
            <author initials="O." surname="Ben-Kiki" fullname="Oren Ben-Kiki">
              <organization/>
            </author>
            <author initials="C." surname="Evans" fullname="Clark Evans">
              <organization/>
            </author>
            <author initials="I." surname="döt Net" fullname="Ingy döt Net">
              <organization/>
            </author>
            <date year="2021" month="October" day="01"/>
          </front>
          <refcontent>Revision 1.2.2</refcontent>
        </reference>
        <reference anchor="ABNFROB" target="https://github.com/cabo/abnftt">
          <front>
            <title>PEG-parsing using ABNF grammars (via treetop)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 2273?>

<section anchor="edn-and-cddl">
      <name>EDN and CDDL</name>
      <t>This appendix is for information.</t>
      <t>EDN was designed as a language to provide a human-readable
representation of an instance, i.e., a single CBOR data item or CBOR
sequence.
CDDL was designed as a language to describe an (often large) set of
such instances (which itself constitutes a language), in the form of a
<em>data definition</em> or <em>grammar</em> (or sometimes called <em>schema</em>).</t>
      <t>The two languages share some similarities, not the least because they
have mutually inspired each other.
But they have very different roots:</t>
      <ul spacing="normal">
        <li>
          <t>EDN syntax is an extension to JSON syntax <xref target="STD90"/>.
(Any (interoperable) JSON text is also valid EDN.)</t>
        </li>
        <li>
          <t>CDDL syntax is inspired by ABNF's syntax <xref target="STD68"/>.</t>
        </li>
      </ul>
      <t>For engineers that are using both EDN and CDDL, it is easy to write
"CDDLisms" or "EDNisms" into their drafts that are meant to be in the
other language.
(This is one more of the many motivations to always validate formal
language instances with tools.)</t>
      <t>Important differences include:</t>
      <ul spacing="normal">
        <li>
          <t>Comment syntax.  CDDL inherits ABNF's semicolon-delimited end of
line characters, while EDN finds nothing in JSON that could be inherited here.
Inspired by JavaScript, EDN simplifies JavaScript's copy of the
original C comment syntax to be delimited by single slashes (where
line breaks are not of interest); it also adds end-of-line comments
starting with <tt>#</tt>.  </t>
          <dl spacing="compact">
            <dt>EDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
{ / alg / 1: -7 / ECDSA 256 / }
,
{ 1:   # alg
    -7 # ECDSA 256
}
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>? 1 =&gt; int / tstr,  ; algorithm identifier</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Syntax for tags.  CDDL's tag syntax is part of the system for
referring to CBOR's fundamentals (the major type 6, in this case)
and (with <xref target="I-D.ietf-cbor-update-8610-grammar"/>) allows specifying the actual tag number
separately, while EDN's tag syntax is a simple decimal number and a
pair of parentheses.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <artwork><![CDATA[
98([h'', # empty encoded protected header
    {},  # empty unprotected header
    ...  # rest elided here
   ])
]]></artwork>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Embedded CBOR.  EDN has a special syntax to describe the content of
byte strings that are encoded CBOR data items.  CDDL can specify
these with a control operator, which looks very different.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <artwork><![CDATA[
98([<< {/alg/ 1: -7 /ECDSA 256/} >>, # == h'a10126'
    ...                              # rest elided here
   ])
]]></artwork>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>serialized_map = bytes .cbor header_map</tt></t>
            </dd>
          </dl>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="list-of-figures">
      <name>List of Figures</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="abnf-grammar"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar"/></t>
        </dd>
        <dt><xref target="abnf-grammar-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-b64"/></t>
        </dd>
        <dt><xref target="abnf-grammar-dt"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-dt"/></t>
        </dd>
        <dt><xref target="abnf-grammar-ip"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-ip"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-glue"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-glue"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-b64"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="list-of-tables">
      <name>List of Tables</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="tab-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-ei"/></t>
        </dd>
        <dt><xref target="tab-numbers"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-numbers"/></t>
        </dd>
        <dt><xref target="tab-equiv-dt"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-dt"/></t>
        </dd>
        <dt><xref target="tab-equiv-ip"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-ip"/></t>
        </dd>
        <dt><xref target="tab-equiv-hash"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-hash"/></t>
        </dd>
        <dt><xref target="tab-prefixes"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-prefixes"/></t>
        </dd>
        <dt><xref target="tab-iana"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-iana"/></t>
        </dd>
        <dt><xref target="tab-iana-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-iana-ei"/></t>
        </dd>
        <dt><xref target="new-media-type"/>:</dt>
        <dd>
          <t><xref format="title" target="new-media-type"/></t>
        </dd>
        <dt><xref target="tab-content-format"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-content-format"/></t>
        </dd>
        <dt><xref target="tab-tag-values"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-tag-values"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The concept of application-oriented extensions to diagnostic notation,
as well as the definition for the "dt" extension, were inspired by the
CoRAL work by Klaus Hartke.</t>
      <t>(TBD)</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
/SsXEDaq4rH0g/Do5XBIJAbbSaecnC1kf9Cmd60RjlRZwimNP2FuE7iO6JrI
UhVZQWbx0QYZCgKT5E+T3GhVCUvEYvY2kS79AKt1Fee686nX05XXxE+9ftAb
3lV5T+9UV94Pdo/vqLx7ot9WVt49Bc644o3llJXcbOwPriVMhFqvSSIYTZhD
XWwUre3UZCA7xvaCizLkFlsFxr5/AEU7wYGSo1F83+X3XXj/otSAqb9H9ffU
8Zb3XXrfVQKl/lCP6Owd028+h6dyGvE3gCzD5WEp+Y2XUgEDPUMrHKw8i9BB
AUXC6KFiVF/SsT8wQ8VkSMqct1KJrlfE3Oz92Q27wR6CeBj8rPjC73diarRt
dyjQWle0M+gGu9jOUfA7td5oZ13ZztH3L7872tKf1FCWiXYr/h5Xluua9h7p
N+9hBgAC0P87ZcDQH+B+Jzjde/aMwPcMGL6g23kGP6SORZc2P86acWjbpidL
ZqzaR8c2PAWctALNZgNUOjypkXY4mi5b2GrNZvIwKgvTjTE9Y5vuYu7GotYG
lYiUjXYapVaNyGFjKTb+DQumsXUWecPFfuUihGbk0FJq2Pp7kJ9WPGFLhSuY
xcLOMDamP5gUSyXjj3GyzsQT38tK5gIZsStdNifhxzxarJztnK+/PCQLtqPM
5Kt1ygEOrJ0skssb1PV6X23oO1pDCcCN3l0SYXNDOi9aX5N+xk9+k+m6owtI
KdNQdHnhUvRwnMrEREMtB91ky3Bu+OX3Rydn+gUixPPnr89enV281hfn3z7X
9R+/6fW7+w1tM4d73lg0Czj+iMe7mIKo19IIiJP0i2355OjVq/Ojb8/0q7PX
P76iBvF605SoP5Slx9AsjCn6NiVT4yt0DSKPPII00jqKWVgmqvHoE1yN3d5g
1IW6pX8mFLohYcZePbrh9AAirHFVKVL/R6sLXa0iVFtptjKn+PtZbvOE5S7+
PiG9WbJmY75KqyilvXDtqPSm+EN2qDVeR1T4UWz0F+IGulqEOSUtRxu5MnVG
4zSCaEkujHZvaSK6SGjk+/PnZ/rZ2dmpLPhRk+25tq368u5Vb0qiU+FLvOGV
BpfJ2puE7+XkBIozqsSsVhxH8xgXDzeKvdTMwDaajTNO6QJsGrbPkS5o90yC
oym5PNpslqiwYmmM9aD7EGPcqwSzBNsZsMmKTZJkFXxsTCVgUgqHjZuKCndj
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
kA+ivyeT4CN27trn3x7vqv8CjFgOnbZ6AQA=

-->

</rfc>
