<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.24 (Ruby 3.2.0) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-cbor-cddl-more-control-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="CDDL control operators">More Control Operators for CDDL</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-cddl-more-control-00"/>
    <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="2023" month="February" day="25"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610,
provides "control operators" as its main language extension point.
RFCs have added to this extension point both in an
application-specific and a more general way.</t>
      <t>The present document defines a number of additional generally
application control operators for text conversion (Bytes, Integers,
JSON) and operations on text.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>The Concise Data Definition Language (CDDL), standardized in <xref target="RFC8610"/>,
provides "control operators" as its main language extension point
(<xref section="3.8" sectionFormat="of" target="RFC8610"/>).
RFCs have added to this extension point both in an
application-specific <xref target="RFC9090"/> and a more general <xref target="RFC9165"/> way.</t>
      <t>The present document defines a number of additional generally
applicable control operators:</t>
      <table anchor="tbl-new">
        <name>New control operators in this document</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Purpose</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>.b64u</tt>, <tt>.b64c</tt></td>
            <td align="left">Base64 representation of byte strings</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.hex</tt>, <tt>.hexlc</tt>, <tt>.hexuc</tt></td>
            <td align="left">Base16 representation of byte strings</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.b32</tt>, <tt>.h32</tt></td>
            <td align="left">Base32 representation of byte strings</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.decimal</tt></td>
            <td align="left">Text representation of integer numbers</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.json</tt></td>
            <td align="left">Text representation of JSON values</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.join</tt></td>
            <td align="left">Building text from array of components</td>
          </tr>
        </tbody>
      </table>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>This specification uses terminology from <xref target="RFC8610"/>.
In particular, with respect to control operators, "target" refers to
the left-hand side operand, and "controller" to the right-hand side operand.
"Tool" refers to tools along the lines of that described in <xref section="F" sectionFormat="of" target="RFC8610"/>.
Note also that the data model underlying CDDL provides for text
strings as well as byte strings as two separate types, which are
then collectively referred to as "strings".</t>
      </section>
    </section>
    <section anchor="text-conversion">
      <name>Text Conversion</name>
      <section anchor="byte-strings-base16-hex-base32-base64">
        <name>Byte Strings: Base16 (Hex), Base32, Base64</name>
        <t>A CDDL model often defines data that are byte strings in essence but
need to be transported in various encoded forms, such as base64 or
hex.
This section defines a number of control operators to model these
conversions.</t>
        <t>The control operators generally are of a form that could be used like
this:</t>
        <sourcecode type="cddl" name="example1.cddl"><![CDATA[
signature-for-json = text .b64u signature
signature = bytes .cbor COSE_Sign1
]]></sourcecode>
        <t>The specification of these control operators is complicated by the
large number of transformations in use.  Inspired by <xref section="8" sectionFormat="of" target="STD94"/>, we use representations defined in <xref target="RFC4648"/> with the following
names:</t>
        <table>
          <name>Control Operators for Text Conversion of byte strings</name>
          <thead>
            <tr>
              <th align="left">name</th>
              <th align="left">meaning</th>
              <th align="left">reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>.b64u</tt></td>
              <td align="left">Base64URL, no padding</td>
              <td align="left">
                <xref section="5" sectionFormat="of" target="RFC4648"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>.b64c</tt></td>
              <td align="left">Base64 classic, padding</td>
              <td align="left">
                <xref section="4" sectionFormat="of" target="RFC4648"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>.b32</tt></td>
              <td align="left">Base32, no padding</td>
              <td align="left">
                <xref section="6" sectionFormat="of" target="RFC4648"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>.h32</tt></td>
              <td align="left">Base32/hex alphabet, no padding</td>
              <td align="left">
                <xref section="7" sectionFormat="of" target="RFC4648"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>.hex</tt></td>
              <td align="left">Base16 (hex), either case</td>
              <td align="left">
                <xref section="8" sectionFormat="of" target="RFC4648"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>.hexlc</tt></td>
              <td align="left">Base16 (hex), lower case</td>
              <td align="left">
                <xref section="8" sectionFormat="of" target="RFC4648"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>.hexuc</tt></td>
              <td align="left">Base16 (hex), upper case</td>
              <td align="left">
                <xref section="8" sectionFormat="of" target="RFC4648"/></td>
            </tr>
          </tbody>
        </table>
        <t>Note that this specification is somewhat opinionated here: It does not
