<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.14 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amsuess-cbor-packed-by-reference-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title>Packed CBOR: Table set up by reference</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-cbor-packed-by-reference-03"/>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="19"/>
    <workgroup>cbor</workgroup>
    <keyword>cbor</keyword>
    <keyword>packed</keyword>
    <keyword>uri</keyword>
    <keyword>cri</keyword>
    <abstract>
      <?line 38?>

<t>Packed CBOR is a compression mechanism for Concise Binary Object Representation (CBOR)
that can be used without a decompression step.
This document introduces a means for setting up its tables
by means of dereferenceable identifiers,
and introduces a pattern of using it without sending long identifiers.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://chrysn.codeberg.page/packed-by-reference/draft-amsuess-cbor-packed-by-reference.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-amsuess-cbor-packed-by-reference/"/>.
      </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://codeberg.org/chrysn/packed-by-reference"/>.</t>
    </note>
  </front>
  <middle>
    <?line 46?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Packed CBOR <xref target="I-D.ietf-cbor-packed"/> is a compression mechanism for Concise Binary Object Representation (CBOR, <xref target="RFC8949"/>)
that can be used without a decompression step.</t>
      <t>It depends on compression tables,
which can be set up through different means:
they can come from the CBOR item's context,
be populated in the item itself,
or use newly defined CBOR tags.
This document defines such a tag
that uses dereferenceable identifiers to set up a table,
and introduces a pattern of using it without sending long identifiers.</t>
    </section>
    <section anchor="setting-up-the-tables-by-reference">
      <name>Setting up the tables by reference</name>
      <t>CBOR tag TBD213 is defined with semantics similar to
tags TBD113 and TBD1113 from <xref target="I-D.ietf-cbor-packed"/>
in that it sets up tables around a rump.</t>
      <sourcecode type="cddl"><![CDATA[
Packed-By-Reference = #6.<tbd213>([count, source, rump])
rump = any
source = CRI / ~uri
count = (count-shared-and-argument //    ; similar to tag 113
  count-shared, count-argument )         ; similar to tag 1113

count-shared-and-argument = uint
count-shared = uint
count-argument = uint

tbd213 = 213   ; preliminary value, see IANA considerations
]]></sourcecode>
      <t>The items inserted by the tables are not given explicitly,
but picked out of tables known by their identifier given as <tt>source</tt>.
Such a source needs to represent two lists of CBOR items,
one for each kind of tables (one for shared item, one for arguments).
The tag prepends some number of items out of those source lists
to the tables that are used to decompress the rump.</t>
      <t>The identifier is given as a URI string (as defined in <xref target="RFC3986"/>)
or equivalently as a CRI (as defined in <xref target="I-D.ietf-core-href"/>).
Later iterations of this document may introduce additional options.<cref anchor="or-split-to-standins">If the stand-in concept of <xref target="I-D.bormann-cbor-yang-standin"/> is generalized,
the <tt>source</tt> item may become the raw list of tables,
possibly disallowing the <tt>CRI</tt> and <tt>URI</tt> variants.
Given that tags 113 and 1113 are capable of expressing cases where the source tables are present,
tag TBD213 should then be used by using a dereferencing stand-in in the source position.</cref>
When the source identifier is dereferenceable,
all considerations from <xref target="I-D.bormann-t2trg-deref-id"/> apply.
(Simplifying: No dereferencing at runtime -- the recipient either knows it already or treats it as unknown).</t>
      <t>If the same number of items is prepended to both tables,
their count is given as a single number;
otherwise, the numbers are given separately.</t>
      <t>Encoders SHOULD use the most compact form of count,
and SHOULD pick the lowest count(s) sufficient to encode the items contained in the rump.
When those conflict, they may prioritize either.
If the source supports evolution of sources (see <xref target="evolution"/>),
disregarding that recommendation may pose an interoperability hazard.</t>
      <section anchor="count-vs-content-of-source">
        <name>Count vs. content of source</name>
        <t>The count encoded for the number of table entries
given in a document
will often mismatch with the number of entries the receiver of a document knows to be present in the given source.</t>
        <section anchor="not-all-known-entries-are-used">
          <name>Not all known entries are used</name>
          <t>If the encoded count is less than the number of known entries,
