<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.14 (Ruby 3.1.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-dkg-openpgp-1pa3pc-02" category="info" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="OpenPGP 1PA3PC">First-Party Approved Third-Party Certifications in OpenPGP</title>

    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization>ACLU</organization>
      <address>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>

    <date year="2024" month="September" day="06"/>

    <area>Security</area>
    <workgroup>openpgp</workgroup>
    <keyword>OpenPGP, certification</keyword>

    <abstract>


<?line 24?>

<t>An OpenPGP certificate can grow in size without bound when third-party certifications are included.
This document describes a way for the owner of the certificate to explicitly approve of specific third-party certifications, so that relying parties can safely prune the certificate of any unapproved certifications.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://dkg.gitlab.io/openpgp-1pa3pc/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-dkg-openpgp-1pa3pc/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        OpenPGP Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://gitlab.com/dkg/openpgp-1pa3pc"/>.</t>
    </note>


  </front>

  <middle>


<?line 29?>

<section anchor="introduction"><name>Introduction</name>

<t>In some cases, it is useful to have a third-party certification over an identity in an OpenPGP certificate.
However, if an OpenPGP certificate simply merges in all third-party certifications, the certificate can grow in size to the point where it is impossible to use or transfer.
See, for example, the discussion about "certificate flooding" in <xref section="2.1" sectionFormat="of" target="I-D.dkg-openpgp-abuse-resistant-keystore"/>.</t>

<t>If the owner of an OpenPGP certificate (the "keyholder") wants their own certificate to be usable by others, they can explicitly indicate which third-party certifications they approve of, and implicitly decline the rest.</t>

<section anchor="terminology"><name>Terminology</name>

<t>The term "OpenPGP Certificate" is used in this document interchangeably with "OpenPGP Transferable Public Key", as defined in <xref section="10.1" sectionFormat="of" target="RFC9580"/>.</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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
</section>
<section anchor="wire-format"><name>Wire Format</name>

<t>This specification defines a new signature type, a new signature subpacket type, and extends the structure of an OpenPGP certificate.</t>

<section anchor="certification-approval-key-signature"><name>Certification Approval Key Signature</name>

<t>This document defines a new key signature type used only in OpenPGP certificates known as a Certification Approval Key Signature.
The Signature type ID is 0x16.</t>

<t>This signature is issued by the primary key over itself and its User ID (or User Attribute).
It <bcp14>MUST</bcp14> contain exactly three subpackets in its hashed subpackets:</t>

<t><list style="symbols">
  <t>a "Signature Creation Time" subpacket (<xref section="5.2.3.11" sectionFormat="of" target="RFC9580"/>)</t>
  <t>an Issuer Fingerprint subpacket (see <xref section="5.2.3.35" sectionFormat="of" target="RFC9580"/>)</t>
  <t>an "Approved Certifications" subpacket (see <xref target="approved-certifications-subpacket"/>)</t>
</list></t>

<t>This type of key signature does not replace or override any standard certification (0x10-0x13).</t>

<t>Only the most recent self-signed Certification Approval Key Signature is valid for any given &lt;key,userid&gt; pair.
If more than one valid, self-signed Certification Approval Key Signature is present with the same Signature Creation Time, the set of approvals should be treated as the union of all "Approved Certifications" subpackets from all such signatures with the same timestamp.</t>

<section anchor="calculating-signature"><name>Computing a Certification Approval Key Signature</name>

<t>An Approval Key Signature is computed over a hash of data in the same way as a Certification Signature.
That is, the following items are concatenated into the hash function before signing:</t>

<t><list style="symbols">
  <t>The salt (or nothing at all, if the signature version is less than 6)</t>
  <t>The serialized Primary Key</t>
  <t>The serialized User ID</t>
  <t>The trailer, which includes the signature data including the hashed subpackets</t>
</list></t>

</section>
</section>
<section anchor="approved-certifications-subpacket"><name>Approved Certifications Subpacket</name>

<t>This document defines a new signature subpacket named Approved Certifications.
Its contents are N octets of certification digests (see more below).</t>

<t>This subpacket <bcp14>MUST</bcp14> only appear as a hashed subpacket of an self-signed Certification Approval Key Signature (see <xref target="certification-approval-key-signature"/>).
It has no meaning in any other signature type.
It is used by the primary key to approve of a set of third-party certifications over the associated User ID or User Attribute.
This enables the holder of an OpenPGP primary key to mark specific third-party certifications as re-distributable with the rest of the Transferable Public Key (see the "No-modify" flag in <xref section="5.2.3.25" sectionFormat="of" target="RFC9580"/>).
Implementations <bcp14>MUST</bcp14> include exactly one Approved Certifications subpacket in any generated Certification Approval Key Signature.</t>

<t>The contents of the subpacket consists of a series of digests using the same hash algorithm used by the signature itself.
Each digest is made over one third-party signature (any Certification, i.e., signature types 0x10-0x13) that covers the same Primary Key and User ID (or User Attribute).
For example, an Certification Approval Key Signature made by key X over User ID U using hash algorithm SHA256 might contain an Approved Certifications subpacket of 192 octets (6*32 octets) covering six third-party certification Signatures over &lt;X,U&gt;.
They <bcp14>SHOULD</bcp14> be ordered by binary hash value from low to high (e.g., a hash with hexadecimal value 037a… precedes a hash with value 0392…, etc).
The length of this subpacket <bcp14>MUST</bcp14> be an integer multiple of the length of the hash algorithm used for the enclosing Certification Approval Key Signature.</t>

<t>The listed digests <bcp14>MUST</bcp14> be calculated over the third-party certification's Signature packet in a process similar to the digest used for a "Third-Party Confirmation signature" (described in <xref section="5.2.4" sectionFormat="of" target="RFC9580"/>), but without a trailer.
The data hashed starts with the salt (v6 certifications only), followed by the octet 0x88, followed by the four-octet length of the Signature, and then the body of the Signature packet.
(Note that this is a Legacy Format packet header for a Signature packet with the length-of-length field set to zero.)  The unhashed subpacket data of the Signature packet being hashed is not included in the hash, and the unhashed subpacket data length value is set to zero.</t>

<t>If an implementation encounters more than one such subpacket in an Certification Approval Key Signature, it <bcp14>MUST</bcp14> treat it as a single Approved Certifications subpacket containing the union of all hashes.</t>

<t>The Approved Certifications subpacket in the most recent self-signed Certification Approval Key Signature over a given User ID supersedes all Approved Certifications subpackets from any previous Certification Approval Key Signature.
However, note that if more than one Certification Approval Key Signature packets have the same (most recent) Signature Creation Time subpacket, implementations <bcp14>MUST</bcp14> consider the union of the Approved Certifications of all Certification Approval Key Signatures.
This allows the keyholder to approve of more third-party certifications than could fit in a single Certification Approval Key Signature.</t>

<t>Note that Certification Revocation Signatures are not relevant for Certification Approval Key Signatures.
To rescind all approvals, the primary key holder needs only to publish a more recent Certification Approval Key Signature with an empty Approved Certifications subpacket.</t>

</section>
<section anchor="placement-in-certificate"><name>Placement in OpenPGP Certificate</name>

<t>The Certification Approval Key Signature appears in an OpenPGP certificate after a User ID or User Attribute packet, mixed in with the certifications that cover that User ID or User Attribute packet.</t>

<t>FIXME: test that these do not break existing implementations by causing them to reject a certificate that they otherwise would have accepted.
If they do, then we might consider placing this signature in an unhashed Embedded Signature subpacket in the User ID's self-sig.</t>

</section>
</section>
<section anchor="semantics"><name>Semantics</name>

<t>The inclusion of a digest in an Approved Certifications subpacket in a valid, most-recent self-signed Certification Approval Key Signature which matches a specific third-party certification is an indication that the keyholder approves of the third-party certification.</t>

<t>There is no need to approve of self-signed certifications.
Since they are already made by the primary key, self-signed certifications are implicitly approved.</t>

<t>A verifier might observe an approved digest that does not correspond to any Certification that the verifier is aware of.
This is normal, because not everyone is guaranteed to have the exact same set of third-party certifications for any given OpenPGP certificate.
In such cases, the verifier should ignore the non-matching digest, but <bcp14>MUST NOT</bcp14> ignore other digests in the list of Approved Certifications.</t>

</section>
<section anchor="reasonable-workflows"><name>Reasonable Workflows</name>

<t>This section describes some possible steps for generating and using Approved Certifications.</t>

<section anchor="third-party-certification-and-approval-workflow"><name>Third-party Certification and Approval Workflow</name>

<t>Alice has a new OpenPGP certificate with primary key <spanx style="verb">K</spanx>, and wants to publish Bob's certification over her User ID in that certificate.</t>

<t>Alice sends Bob her certificate, asking for his certification.
Bob performs his normal verification that the User ID and <spanx style="verb">K</spanx> do indeed belong to Alice, and then creates a certification over her User ID, adding it to the certificate.</t>

<t>Bob then sends the augmented certificate back to Alice.
Alice reviews the added certification, and decides that she likes it.</t>

<t>She chooses a strong hash algorithm <spanx style="verb">H</spanx> and uses it to compute the digest of Bob's certification.
She places that digest into an Approved Certifications subpacket <spanx style="verb">S</spanx>.
She also creates a Signature Creation Time subpacket <spanx style="verb">C</spanx> containing the current timestamp, and an Issuer Fingerprint subpacket <spanx style="verb">F</spanx> containing the fingerprint of <spanx style="verb">K</spanx>.</t>

<t>Alice places subpackets <spanx style="verb">F</spanx>, <spanx style="verb">C</spanx>, and <spanx style="verb">S</spanx> into an Certification Approval Key Signature packet, and signs it with <spanx style="verb">K</spanx> using hash algorithm <spanx style="verb">H</spanx>.</t>

</section>
<section anchor="keyholder-update-workflow"><name>Keyholder Update Workflow</name>

<t>If a keyholder Alice has already approved of third-party certifications from Bob and Carol and she wants to additionally approve a certification from David, she should issue a new Certification Approval Key Signature (with a more recent Signature Creation timestamp) that contains an Approved Certifications subpacket covering all three third-party certifications.</t>

<t>If she later decides that she does not want Carol's certification to be redistributed with her certificate, Alice can issue a new Certification Approval Key Signature (again, with a more recent Signature Creation timestamp) that contains an Approved Certifications subpacket covering only the certifications from Bob and David.</t>

</section>
<section anchor="distributor-workflow"><name>Distributor Workflow</name>

<t>If an abuse-resistant keystore (e.g., an OpenPGP keyserver) receives an OpenPGP certificate for redistribution, it <bcp14>SHOULD</bcp14> strip away all unapproved third-party certifications before redistributing the certificate.</t>

<t>If such a keystore receives an updated copy of the certificate which includes a newer Certification Approval Key Signature, it should merge the certificate update with its existing copy of the certificate, and re-apply the new list of approved digests by stripping away all certifications which do not match the new list.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This document is intended to make an OpenPGP certificate more manageable by the keyholder.</t>

<t>A flooded certificate is difficult or impossible to redistribute, which means that peers of the keyholder cannot easily fetch the certificate, resulting in inability to encrypt messages to or verify signatures from that certificate.
An unredistributable certificate can also make it difficult or impossible to transmit revocation, expiration, key rotation, or preference changes associated with the certificate, which interferes with certificate maintenance necessary to securely use OpenPGP.</t>

<t>The mechanisms described in this document defend against certificate flooding attacks by enabling certificate redistributors (e.g., keyserver networks or other "keystores") to limit the contents of a certificate to only those elements which the keyholder explicitly approves of and wants included in the certificate.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>IANA is asked to register multiple objects in the OpenPGP protocol group.</t>

<section anchor="signature-types-add-certification-approval-key-signature"><name>Signature Types: Add Certification Approval Key Signature</name>

<t>The Signature Types registry should add a row with signature type 0x16, Name "Certification Approval Key Signature", and Reference pointing to <xref target="certification-approval-key-signature"/> in this document.</t>

</section>
<section anchor="signature-subpacket-type-approved-certifications"><name>Signature Subpacket Type: Approved Certifications</name>

<t>The Signature Subpacket Types registry row with Type 37 should be update with Description "Approved Certifications", and Reference pointing to <xref target="approved-certifications-subpacket"/> in this document.</t>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC9580">
  <front>
    <title>OpenPGP</title>
    <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
    <author fullname="D. Huigens" initials="D." surname="Huigens"/>
    <author fullname="J. Winter" initials="J." surname="Winter"/>
    <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
    <date month="July" year="2024"/>
    <abstract>
      <t>This document specifies the message formats used in OpenPGP. OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.</t>
      <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
      <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9580"/>
  <seriesInfo name="DOI" value="10.17487/RFC9580"/>
</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"/>
    <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"/>
    <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 title='Informative References' anchor="sec-informative-references">




<reference anchor="I-D.dkg-openpgp-abuse-resistant-keystore">
   <front>
      <title>Abuse-Resistant OpenPGP Keystores</title>
      <author fullname="Daniel Kahn Gillmor" initials="D. K." surname="Gillmor">
         <organization>American Civil Liberties Union</organization>
      </author>
      <date day="18" month="August" year="2023"/>
      <abstract>
	 <t>   OpenPGP transferable public keys are composite certificates, made up
   of primary keys, revocation signatures, direct key signatures, user
   IDs, identity certifications (&quot;signature packets&quot;), subkeys, and so
   on.  They are often assembled by merging multiple certificates that
   all share the same primary key, and are distributed in public
   keystores.

   Unfortunately, since many keystores permit any third-party to add a
   certification with any content to any OpenPGP certificate, the
   assembled/merged form of a certificate can become unwieldy or
   undistributable.  Furthermore, keystores that are searched by user ID
   or fingerprint can be made unusable for specific searches by public
   submission of bogus certificates.  And finally, keystores open to
   public submission can also face simple resource exhaustion from
   flooding with bogus submissions, or legal or other risks from uploads
   of toxic data.

   This draft documents techniques that an archive of OpenPGP
   certificates can use to mitigate the impact of these various attacks,
   and the implications of these concerns and mitigations for the rest
   of the OpenPGP ecosystem.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-dkg-openpgp-abuse-resistant-keystore-06"/>
   
</reference>




    </references>


<?line 195?>

<section anchor="augmenting-sop-for-1pa3pc"><name>Augmenting SOP For 1PA3PC</name>

<t>FIXME: Can all of the plausible workflows described in this document be done with the Stateless OpenPGP Interface?
Definitely not right now.
What is missing?</t>

</section>
<section anchor="test-vectors"><name>Test Vectors</name>

<t>FIXME: This document should include a certificate with third-party certifications, some of which are approved, and others of which are not approved.
It should also show the same certificate, but pruned to remove all non-approved third-party certifications.</t>

</section>
<section anchor="existing-implementations"><name>Existing Implementations</name>

<t>RFC Editor Note: Please delete this section before publication.</t>

<t>FIXME: enumerate existing implementations.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>Demi Marie Obenour,
Heiko Stamer,
Jan Zerebecki,
Justus Winter,
Neal Walfield,
Orie Steele,
Vincent Breitmoser,
and others all contributed to specifying and defining this mechanism.</t>

</section>
<section anchor="substantive-changes-to-this-document"><name>Substantive changes to this document</name>

<t>RFC Editor Note: Please delete this section before publication.</t>

<section anchor="substantive-changes-from-draft-dkg-openpgp-1pa3pc-01-to-draft-dkg-openpgp-1pa3pc-02"><name>Substantive Changes from draft-dkg-openpgp-1pa3pc-01 to draft-dkg-openpgp-1pa3pc-02</name>

<t><list style="symbols">
  <t>Replace I-D.ietf-openpgp-crypto-refresh with RFC9580, confirming relevant sections</t>
  <t>Clarify digest calculations</t>
</list></t>

</section>
<section anchor="substantive-changes-from-draft-dkg-openpgp-1pa3pc-00-to-draft-dkg-openpgp-1pa3pc-01"><name>Substantive Changes from draft-dkg-openpgp-1pa3pc-00 to draft-dkg-openpgp-1pa3pc-01</name>

<t><list style="symbols">
  <t>Change terminology from "attest" to "approve"</t>
</list></t>

</section>
<section anchor="substantive-changes-from-mr-60-to-draft-dkg-openpgp-1pa3pc-00"><name>Substantive Changes from MR !60 to draft-dkg-openpgp-1pa3pc-00</name>

<t><list style="symbols">
  <t>https://gitlab.com/openpgp-wg/rfc4880bis/-/merge_requests/60 describes the earlier draft of this proposal.</t>
  <t>This draft transcribes most of that MR, updating references and including explicit IANA considerations.</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA71b3XIbOXa+76fA0hcrbZGUZXs8HtXUzGoke6z4T7Hkndlk
UzHYDZJYNRudBlo0Z8pVeZRc5UHyKHmSfOcADXY3f8yZpHJji000cHB+vvOd
A3A0GiWZSQu5UGciq+TUjbK72ciUqihn5ei0lI/LdPTwUZJKdyZ0MTWJrScL
ba02hVuVeOvq+e2L5P5MPE5yWczOhCoSp12Ob17oyrrRtazcSpyXZWXuVSZu
57rKwsMLVTk91Zgbs1lML95h4esfrxM5mVQKk4bP4vT6/PH1RSIrJc/EjUrr
SrtVssRyQdTkbhlHD0Xanji5V0WtzhIhZpWpyzMxCOMGeOT3MPjJVHe6mIkf
aQQ9X0id43mY/c9auenYVDP6SlbpHF/NnSvt2ckJjaRH+l6Nm2En9OBkUpml
VSdhjhN6t1Klab07g6LkZJyaxQnUftJVO43PpVPWtd7AsHF4S5veC1hB1m5u
qrNkBGXaM3E5Fq/G4ked5wtTYTpv50tZaJWLV3JetL6D2Gfi/OL1B/yt/Pax
2J+neurmmNPiWTEulEtGo5GQE+sqmbokOY9Ga2ldiVQWpO4lGdXqX5RYakhW
OzExdZGJ5VwVwrErlOwKadcVYGi8meZ1prJxAp+xAm5aL1ThRKZsWumJwiix
lCsxNRWmUsIsC1UJM+UPbVmcEepTmesUelsJ6T2RBtpSpTRojyRDYQ2+lg6m
y1fkIjRKY3HaoZVTPBVlVRdqY1ksIIuVqAvZ+H536nHCqlzoLMtVkjwQV4Wr
TFan7LTJFaY3C9KkVRBDOwEl1FZN65x2NJfYg9wtucCKFQQQOoPSEC1kCbnV
WOPkpVkqDMcq0x1jYMRFia0uVDVTHKoyz/fqra+ODY9whseURsOocAgyOW8S
KxkAzCTnMdiyIAtXsrBTVY2TG6WGbHT1SUIm5ZfKtE1rhiU4JznaoL34NDcm
g/UGtPqvvwJBWEePxqdkpu+vRpfjNu7JCVYdVcpq62ThRndqZZ2p1OfPMNrV
tOtuOxR2RIMGeHNu8kxVg2M4a+EsvasrervvoxOFvUra9WQlDIZVXosrVl3L
g3WR+ZeWc53O94URv712+CFkzUi9zUyZSnMdXBe7ddjdgwfiVlULXZjczFYJ
Yg9f40FEzRZqq0HwyYzU6jpRCqMqgCBSgsKeVhz/6zlugzV5u9f1BAKJV2o1
gISYQ00hVNY11elDb6s/vH9x8c1Xzx6yKUg4aFgsTZVZMXjz4eYWU/D/4u07
/vv983/8cPX++SX9ffPy/PXr+EcSRty8fPfh9eX6r/WbF+/evHn+9tK/jKei
8ygZvDn/68DrdPDu+vbq3dvz14NNTRCWefOyTspKOWxO2qQBMt7pDxfX//Uf
p0+wY9rho9PTbz5/Dh+enX79BB8IM/1qpiCF8keycAILK1k1QZnKUjuZW9al
nZOnUXBBXX/6Z9LMv5yJbydpefrku/CANtx52Ois85B1tvlk42WvxC2PtiwT
tdl53tN0V97zv3Y+N3pvPfz2e/bp0emz779LCFd/0rDAC1MtpEt8LmmA3yOl
9zdKJ4VaAptmhXQ1GQ3cYLjxFPynlOmdcs33MIj65FSRcbwJJEZAOI3ciQ0+
zDrsJxAkmVMYiJu42q8POiE9kmEYQdIoCvU52ciR7S1RiHS35YOW/UhvFdGK
u4I8R9Ich0g65mC86a5ydUkA8fDT6dNxo/k4gIDe2hpiAO44EVR6IasVS8vJ
Szur8qnHLADnB4tnmPEI0M9/nzuH8KmdOh4nV06wK6egpVITXIKd5DRxpVo2
48xFk82lnWPp9RdnyMbY6mC9gwuQTd7wrV4A6dZ2P1qj0lfjR+PH49MeMh3T
VIW4ou1VoMHAQIQ9pbnWJBZy9Sd6/BVN1J9nEMlzlzAPNqdrqMaomwhGcSBN
6i3BBsJqXefIDExfGKI7ZS5TTr1kjAo0gukMJcRMVj0yI45g5Icj/PMYxkje
Fbm36cJYmiolnyRjssv2N7LL9yEkHuqMkz2tPQPHLsTfvoXIQzgwZPoOdEyD
EyAng8VSIoO+DKKfXxz+rjUB0Jbk5YzFEQ3WLHb4hScfFhagaA9zMuzWeUaY
72g04z2PrAvmZlNG6gMMa8W0MgsebWsk+2gp25PPQRjYZlEyuABdzKKsHRHW
w+KXkEbmaY2KAy91oOV8n7ZSXofAhPkmBxbtL5NO+lwYBCSqvgVNOgAiif95
lU5Nnpslya+dWviKAMFN2FSwQhFOnkDyitO68IE0UVNyBJIfL3NU37IIuWPk
gG/PWSuOlMqMl0WMe8I2mEVib7my1rvU0+NmHngdXOsXCHAd8Aoq2fwygFX4
AuRV58SvPWMLlY3trRxURt+RhM3eOjDFmWOH24ibCAe/PvgyEuzPGdsSHpWP
2a7VCYMt468imkv2eitM6siH4Q9duMg0qgh8wbDFkTtRMPdxTBNxTUZ1TlSB
5bAP9fUScu1vDvcAmwfl2M8+zWBpOBEKIVmwdxYMTczXe0mWhzcEeUuSg/+2
ilHZoMgePs8xRtNIa02qOQ6atLiRFUPdjHAByfa+5kuRHjHpiYS/7w6pjMkQ
lRqh7vLrMZWPmETVRFOL7yD7XvlcJb01owXqs+lqgEpNzrrM36fGR73UCOVS
8UeeG+RhTwmhFfM/5YJd4bL2nmDEmUJJx0o9jPEw5YkeH3a7nhXfUAFpG+tW
1DYgaAzOX9smzBkgGcdkPjMVlLjoeE2LNTEnGifPJXDET0QutpDYM3uH4XJu
bbT1q0e0xc7GgH5jNR723JYJW8jlvvWR0sx2LWkL+Zid7WVmL9qVOtzuoLjk
/Uy8T/7sN9Ys8iHoracuFCOPvnoqFno2d5EFyuIA48Mip988aqDq6OmfHjcf
jv3OaTWrP+3ptdysszLL+rdvfx5++I4pMXblq58JcSlEn7fqRBekQd4Etl8r
n+eBgdzcwS7EkRrPxsMmpXJkzaFI1OzQfh7eevj4a/nf//6fRFpSlSnbGd4M
+eYRhgyFcumxp+m5KmZuHsBmA20nivtGcGvwVrGoc6dhvMa/2+9ud9qmIacQ
i4Zt9RvCKUfEYI4mRhqBGm7SEA2af6c9/mhbrtQKcWjJpJTTrV5Q07ZpQYU4
isKjDOi0qU0x1VQ9kvAxVgbiqFPAdwHrSRethgLREHugsiEE3hqc95uM5rBk
h9sRb7l/upEJkBGPh4ElrYGC/Rbx++zZ5ndTU1cjP6Brw6grX8w635tF/Jls
tTEm6HOcHL01Tnl8YCfS5Huv1Uymq1BsN6qfK0lZx2t2wzBxq16okZmOgnhT
rcChKSvCTr+oyoyPBdOputjI/6zDHbLCfxrAIFP5+qbpLjcclb6N+9+5QpDM
BxZFTks47gxS4HTyEkWBqanxY3sliufz3Rx0UKRwM5gDg4sL+sSkiEItPyTd
BXhssk+nJuF92xCMB2XO/3WdFyoHX901MG/rEirzkAaxvihJUygV1I5X99rU
9kDYic3vIjq07peTB+2jEYRb8zFZHrV0c7yrjFzvY9jzHxv7GlZnAfiiwdwe
GwV7HiK5DVRREmD4PB/71j2WGtSyp+MMjaVc/E51QN3glwcmgTWsdF94r+7N
ZrqlMsO3K3J1L+F9hDKH7tkQTU01Yp40Fav34QZTD6oolMo89JJWSmKylP28
UoL3H+QpjHnU1F+U7bPRXb7t+4XX1I8JvXWxpRmPoq9shox00Sr8fH/wQC/2
ZZbdfVwk5NRxwO6sPETjygv9ySNsBPlNdwn00v/5pSmhiRdXP795fiboXLTJ
PspS44r9YIKougPfBIvg6qwXSxM6TIm8e0FmrNTfkbexnc5xTJg4FHZLjRWW
7NX+3C1NVenoaNIfBq2w/NAnzqVac1AfsWQUv2C3/8n6jYnm+QI8gvLRzZbC
O6Bs0M4fbcRY8gxxQ0ezTqfWW5kzm20gPRYJB7JhjtjQPSPkGv1eVPetDtCA
dM609MslJVOIojneogeNGVpwFLAolls7Z/MpzDepUK9T7PawrL2l/tHsDbSo
wvkZBUUOvwIbauqSHkAM98zlz7IX/fNn+E5yTs0mjCSWzT5jJrDwPdPveGgc
7MeqiN3Z1FSArtIUfk/9wm6tuLgA6XYp+VQioD3rBTwtBzlVFBUeSSkXrijn
4ftZLVG7u6C6mNe4uPbZ7cs9i27zdutpCB11ExkKR90duUMnFZr1mYeELEbs
VhRUXjueXjdnWc1g35NpKokQQ1RfkMQ7u1gIqPdKWsNtE0EXQ6aUFZvGVOD4
60sIfEgfD6xRvJR+z6GZwL1GmMmDzp5VH4SrMeXm1RieIIZZIxL8Bz7FzDX0
7LaBNSNvO5d9fPXR89xwHL1OZD+YCaBlyy2Ceav81sG5usdZXhLLh2CYht9o
jaCjSL5fQ4ohNfYilV4B3cO3C8vfe8cMXtD36UYU2gR2Q9APzCAnpSYiIa0R
LFCrnkm5DW87ML9tf3gly3zXuakOuzslUXlGG0/8ZD2jFNOJfKAE8DRKMg4a
ImaqAsWSDPcdcbzAVOH77jA2bNln7+jOBWW/GxJoboz1mOoqs9kK+fjyY3A5
fouECF36drWLGNhi8DGvwDwiCBDzBwPNARnk481HPwuolGkp/ovUV3y8+Niv
TdIaQIf0E483vIq+dLr28cXGTNPWQOwdjhP9Nmy3VUvg/SGJ41fDjuL+f0Ml
4F+mpMBm4Egkf93av4LRPAq8iqnuQ5mRI63jnerLVipshX9ITzFpfAGSqVIi
Ryb5LmRlci/pXK1BgcKARoMZr6+Q9KOHJ7qU93zURgVPAGsyTcCkw9rwnhB3
iPQWd4lOEPuSbGF7mF/GXp6/uVSpfYWMr+Y5+CSx3Y2YjKmYNOaVuAGe/tZH
pWKPHOKFPl4PHr0p6Z7Pb9ednEEHQ/H/qkLTHPDu8yx2DO/Ul40GgP9df6br
Wp3LVqK5bBUboGvWQF8RQaqOeYuaeOCOIoUyTUvzvtvtmmYsPS2JEK3YG1p3
9PaETThabM/aoFQnRZDjEJ2R6620pa05rIH8pozttU7G7p4Rsiuow4pa3mII
Qr6ptzG5X9w7C92DiJXSDmk8hlWKDsWCyckzGxbVY6lcYLFuSw60Rr89Rfod
hoqNqVxn4lDU+Eu+1H3lOsq/2z+0JB5L5y+Zp6gLead2eQRHBiolyTfSIo2P
eMqEnC8K9jI5raen+FDnjirT7v3Edng3B7x0OBiwolTU+QuKXWM3Qp3JtrQa
ap2qRgcd1SMmqPnuTxk1CKnOSSN0n7VIq1UJ5SlrJV3IxDNIxnxp1b4kwAG5
SdjOqfJsSc4K6d/W5PzNGtVunwb4auZCUxOmadEM6b6irsLfRDsr48InvF9W
aorSjEosf0XQtk80tzQL1ProHGhM74YeecfAkl1B0rSFokY/cV4IaMmX6KIu
1TjBNUKHc6FIAG0XVnS6+a5/NK6IdRDSWtfFmXCzVEjnAJIcAXzkykHVGtjS
toFHBHCLiAaJ3RLIaPnGDVcugwY+7OCYtpFrUrLrnTn2GhemwWZQRKF888PG
m6JtF9y8E+3ni6VBv0Xeu8Emrs7fnm+EJz+kYtPe+ZCs1IyOdNoHSRPquMSK
bH0ObZxJwUX4mr7PG+sMdksnk2fiPDus/ZD0rqPx60EWOEXASJAc6I8uJbMz
9e7I0b21oXhLZe7gkDXDXdD30bf5arP2Bcmhlww2nK+viPUlj1v+7cKOrN1X
QPe1liri7um5ePx16+5SO1lccnSUvP2d95b2K+CAy2nbdk+X5KmYIpc796UW
TXnz7prOmZqfhjR9wQvpb8EGxAW1rz1QLZtKfl+gT4jYFa17DDdALcX3gBo3
vWIEQsHwfXJJN2a0I2ThHjT3cAqzHCc/+atMgn8pU8y+J9lvqYz6Czwf4R/F
7Wazhj+HSwzd0A4y7fulwoL7Wj7Ype/lssbDtWG+U94dQXKvO1JXUQTGfro8
vD7I6KAx9Vv4Zw8hxhdcHkDvRfTtvWSKAeR5Qz56VzmS5P2LC/EcBQjsS+cB
Z+I6R6qEcWALLmNbrZhAy7iLEVt/Qb2qgGLpSsfOljALcp7SbddcZTOPlwlM
u9Dijaw08GmiClNXw+Sl0neGPAJTDpN/gKP9E/x8otI7jY+1dbUVP3GCGiZv
FXVqZM5nmMPkHU104xTEHyZ/od4irP1DpbRbAKcxvmUfJkwA+KZioATGvdNV
00vim1qxpRxTmOdN9YRpNNhmzK3cyGj52f+Bfh90V7oIKzHd2P07slMSZd/P
zJIR0MNfPKXfZNDvqeIoZjwGhcIUGTHccAgn7ENSGJ3Rk1LiUVDYgMWkF7lk
ZhSaGfGmIzvb79vLw/17OaW9+Kn49xPhBxV+1gHIAuQY0BSDEC2D/YK8eS/+
8PQLaz6kNbf8tqwZt5ydVNP0ybNnDyfanoxOuET410r9W03c/QTTr9ua3OeV
VU49WF4x3haBtGB/Mh/z5UZyK/6aWWB4mY88eTxg8M37oc8k3jghN1h/rzve
dmzYiGcVaYdVjJP/Ac6E/+GoOAAA

-->

</rfc>