provide base64url, base32 or base32hex encoding with padding, or
base64 classic without padding.  Experience indicates that these
combinations only ever occur in error, so the usability of CDDL is
increased by not providing them in the first place.  Also, adding "c"
makes sure that any decision for classic base64 is actively taken.</t>
      </section>
      <section anchor="numbers">
        <name>Numbers</name>
        <table>
          <name>Control Operator for Text Conversion of Integers</name>
          <thead>
            <tr>
              <th align="left">name</th>
              <th align="left">meaning</th>
              <th align="left">reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>.decimal</tt></td>
              <td align="left">Decimal Integer</td>
              <td align="left">---</td>
            </tr>
          </tbody>
        </table>
        <t>This allows the modeling of text strings that carry numeric
information, such as in the uint64/int64 formats of YANG-JSON
<xref target="RFC7951"/>.</t>
        <sourcecode type="cddl" name="example2.cddl"><![CDATA[
yang-json-sid = text .decimal (0..9223372036854775807)
]]></sourcecode>
        <t>Again, the specification is opinionated by only providing numbers
without leading zeros, i.e., the decimal numbers match the regular
expression "0|-?[1-9][0-9]*" (of course, further restricted by the
control type).  Future specifications can provide octal, hexadecimal,
or binary conversions.</t>
      </section>
      <section anchor="json-values">
        <name>JSON Values</name>
        <t>Some applications store complete JSON texts into text strings, the
JSON value for can easily be defined in CDDL.
This is supported by a control operator similar to <tt>.cbor</tt> in <xref section="3.8.4" sectionFormat="of" target="RFC8610"/>.</t>
        <table>
          <name>Control Operator for Text Conversion of JSON values</name>
          <thead>
            <tr>
              <th align="left">name</th>
              <th align="left">meaning</th>
              <th align="left">reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>.json</tt></td>
              <td align="left">JSON</td>
              <td align="left">
                <xref target="STD90"/></td>
            </tr>
          </tbody>
        </table>
        <sourcecode type="cddl" name="example3.cddl"><![CDATA[
embedded-claims = text .json claims
claims = {iss: issuer, exp: expiry}
]]></sourcecode>
        <t>Note that a <tt>.jsonseq</tt> is not provided, as no use case is known yet.
There is no way to constrain the use of blank space in data items to
be validated; variants (e.g, not providing for any blank space) could
be defined.</t>
      </section>
    </section>
    <section anchor="text-processing">
      <name>Text Processing</name>
      <section anchor="join">
        <name>Join</name>
        <t>Often, text strings need to be constructed out of parts that can best
be modeled as an array.</t>
        <table>
          <name>Control Operator for Text Generation from Arrays</name>
          <thead>
            <tr>
              <th align="left">name</th>
              <th align="left">meaning</th>
              <th align="left">reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>.join</tt></td>
              <td align="left">concatenate elements of an array</td>
              <td align="left">---</td>
            </tr>
          </tbody>
        </table>
        <t>In general, this control operator is hard to validate as it would
require full parser functionality.
It is therefore recommended to only use it in simple cases, and leave
full parsing to ABNF <xref section="3" sectionFormat="of" target="RFC9165"/> or similar.</t>
        <sourcecode type="cddl" name="example4.cddl"><![CDATA[
legacy-ip-address = text .join [digits<1>, ".", digits<2>,
                           ".", digits<3>, ".", digits<4>]
digits<N> = text .decimal byte<n>
]]></sourcecode>
      </section>
      <section anchor="intersperse">
        <name>Intersperse</name>
        <t>(This section requires some additional design effort before it can be
implemented and registered.)</t>
        <t>The previous example is somewhat unwieldy as the dots are just