this merely expresses that the originator of the document did not use the higher numbers.
When a document's tables are populated from multiple sources,
encoding the smallest possible count is useful
because the table indices used throughout the document stay small and can thus be encoded concisely.</t>
        </section>
        <section anchor="evolution">
          <name>Unknown entries are used – evolution of sources</name>
          <t>If the encoded count is larger than the number of known entries,
this indicates that the document may contain references that the receiver does not know.
This can happen when a source has been evolved compatibly to contain more entries,
compared to when the receiver learned of the source definition.
Source entries beyond the receiver's knowledge stay unpopulated in the receiver's tables,
but still shift existing entries to higher indices.</t>
          <t>Some CBOR protocols come with elements that support isolation of processing errors.
For example,
a CRI that uses unknown extensions is regarded as "unprocessable"
(<xref section="5.2.1" sectionFormat="of" target="I-D.ietf-core-href"/>).
It cannot be resolved,
is unequal to any other CRI (unless they are identical),
but does not inhibit the processing of its surrounding document.</t>
          <t>In such protocols,
references to unpopulated table entries can be tolerated as described in <xref section="2.1" sectionFormat="of" target="I-D.ietf-cbor-packed"/>.
Care has to be taken around processing tag TBD1112:
If that tag is produced in the course of unpacking,
comparisons for identity are not reliable.
Similarly, if the unpacking mechanism provides access to the serialized form of the unprocessable entity,
identity comparisons are only reliable if the items being compared have the same table setup applied.</t>
          <t><cref anchor="prepop-recommended">Protocols may also pre-populated entries with values that are reserved in the protocol
and specified to be ignored at reception.
Later, when the entries are specified, concrete values take their places.
This has roughly the same effect,
but is harder to describe.
(This paragraph may be removed later unless it is found to be particularly useful).</cref></t>
          <t>Protocols that do not support error isolation
need a way to negotiate the understood set of sources and table entries.</t>
          <section anchor="evolution-beyond-adding-items">
            <name>Evolution beyond adding items</name>
            <t>The content of tables may be altered in more ways than just adding entries that were previously unpopulated.
Such changes are NOT RECOMMENDED,
because while they can be done in a compatible way,
providing criteria for this are out of scope of this document.</t>
            <t><cref anchor="split-standins-evolution">If a later version of this document uses stand-in values more actively,
this section will need to be revisited:
In that case, the tables may be part of the outer source,
and then those would grow internally.</cref></t>
          </section>
        </section>
      </section>
      <section anchor="setup-with-skipped-indices">
        <name>Setup with skipped indices</name>
        <t>If a large number of items at the beginning of the source tables would not be used,
there is an additional four-argument form of <tt>count</tt>
that defines a number of items in the source tables that are skipped
before selecting items into the table.
This allows keeping the indices low and therefore compact.</t>
        <sourcecode type="cddl"><![CDATA[
count //= (
    skip-shared, count-shared, skip-argument, count-argument
    )

skip-shared = uint
skip-argument = uint
]]></sourcecode>
        <t>Source tables should be designed in such a way
that commonly used items are at the start
to minimize the necessity for the four-argument form.</t>
      </section>
      <section anchor="example">
        <name>Example</name>
        <t>Suppose the URI "tag:example.com,2023:byref" defines the items
<tt>["price", "category", "author", "title", "fiction", 8.95, "isbn"]</tt> in both tables.
Then the example in figure 3 of <xref target="I-D.ietf-cbor-packed"/> can be written as:</t>
        <sourcecode type="cbor-diag"><![CDATA[
213([7, "tag:example.com,2023:byref"
    [{"store": {
       "book": [
         {simple(1): "reference", simple(2): "Nigel Rees",
          simple(3): "Sayings of the Century", simple(0): simple(5)},
         {simple(1): simple(4), simple(2): "Evelyn Waugh",
          simple(3): "Sword of Honour", simple(0): 12.99},
         {simple(1): simple(4), simple(2): "Herman Melville",
          simple(3): "Moby Dick", simple(6): "0-553-21311-3",
          simple(0): simple(5)},
         {simple(1): simple(4), simple(2): "J. R. R. Tolkien",
          simple(3): "The Lord of the Rings",
          simple(6): "0-395-19395-8", simple(0): 22.99}],
       "bicycle": {"color": "red", simple(0): 19.95}}}]])
]]></sourcecode>
        <t>Assuming that the underlying CBOR protocol defines that unknown keys on goods may be ignored,
an older receiver that only knows the first 5 entries of the source tables
could still process the document,
but would be missing all ISBNs and the price of one item.</t>
      </section>
    </section>
    <section anchor="nested-table-setups">
      <name>Nested table setups</name>
      <t>Documents that use tables from multiple sources
can easily spend many bytes on listing source identifiers.
A pattern that reduces the verbosity
while staying unambiguous
are nested table setups,
where the outer tables are extended to contain additional identifiers.</t>
      <t>In this pattern,
tables are set up in two stages:</t>
      <t>The outer stage contains the CRIs or URIs that may later be used as source values.
(It may also contain other items).
The inner stage is set up using tag TBD213,
and the source given is a packed reference.</t>
      <t>All table inputs can be evolved orthogonally as described in <xref target="evolution"/>.
If an unspecified entry is used as a source,
the whole source content is considered unspecified.</t>
      <section anchor="example-of-nested-table-setup">
        <name>Example of nested table setup</name>
        <t>In this example,
the initial table set up is provided by the media type,
and contains these items:</t>
        <ul spacing="normal">
          <li>
            <t>0: "This class has students with the following names"</t>
          </li>
          <li>
            <t>100: "tag:example.com,2023:english-names.txt"</t>
          </li>
          <li>
            <t>101: "tag:example.com,2023:german-names.txt"</t>
          </li>
        </ul>
        <sourcecode type="cbor-diag"><![CDATA[
213([5, 6(42) / outer item 100 /,
     213([2, 6(45) / outer item 101, currently item 105 /,
     [simple(11) / outer item 0, currently item 11,
      "This class has students with the following names" /,
  simple(0) / item 0 of german-names, "Franz" /,
  simple(2) / item 0 of english-names, currently item 2, "George" /,
  simple(1) / item 1 of german-names, "Fritz" /,
  simple(7) / item 5 of english-names, currently item 7, "Jack" /
  ]])])
]]></sourcecode>
        <t>Note that a constrained implementation of a decoder
may not even have the fully expanded form of the URIs or CRIs available;
it may only be capable of using these table entries in the source position
and then find the shipped source lists.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>General security considerations from <xref target="I-D.ietf-cbor-packed"/> and <xref target="I-D.bormann-t2trg-deref-id"/> apply.
In particular, any security implications of different applications disagreeing about what tables are implied by a media type
apply likewise to situations when different applications disagree about the tables from a specified source.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="cbor-tags-registry">
        <name>CBOR Tags Registry</name>
        <t>In the registry "CBOR Tags", IANA is requested to allocate one tag:</t>
        <ul spacing="normal">
          <li>
            <t>Tag: 213</t>
          </li>
          <li>
            <t>Data item: Array <tt>[count(s), source, rump]</tt></t>
          </li>
          <li>
            <t>Semantics: "Packed CBOR: table setup"</t>
          </li>
          <li>
            <t>Reference: This document</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-cbor-packed">
          <front>
            <title>Packed CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Mikolai Gütschow" initials="M." surname="Gütschow">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <date day="1" month="September" year="2024"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949 == STD 94)
   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 does not provide any forms of data compression.  CBOR data
   items, in particular when generated from legacy data models, often
   allow considerable gains in compactness when applying data
   compression.  While traditional data compression techniques such as
   DEFLATE (RFC 1951) can work well for CBOR encoded data items, their
   disadvantage is that the recipient needs to decompress the compressed
   form to make use of the data.

   This specification describes Packed CBOR, a simple transformation of
   a CBOR data item into another CBOR data item that is almost as easy
   to consume as the original CBOR data item.  A separate decompression
   step is therefore often not required at the recipient.


   // The present version (-13) is a refresh of the implementation draft
   // -12 with minor editorial improvements.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-13"/>
        </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="1" month="September" year="2024"/>
            <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-04"/>
        </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="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="24" month="July" year="2024"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) instead of in a
   sequence of characters.  This simplifies parsing, comparison, and
   reference resolution in environments with severe limitations on
   processing power, code size, and memory size.

   This RFC updates RFC 7595 to add a note on how the URI Schemes
   registry RFC 7595 describes cooperates with the CRI Scheme Numbers
   registry created by the present RFC.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision –16 of this draft continues -15 by picking up
   // more comments; it was made specifically for IETF 120.  This
   // revision still contains open issues and is intended to serve as a
   // snapshot.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-16"/>
        </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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.bormann-cbor-yang-standin">
          <front>
            <title>Stand-in Tags for YANG-CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Maria Matějka" initials="M." surname="Matějka">
              <organization>CZ.NIC</organization>
            </author>
            <date day="21" month="February" year="2024"/>
            <abstract>
              <t>   YANG (RFC 7950) is a data modeling language used to model
   configuration data, state data, parameters and results of Remote
   Procedure Call (RPC) operations or actions, and notifications.

   YANG-CBOR (RFC 9254) defines encoding rules for YANG in the Concise
   Binary Object Representation (CBOR) (RFC 8949).  While the overall
   structure of YANG-CBOR is encoded in an efficient, binary format,
   YANG itself has its roots in XML and therefore traditionally encodes
   some information such as date/times and IP addresses/prefixes in a
   verbose text form.

   This document defines how to use existing CBOR tags for this kind of
   information in YANG-CBOR as a "stand-in" for the text-based
   information that would be found in the original form of YANG-CBOR.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-yang-standin-00"/>
        </reference>
      </references>
    </references>
    <?line 295?>