syntactic noise.</t>
        <t>The <tt>.intersperse</tt> control is modeled after Haskell's function of the
same name <xref target="INTERSPERSE"/>.  It takes the elements of an array and
intersperses a given additional elements between each to elements of
the additional array.</t>
        <sourcecode type="cddl" name="example5.cddl"><![CDATA[
legacy-ip-address = text .join ("." .intersperse digits)
digits = [4*4 digit]
digit = text .decimal (uint .size 1)
]]></sourcecode>
        <t><tt>.intersperse</tt> is actually not limited to text strings; it can be used
for any juggling of arrays.</t>
        <t>We want to stop here, as there is a danger of generating a functional
programming language in an ad-hoc fashion.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests IANA to register the contents of
<xref target="tbl-iana-reqs"/> into the registry
"<xref section="CDDL Control Operators" relative="#cddl-control-operators" sectionFormat="bare" target="IANA.cddl"/>" of <xref target="IANA.cddl"/>:</t>
      <table anchor="tbl-iana-reqs">
        <name>New control operators to be registered</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>.b64u</tt></td>
            <td align="left">[RFCthis]</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.b64c</tt></td>
            <td align="left">[RFCthis]</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.b32</tt></td>
            <td align="left">[RFCthis]</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.h32</tt></td>
            <td align="left">[RFCthis]</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.hex</tt></td>
            <td align="left">[RFCthis]</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.hexlc</tt></td>
            <td align="left">[RFCthis]</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.hexuc</tt></td>
            <td align="left">[RFCthis]</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.decimal</tt></td>
            <td align="left">[RFCthis]</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.json</tt></td>
            <td align="left">[RFCthis]</td>
          </tr>
          <tr>
            <td align="left">
              <tt>.join</tt></td>
            <td align="left">[RFCthis]</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section removeInRFC="true" anchor="implementation-status">
      <name>Implementation Status</name>
      <!-- RFC7942 -->

<t>In the CDDL tool described in <xref section="F" sectionFormat="of" target="RFC8610"/>,
the control operators defined in this specification are
implemented as of version 0.10.2.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="RFC8610"/> apply.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="STD90">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray">
              <organization/>
            </author>
            <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>
        <reference anchor="STD94">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <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>
        <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">
              <organization/>
            </author>
            <author fullname="C. Vigano" initials="C." surname="Vigano">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <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="IANA.cddl" target="https://www.iana.org/assignments/cddl">
          <front>
            <title>Concise Data Definition Language (CDDL)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </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">
              <organization/>
            </author>
            <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: , , and  for the construction of constants; / for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and 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="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="INTERSPERSE" target="https://hoogle.haskell.org/?hoogle=intersperse">
          <front>
            <title>intersperse</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
          <refcontent>Haskell Documentation</refcontent>
        </reference>
        <reference anchor="RFC9090">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for Object Identifiers</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="July" year="2021"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR), defined in 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.</t>
              <t>This document defines CBOR tags for object identifiers (OIDs) and is the reference document for the IANA registration of the CBOR tags so defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9090"/>
          <seriesInfo name="DOI" value="10.17487/RFC9090"/>
        </reference>
        <reference anchor="RFC7951">
          <front>
            <title>JSON Encoding of Data Modeled with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka">
              <organization/>
            </author>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7951"/>
          <seriesInfo name="DOI" value="10.17487/RFC7951"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Henk Birkholz suggested the need for many of the control operators
defined here.</t>
      <!--  LocalWords:  dedenting dedented
 -->

</section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61a23bbNhZ9x1eg6sPYHVHRzY6txu74lsRdjp2JnenqZGXV
EAlJiClSJUDbiux+yzzMl8z82OwDgBR1cZPVqVZiU7gcAueyzz6AgyBgRplY
9vg+4/xNmkl+lCYmS2N+MZGZMGmm+SDN+NHx8RkT/X4mb3v2Cw/9uLQYx6I0
TMQYsqJMDEzQT7OxSJIgxEMQRlEcjCE/8POCZpNFwmB0u9nuBM120N5iTBuR
RL+IOE3QYbJcMqYmmX3Upt1s7jbb7EZO79Is6vHTxMgskSY4pvexUJge1yZi
eIOWic61F6FNJsUY40+uXjI2UT3+waRhnes0Q89A42k6dg9hOp6I0NiHsUyM
/siYyM0ozXrQT4D/nKsEgo8a/NDtz7a5fR+JTBuZLPSk2bDH3yfqVmZamf/+
2/DDTEI0v/rnqR1Aq5NY+dtUm4EIR7zTaXa7TdsXKjPt+QmuIY3wnuOgvdPZ
2vUtOfSJUa8kvXRqGycjq8C/dneDbrsVtFs7wXZnt92ynXIsVNzjoeinfzOf
VQMrZIwltGaDZdJGL6+Od5s9Ozro8U86dW/f6/F3L4922vbVNKZbjiEjV8fs
dmkMPW23muiG+fH99OD8oEHPPde529re6hWe1HJt3e3uTo/3hZZMJYPqqk7P
r07eXb7F/xP3XiOyIaluZMxE9549G6XpMJaNkdA3Mo5pY89+cG17inxFw1Uh
1k51Xr/cnIU9/tpN58dpmJMP4P1+/85fByLGaBYEARd9WA/+wtjVyEZOqLTk
x8IIfiwHKlE0lZ+JZJiLoeQbFDibcDfycpFF6rOMsATaNSc91dkkS29VJDWv
rYRXjQvNldEc5kt4XMiU9/A4Ta+ZpNhNg0GY5iNxK7mIIsg3KTcjpZcH8n5q
RvRykTAxmcQqtPsMoIxQDVSI9ogLTiHLhzLBImJ+J6YNt9VJJhFihkdeRzyi
7WLdgif5uC8zng7o/VYBmOklxNPqu1YhxEKNwUqpy0YMRm0cTo1EbFK4D9FW
Zz9eXpxv2gW6mRilOUbSTCzQmmas4GYw0ym9IspD+0L/mX2rqPWR7VU+/6cN
ZzOLcY+Pf4IR2cZsdindkjuNHdKlF77559l3NvuBIhCQ+vi4ztizmQ9QdP+J
hu/HctXuPcYe+DkwlK//PPC3eTZJ9VP984GQc93ob3fz67p7CK8X5BwCV7a7
PJN+I84RseY+nIywWCVDXcgZyXsrBr/jsHjKIdHJaW1/pZx+p+1m4/fSvkhO
p/2VciKYbiziRRlOzhUFzaoU5WLG20Z7OQToq0J+Tw5FHL8VcQ5Lz/X8CY72
hJzDXMUR1u6ieZClYy6yTExJGCVZ5CdkV8iZ9fi3ph8HibxzoLxXO8fjKjTA
la2fF55Xe4RHIuepJI3T4ZSCvvg4VwVP4EQUEIdv3l9e1eruNz+/sM/vTv7+
/vTdyTE9X74+ODsrH5gfcfn64v3Z8fxpPvPo4s2bk/NjNxmtfKGJ1d4c/Iwe
Cqraxdur04vzg7PaygagEEnR25cuDUHnBvEsQKSkDjPVd8ByePT2P/9qdRGP
3yAg263WLgLSfdlpPe9SdI5k4t6WJvHUfzUjaWNOisyiABJaKCbKIHnVCYT0
KL1L+EhmEpH93QfSzMcef9EPJ63uvm+gDS80FjpbaLQ6W21ZmeyUuKZpzWtK
bS60L2l6cb0HPy98L/ReaSS3gP4LBHTOnWu4tJn7kfPVEs0bSCB8IjKjwjwW
WZ3fKcAqogNCDFlvxVHhEY6X1DBsQEFnUgZr8FiCFI/ITBrZwU1IIu8mXkws
s5pDdMkzNRytmdBgtas0jSvS8S+NgcBgzUM7M7aIjEgzI0EIXfGm2ewAPpFE
6p6/rOSVBjtPgTdwjtRNIjER5cAxGGfM8ySSWTylgLbkv0xxRcJmBVTBte6I
PeH3AoThu7lLuZZQJmgUN9MJJfW7kQLlRSSQiogRQAUhET44st1g5lIcpte8
qBqlIkKVo5IjLCRym8uJM/BLN6FXoPXGa3mP1O0wt+5zQRU4Vj6MHbgNOzWk
A6L3Rcqz+rHaokhe2C00LTUQNER7blgi3S4Q6uCLiZ6g8nD2uBWZSnNk74So
fUT6HFNBkpNWtKXBSFfg1sg8De+/nhmsy7yrsIm3urVDv6Ctc16lfUZfnVLm
bLsvyud2WW6rqDfiiDaCwIngaTdkOUUZ/LfffnM8X6thIkyOWg/TAko2fM/l
AZuZedk/H4kBpD/NG1RI8KOLy5NfLtHZIqmUI3SaZ6EkHQVUa+3V5L0YT2LZ
suWEzQXYy2Jo2wDAptclE22zkGVF2EZ/SiNZTHFb0aa1lS9BiGIqCxcNVCIw
ocrcxDlVI6LGbLkLFogooMFLuVR7qxWUkexLCE6gQiE3gP+nd3AhRrt0vCgp
eNEDH0uRUAw+SX9czFi/W8+K5hzo/buzOk9SgFsULcp8qOxpy4KEX2YpJ6zI
4WEstFaop5clVeV018hxbOihjMe1i1mSs70qZ7Qo5xkiBUA2GYm+NAtCq3Ke
r5EDtlfKIbQYWbSQsA3cIRQl+3xYsvmqnLjKEb0c2HVRzFfIydfIyYHfXy0H
keNJ1fpjnSUcXSaeFFc2MficsJI9qSEdyzvqTicolkD6KaCIV/T4KdUJCOok
NUVR5BEtz+K6fQT3xTLcExnO4iAZy4aEt1ydALC/4G22P81NMQRBeXKPrSnr
+woJjiJbl8nMQt+4r5KyWgS8yVuK8zDMLUVCrkkzOhWykZhr0VexMpax2hSg
NFNJmEmhXeBjVz4PKpd3x47iIYpVptEXi5DA4gBJtc69D9bCGhuLG6xME+y5
7JFMOVF7awGySrFHv2UoWRQ50WBuAuQ+d4SelXmqghPrkKKKDEvFxAPqXPtY
VNhooQq6wI6nfegpFyoqdQfLtHxCNW11Y5MRrYzwlaYWKdNlFxQJU0JgWDKc
n/+kyTwleh3n4Mzb3Wf2J3fDLOX5+eD8VUDlCnMF7vPdrRbxm3l6mqLqtlkp
AK0qM5NXB99oNhq77Xan87zd7GzvbHWfP9/aaT7f/FIiapeJ6GCI2t4S8NVg
qcYIXMh64dyHfJXGCt+OpbDtn2WWghSohmw4ucVii7IOmw9dAsnkkHgqk/eU
dqxBas2H4IcPrWD344cmfnxX4xuWKeSZlnU+yDOLbxgNQ4SVbFhkTWJqm/Dj
l7nN1At7QhoVScEGEUooL+oI/nvhV1hnFN2IOlh1kXrYivIftqJcLN0ugSe8
cmKBSDF0LmHzNSokV4uS0cgXiP1WvMiqh82rVRdOWCKiVkHXfVlNwBTWnlQR
kAFZHS+DAsQKaQBtGSuolhjVtaUp1y6Je+hlncZOo7vAqStBOY/I1Uh05fiD
21iB53QCCwj/YwFYKdfJI0vXl3AXOjQKgDBqrEvntxzNtbGya6Y0qDN+5BKw
CIfq0Q+VTR+/FAudMhbmyUP4jWr56zVpe46eMrIFKRI18SWb2NB/k1B9OpWG
DAR1uTl0EuWrLjp5LbBAW5raj0VyA/8UNgM4eq6MHNsKDJaHQhQd4UbfW9ot
6ABiQzaG9SUoJ6USJlfkbTrey+b+UxQhb7M0pEADZVspQn5MVcKcV19Q5VBf
RLxKVeD2k9vwo8jHbqjoLFExwSBt6PUWP+0xAdbozlSecLSvYonVg5wHWgal
TcInjrfYGxBbAPg3/YHM8MoWExb/bGV9QHKsV6Kw9pVG3VGLlYhTdNCZWR0V
tnPnp/zOWiOTv+ag4cAwFJzQlwaODfIkdGePyN2o3g1JIYSTA0KRTLqbHX9y
agGY3Acy4TII8UnsfFC7whwQfCtZ+QKb6VN+cHj+skK6Oi7q/TUGonaOFtXE
E8uhCKeBmgQgA4TO8/iD/vmHSA2V0S9a+3Vea9Tq3H9v79fZ08ZcGNpZmtrd
/8j84/n+Sqojpvci2f9SNHfLaD6t3JYsYPbGQmHqzeKoYfUwOJJU8HE5gCkM
PNpaRBX+zazyyefIvaF75DKl8UYE22Z5+nzrymW3tAX+mSd3SsbR1B41UJJM
4bxUwX7KETp6ihIM6wsR7EpLX/xeNyo3QNelB0JsGWcI3Ky4E/qLLv3LV5dM
U9zZ4JvNKhdUgH9O/NdYrkfLWRtP2CarrICK+SGIXlLVWjkR9cydlJTLKNmn
VYn2gKkyp8CFr/W9DXgNr+rCe9Cmdx+M/tD9rutavU+tUifiZLyh1WfJW18k
TFulWy0ZwdHd3B5AEDDHiCTjLzoq8Pn93HPsWQQrYPtTPhwWDNPqgejGTxKp
I7EndqATE1ug1L2nuOQikDCSoSv8hx60IERUEIWKmGEmxmPqKC9v7B0LlB+M
0pAPhB5hLN1C0WUn5WU6vPOXVMspwl87VQ+FKXgA9dreldJyiyiwTkQOWph8
NqNzc6QxEWCSBuw4OuRYIOZkU1abzezNe3HpPj8BsfdYq5f9my/KO9rHxxrp
Am49b1m8qHng75YSSXnG8AHUm0D94/KhwUpHUb0vd4ye7Cjq9DUdrvBe05Gv
7ajUQMtd/o5kTYe79FjsKG4xSmv8/l2GS/pzfLPgWqCfS5aX+J2vcxjyGbwu
k+P0VqokG4R7NfozB5Lx4htkZ1v0dNvI1Ps2yZJDWGPTMfHyaXCRwuxhsL+u
pztMs/ZksMKd1xwG0CnuAoZbrCtoabPRajbaCAy8Ms+osA6/FBuVe1m9fpJz
UE+4bdVAqEccpS/CG9RiIfFI4PjQQeXKS0iVroqS0V4tSUmLryVo36HKbkZp
/BllwXCIgCQAwjosZyOkob+18Dlg3Z/CeEX5+xVrF36WhiL+iW6kehyqjLAg
AhL3BACzFvsfNOLTEJMjAAA=

-->

</rfc>