<section anchor="change-log">
      <name>Change log</name>
      <t>From -02 to -03:</t>
      <ul spacing="normal">
        <li>
          <t>Switched from CPA114 to CPA213 to stay out of Carsten's dangerous ASCII region.</t>
        </li>
        <li>
          <t>Add security considerations.</t>
        </li>
        <li>
          <t>Provide an actual introduction.</t>
        </li>
        <li>
          <t>Minor simplifications.</t>
        </li>
      </ul>
      <t>From -01 to -02:</t>
      <ul spacing="normal">
        <li>
          <t>Add text on use of unpopulated items, and rationale to count in general.</t>
        </li>
        <li>
          <t>Split 4-argument form into its own subsection</t>
        </li>
        <li>
          <t>Fix erroneous example</t>
        </li>
        <li>
          <t>Augment CDDL with comments and <xref target="I-D.ietf-cbor-update-8610-grammar"/></t>
        </li>
        <li>
          <t>Add considerations for splitting between loading and importing through stand-ins</t>
        </li>
        <li>
          <t>Write IANA considerations</t>
        </li>
        <li>
          <t>Editorial changes</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>[ TBD ]</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61a23IbR5J976+ohR5MOgCQIEWNCa93hyIlmxOW5CCl8ING
GyqgC0ANG12YrmpCMIOO/Yf9nX3bP9kv2ZOZVd0NErTHsTMxYYHddcvbyZNZ
PRgMstuxOs6yYENhxqr3k57emFydv3x3NVbv9aQwypug6pWabFRlZqYy5dT0
stxNS73EjLzSszDQS18b7wfTiasGK15jMNkMmgmDw+NsqoOZu2ozVj7kWWZX
1ViFqvbh6PDw9PAoW7vqZl65ejVWtEx2YzZ4lI8zpQbyhH7I4vyzrqy8w7/Z
rSlrQ2PjEiQB/lpqW8h6f7YmzIaumuNpZVZurBYhrPz44GDqcjMx1ZxeHkwX
1caXBztkwLwCIvjQmcmDh80CKz03u6Ye/GNaGi7CssgyXYeFqyDLAFsqJXo+
X1TWB6tLdbb0//Pf3vO7qavLQCo9gx4rq/mhiUKnGX+O++KcyywrXbXUwd6y
si4HF0PSS/dI6fmEBpblIByFaj7IccTZwPLbq9fnx6ffvNhewFVmsMCYx8vW
qxx6G3zzYnQ4mFd6udQQLrPlrD1Jlg0GA6UnEEJPQ5Z13FBZrzQEXa4qyGBd
qZZmutCl9UuFFdS5K6fWG/XSlrraqHeTv5lpUFeGhpsyYANM2aOV9rOw0EFN
ocOJUbXHBmsLVdcBG+Smu4UPZjXM3i+wNzy9XmIhZaFpl9dTQ+dZGl163h/h
EWw5pxCxwatAMeMzRIsMcTPFqhMLc0DZHMvZmTWV72e6zLdXXukQTFXSxNrT
wjY0x4RAOT0qHD1vlxmK/pY2zwuTZc/UZVyRhN/W5t3dv+wy+v39P0/PfdoE
PvLN6fPT+/s/rPXsMuD5CqJCe+XWiUS5/Wy9sNNFWjLiU1gg8OcLldsZKzuI
AcbY3mx4LFYyala5Jcaa6FvBLL/yeFMG8yX0Myy3cqua4pzMwgNpDJnWFLN+
BkVABFWadbHBKWe2TIoNeu4fuowM8MrXOK6mIaIMLOF/yy1UcEksLUL/8xzl
mbpuPZbkE6Vu4XuWJZHU+5cXR6Njco4kLe2BDYANwU4hm13aQlc4ckYqoAkj
TKDj8k/8Zp3f3e32u4zVDKVYOjYiiI4lR9KwKJbRqqqX5Bi//vrrFB4e/Xnw
cjO4SidW36lnL4b/GiY5Tvtvex8ZGPvKu7qamj4v8Gk/o38wUpebTN7gj/Or
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
os6ay8vY+pM7TTow1Dahtu0mE0pFdT1fVpZ6OQGKgaVlXCU9FoHuhVOjWRhE
p+vEZXRs8KaGRSddb9+RMldhXs2nRJJvF4r3spSi146OB244Fl4aaQs9SnuI
UKifPV0efKB/WWTyHSFhqbmtfVKV8K1htncZ2oonnVkKcs4e8ZYKfKXZlekY
n6/uVqoAAmkfdzwtNjrlJplv69rvUBAp8KTUTFvVoSmyUwcIhcDCzR3zrh31
dqfZy81iTK7LttAi39/EFl4eu+mR7NEJ1wvX+FlD9q1v7oIwp7PaVkYmV3/s
Gq1Fm3aLMCCYXxftSDasT9V0c+W5NEh/KmxW8Rq+a1sfUzlc4Gt1yKBHJy20
l+LOhzrnoGoaxjOXrl3oyx7fw7zRIc3cmVVNOUckLQY8dhi+BBk/emr8nDNH
d/iOHA768GLv+dG+Oog+yzdIOIU6iBjLw4542MmjYSPQurqq5H4xPjtppn5M
GWT0YOLh42mjBOl/XG2yX4P22Eo2IQ/oKgF05XWly1+2JxxtT9jS8qNjQg+9
741D2bC9yKhZZLRzVxse7PqnZsLJ7+9KROsviEwsgRWQw1IWe+u4uqZqgEMi
VPFKh/ZYNt/iyM2D4XumjHCEyhZDQd+0aVDvS+9fl/mDHtGHCFkMXfpW24KC
5NvMCiZxUptsXftFxOGQ2G7Q7b6Vy5qabmYTNC2kYOvepMdPVqAcIubn298q
ZN/LxSgVoTJg933xU9880RHi29+7TgaCtO2SPjdHm035onnaXpe33yBx3yu9
oSvXeWW4Z6YnVOavpXPYJBdeSIBHd2An4zNAHzeGbhj58yAb6rgs96N+Z8u4
X6fsZs3oTveruXqi78fou5CHuqbLNuJI7+kC+AqFMjxvE6GVyn15oHrNILAx
Xoj71n+vIyw7Lkap2mFSQihG2IkJY4Id/LzQQXMMjNVZVcHbPn9MF5wPPun5
jNHX6VOkh5+vdhIAgWbzrdBYbX2lJd/OTTCTJD/nbg+K4nmWvSYVDQ6P6MyD
w2M+5jUAabpIl1fnP52NRs/pPX7RtXVwchMRezjnGmTPlF9hN1q2AntRZ9fn
l5esLuorfq3O8vwp96XXP0ky4vbCNFBr3nY+7qMRb2xJX7TI1w7J8sPm+CM5
/hEfnzajT92IodVNX7q9NOFPaDgs5Ai6MMKYarmpjB8i0LbX1GdSzx80Obj7
QH1+4su+nsTuEMa/tl+4d1ga0kJMXHSkes7Tzy8ufhS4lwZw8DE8f/dr0vv7
KNnD4Ce10CmZiE5MWNMlVuE0N9/4g7oltTQFt+TzwdT18ljyZ2rP7fxG6mv1
CtTRUXc99QfJec6m6UKKz5/djaWzY/LvejPQONO7z7K/fiRKpv76Kfs/7vv+
5n8tAAA=

-->

</rfc>
