<?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.26 (Ruby 2.6.10) -->
<?rfc docmapping="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-haynes-nfsv4-uncacheable-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="Uncacheable Attribute">Adding an Uncacheable Attribute to NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-haynes-nfsv4-uncacheable-03"/>
    <author initials="T." surname="Haynes" fullname="Thomas Haynes">
      <organization>Hammerspace</organization>
      <address>
        <email>loghyr@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>General</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 54?>

<t>The Network File System version 4.2 (NFSv4.2) allows a client to
cache both metadata and data for file objects, as well as metadata
for directory objects.  While caching directory entries (dirents) can
improve performance, it can also prevent the server from enforcing access
control on individual dirents.  Similarly, caching file data can lead to
performance issues if the cache hit rate is low.  This document introduces
a new uncacheable attribute for NFSv4.  Files and dirents marked as
uncacheable MUST NOT be stored in client-side caches.
This ensures data consistency and integrity by requiring clients to
always retrieve the most recent data directly from the server. This
document extends NFSv4.2 (see RFC7862).</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 68?>

<t>Discussion of this draft takes place
on the NFSv4 working group mailing list (nfsv4@ietf.org),
which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=nfsv4"/>. Source
code and issues list for this draft can be found at
<eref target="https://github.com/ietf-wg-nfsv4/uncacheable"/>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/ietf-wg-nfsv4"/>.</t>
    </note>
  </front>
  <middle>
    <?line 79?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>With a remote filesystem, the client typically caches both directory
entries (dirents) and file contents in order to improve performance.
Several assumptions are made about the rate of change in the dirents
and the number of clients trying to concurrently access a file.
With NFSv4.2, this could theoretically be mitigated by directory
delegations for the dirents and practically by file delegations
for the file contents.</t>
      <t>There are prior efforts to bypass both the dirent and file caching.
Access Based Enumeration (ABE) is used in Server Message Block (SMB)
<xref target="SMB2"/> protocol to effectively limit the namespace visibility per
user. In Highly Parallel Computing (HPC) workloads, file caching
is bypassed in order to achieve consistent work flows.</t>
      <t>This document introduces the uncacheable attribute to NFSv4.2 to
implement ABE and to bypass file caching on the client. As such,
it is an OPTIONAL to implement attribute for NFSv4.2. However, if
both the client and the server support this attribute, then the
client MUST follow the semantics of uncacheable.<cref anchor="_2">What about mixed modes?</cref></t>
      <t>A client can easily determine whether or not a server supports
the uncacheable attribute with a simple GETATTR on any
dirent. If the server does not support the uncacheable
attribute, it will return an error of NFS4ERR_ATTRNOTSUPP.</t>
      <t>The only way that the server can determine that the client supports
the attribute is if the client sends either a GETATTR or a SETATTR
with the uncacheable attribute.</t>
      <t>While some argument could be made to introduce two new attributes,
the functionality of the uncacheable attribute dictates which cache
is to be bypassed. As ABE is concerned with walking the namespace,
it is only applicable to be acted on dirents which are of type attribute value of 
NF4DIR. And as bypassing file caching is file based, it is only
applicable for dirents which are of type attribute value of  NF4REG.<cref anchor="_1">What about the other file types?</cref></t>
      <t>Using the process detailed in <xref target="RFC8178"/>, the revisions in this document
become an extension of NFSv4.2 <xref target="RFC7862"/>. They are built on top of the
external data representation (XDR) <xref target="RFC4506"/> generated from
<xref target="RFC7863"/>.</t>
      <section anchor="definitions">
        <name>Definitions</name>
        <dl>
          <dt>Access Based Enumeration (ABE)</dt>
          <dd>
            <t>When servicing a READDIR or GETATTR operation, the server provides
results based on the access permissions of the user making the request.</t>
          </dd>
          <dt>dirent</dt>
          <dd>
            <t>A directory entry, representing either a file or a subdirectory. In
the context of NFSv4, a dirent marked as uncacheable MUST NOT be cached
by clients.</t>
          </dd>
          <dt>dirent caching</dt>
          <dd>
            <t>A client cache that is used to avoid looking up attributes.</t>
          </dd>
          <dt>file caching</dt>
          <dd>
            <t>A client cache, normally called the page cache, which caches the
contents of a regular file. Typical usage would be to accumulate
changes to be bunched together for writing to the server.</t>
          </dd>
        </dl>
        <t>Further, the definitions of the following terms are referenced as follows:</t>
        <ul spacing="normal">
          <li>
            <t>directory delegations (<xref section="10.9" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>file delegations (<xref section="10.2" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>GETATTR (<xref section="18.7" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>hidden (<xref section="5.8.2.15" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>Mandatory Access Control (MAC) (<xref target="RFC4949"/>)</t>
          </li>
          <li>
            <t>NF4DIR (<xref section="5.8.1.2" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>NF4REG (<xref section="5.8.1.2" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>NFS4ERR_ATTRNOTSUPP (<xref section="15.1.15.1" sectionFormat="of" target="RFC8881"/></t>
          </li>
          <li>
            <t>mode (<xref section="6.2.4" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>offline (<xref section="2" sectionFormat="of" target="I-D.ietf-nfsv4-delstid"/>)</t>
          </li>
          <li>
            <t>owner (<xref section="5.8.2.26" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>owner_group (<xref section="5.8.2.27" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>READDIR (<xref section="18.23" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>SETATTR (<xref section="18.30" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>system (<xref section="5.8.2.36" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>type (<xref section="5.8.1.2" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
        </ul>
      </section>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" 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.
<?line -6?>
        </t>
      </section>
    </section>
    <section anchor="caching-of-dirents">
      <name>Caching of Dirents</name>
      <t>With a remote filesystem, the client typically caches directory
entries (dirents) locally to improve performance. This cooperation
succeeds because both the server and client operate under POSIX
semantics (<xref target="POSIX.1"/>) and agree to interpretation of mode bits with
respect to the uid and gid in NFSv3 <xref target="RFC1813"/>. For NFSv4.2, these
would respectively be the mode, owner, and owner_group attributes
defined in <xref section="5" sectionFormat="of" target="RFC8881"/>.  Note that this cooperation
does not apply to Access Control List (ACLs) entries as NFSv4.2
does not implement a strict POSIX style ACL.</t>
      <t>NFSv4.2 does implement NFSv4.1 ACLs, which are enforced on the
server and not the client. As such, ACL enforcement requires the
client to bypass the dirent cache to have checks done when a new
user attempts to access the dirent.</t>
      <t>Another consideration is that not all server implementations natively
support the SMB <xref target="SMB2"/>. Instead, they layer Samba <xref target="Samba"/> on
top of the NFSv4.2 service. The attributes of hidden, system, and
offline have already been introduced in the NFSv4.2 protocol to
support Samba.  The Samba implementation can utilize these attributes
to provide SMB semantics. While private protocols can supply these
features, it is better to drive them into open standards.</t>
      <t>Another concept that can be adapted from SMB is that of Access Based
Enumeration (ABE). If a share or a folder has ABE enabled, then the
user can only see the files and sub-folders for which they have
permissions.</t>
      <t>Under the POSIX model, this can be done on the client and not
the server. However, that only works with uid, gid, and mode bits.
If we consider identity mappings, ACLS, and server local policies,
then the determination of ABE MUST be done on the server.</t>
      <t>Since cached dirents are shared by all users on a client, and the
client cannot determine access permissions for individual dirents,
all users are presented with the same set of attributes. To address
this, this document introduces the new uncacheable attribute. This
attribute instructs the client not to cache the dirent for a file
or directory object. Consequently, each time a client queries for
these attributes, the server's response can be tailored to the
specific user making the request.</t>
      <section anchor="sec_dirents">
        <name>Uncacheable Dirents</name>
        <t>If a file object or directory has the uncacheable attribute set,
then the client MUST NOT cache its dirent attributes. This means
that even if the client has previously retrieved the attributes for
a user, it MUST query the server again for those attributes on
subsequent requests. Additionally, the client MUST NOT share
attributes between different users.</t>
      </section>
    </section>
    <section anchor="caching-of-file-data">
      <name>Caching of File Data</name>
      <t>In addition to caching metadata, clients can also cache file data.
The uncacheable attribute also instructs the client to bypass its
page cache for the file. This behavior is similar to using the
O_DIRECT flag with the open call (<xref target="open_2_"/>). This can be beneficial
for files that are not shared or for files that do not exhibit
access patterns suitable for caching.</t>
      <t>However, the real need for bypassing write caching is evident in
HPC workloads. In general, these involve massive data transfers and
require extremely low latency.  Write caching can introduce
unpredictable latency, as data is buffered and flushed later.</t>
      <section anchor="sec_files">
        <name>Uncacheable Files</name>
        <t>If a file object is marked as uncacheable, all modifications to
the file MUST be immediately sent from the client to the server. In
other words, the file data is also not cacheable.</t>
      </section>
    </section>
    <section anchor="xdr-for-offline-attribute">
      <name>XDR for Offline Attribute</name>
      <sourcecode type="xdr"><![CDATA[
///
/// typedef bool            fattr4_uncacheable;
///
/// const FATTR4_UNCACHEABLE            = 87;
///
]]></sourcecode>
    </section>
    <section anchor="extraction-of-xdr">
      <name>Extraction of XDR</name>
      <t>This document contains the external data representation (XDR)
<xref target="RFC4506"/> description of the uncacheable attribute.  The XDR
description is presented in a manner that facilitates easy extraction
into a ready-to-compile format. To extract the machine-readable XDR
description, use the following shell script:</t>
      <sourcecode type="shell"><![CDATA[
#!/bin/sh
grep '^ *///' $* | sed 's?^ */// ??' | sed 's?^ *///$??'
]]></sourcecode>
      <t>For example, if the script is named 'extract.sh' and this document is
named 'spec.txt', execute the following command:</t>
      <sourcecode type="shell"><![CDATA[
sh extract.sh < spec.txt > uncacheable_prot.x
]]></sourcecode>
      <t>This script removes leading blank spaces and the sentinel sequence '///'
from each line. XDR descriptions with the sentinel sequence are embedded
throughout the document.</t>
      <t>Note that the XDR code contained in this document depends on types from
the NFSv4.2 nfs4_prot.x file (generated from <xref target="RFC7863"/>).  This includes
both nfs types that end with a 4, such as offset4, length4, etc., as
well as more generic types such as uint32_t and uint64_t.</t>
      <t>While the XDR can be appended to that from <xref target="RFC7863"/>, the code snippets
should be placed in their appropriate sections within the existing XDR.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>For a given user A, a client MUST NOT make access decisions for
uncacheable dirents retrieved for another user B. These decisions
MUST be made by the server.  If the client is Labeled NFS aware
(<xref target="RFC7204"/>), then the client MUST locally enforce the MAC security policies.</t>
      <t>The uncacheable attribute allows dirents to be annotated such that
attributes are presented to the user based on the server's access
control decisions.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC4506">
          <front>
            <title>XDR: External Data Representation Standard</title>
            <author fullname="M. Eisler" initials="M." role="editor" surname="Eisler"/>
            <date month="May" year="2006"/>
            <abstract>
              <t>This document describes the External Data Representation Standard (XDR) protocol as it is currently deployed and accepted. This document obsoletes RFC 1832. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="67"/>
          <seriesInfo name="RFC" value="4506"/>
          <seriesInfo name="DOI" value="10.17487/RFC4506"/>
        </reference>
        <reference anchor="RFC4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <author fullname="R. Shirey" initials="R." surname="Shirey"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="36"/>
          <seriesInfo name="RFC" value="4949"/>
          <seriesInfo name="DOI" value="10.17487/RFC4949"/>
        </reference>
        <reference anchor="RFC7204">
          <front>
            <title>Requirements for Labeled NFS</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="April" year="2014"/>
            <abstract>
              <t>This memo outlines high-level requirements for the integration of flexible Mandatory Access Control (MAC) functionality into the Network File System (NFS) version 4.2 (NFSv4.2). It describes the level of protections that should be provided over protocol components and the basic structure of the proposed system. The intent here is not to present the protocol changes but to describe the environment in which they reside.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7204"/>
          <seriesInfo name="DOI" value="10.17487/RFC7204"/>
        </reference>
        <reference anchor="RFC7862">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 Protocol</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document describes NFS version 4 minor version 2; it describes the protocol extensions made from NFS version 4 minor version 1. Major extensions introduced in NFS version 4 minor version 2 include the following: Server-Side Copy, Application Input/Output (I/O) Advise, Space Reservations, Sparse Files, Application Data Blocks, and Labeled NFS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7862"/>
          <seriesInfo name="DOI" value="10.17487/RFC7862"/>
        </reference>
        <reference anchor="RFC7863">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 External Data Representation Standard (XDR) Description</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides the External Data Representation (XDR) description for NFS version 4 minor version 2.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7863"/>
          <seriesInfo name="DOI" value="10.17487/RFC7863"/>
        </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>
        <reference anchor="RFC8178">
          <front>
            <title>Rules for NFSv4 Extensions and Minor Versions</title>
            <author fullname="D. Noveck" initials="D." surname="Noveck"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document describes the rules relating to the extension of the NFSv4 family of protocols. It covers the creation of minor versions, the addition of optional features to existing minor versions, and the correction of flaws in features already published as Proposed Standards. The rules relating to the construction of minor versions and the interaction of minor version implementations that appear in this document supersede the minor versioning rules in RFC 5661 and other RFCs defining minor versions.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8178"/>
          <seriesInfo name="DOI" value="10.17487/RFC8178"/>
        </reference>
        <reference anchor="RFC8881">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 1 Protocol</title>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck"/>
            <author fullname="C. Lever" initials="C." surname="Lever"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document describes the Network File System (NFS) version 4 minor version 1, including features retained from the base protocol (NFS version 4 minor version 0, which is specified in RFC 7530) and protocol extensions made subsequently. The later minor version has no dependencies on NFS version 4 minor version 0, and is considered a separate protocol.</t>
              <t>This document obsoletes RFC 5661. It substantially revises the treatment of features relating to multi-server namespace, superseding the description of those features appearing in RFC 5661.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8881"/>
          <seriesInfo name="DOI" value="10.17487/RFC8881"/>
        </reference>
        <reference anchor="I-D.ietf-nfsv4-delstid">
          <front>
            <title>Extending the Opening of Files in NFSv4.2</title>
            <author fullname="Thomas Haynes" initials="T." surname="Haynes">
              <organization>Hammerspace</organization>
            </author>
            <author fullname="Trond Myklebust" initials="T." surname="Myklebust">
              <organization>Hammerspace</organization>
            </author>
            <date day="2" month="October" year="2024"/>
            <abstract>
              <t>   The Network File System v4 (NFSv4) allows a client to both open a
   file and be granted a delegation of that file.  This delegation
   provides the client the right to authoritatively cache metadata on
   the file locally.  This document presents several extensions for both
   the opening and delegating of the file to the client.  This document
   extends NFSv4.2 (see RFC7863).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-delstid-08"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="open_2_">
          <front>
            <title>open and create files.</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
          <seriesInfo name="Linux Programmer's Manual" value=""/>
        </reference>
        <reference anchor="POSIX.1">
          <front>
            <title>The Open Group Base Specifications Issue 7</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date year="2013"/>
          </front>
          <seriesInfo name="IEEE Std 1003.1, 2013 Edition" value=""/>
        </reference>
        <reference anchor="RFC1813">
          <front>
            <title>NFS Version 3 Protocol Specification</title>
            <author fullname="B. Callaghan" initials="B." surname="Callaghan"/>
            <author fullname="B. Pawlowski" initials="B." surname="Pawlowski"/>
            <author fullname="P. Staubach" initials="P." surname="Staubach"/>
            <date month="June" year="1995"/>
            <abstract>
              <t>This paper describes the NFS version 3 protocol. This paper is provided so that people can write compatible implementations. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1813"/>
          <seriesInfo name="DOI" value="10.17487/RFC1813"/>
        </reference>
        <reference anchor="Samba" target="https://www.samba.org/">
          <front>
            <title>Samba.org. Samba Project Website.</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SMB2">
          <front>
            <title>Server Message Block (SMB) Protocol Versions 2 and 3</title>
            <author>
              <organization>Microsoft Learn</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 310?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Trond Myklebust and Thomas Haynes all worked on the prototype at Hammerspace.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
h9gdp0MyxcJmjcrQ4dtTN78G1aydtj2hawlJGMeZ1TpWmWnPTB9G8kGxWp7V
GiUR5m2+mBNoTMXfBcnGAVLJ72IAaJBPJjfNEr7HYk6wPkGE4dgtJr8RKKlL
KuAhuCWnYB5CgUoBYptw5VCg2GFkBfCjVEzFykuTcd5bg44YMaxzFIYZsJP2
lVWBpZgNb4gQK3sTTJKsq0VXwHuT1fy9+vj+5OziGqJQGo1Q0lDIGMIuhPSY
8JJdJcihOnJE3vyHN4dfnVyf/4CwOuSwOlwPKzp8wZbnvWkViq8vPmoGsMso
Dj8DTxH8+/o1FJWPj5K3wbKdVCacHzugp8Y2YafIhcNFIhYxjpciFvf4SJzP
rvg849plFWNasQheoGh6mRMpJ+JYWlB7eG4VMspPZ9e7shiVy0gXU24okLmI
Wqq4zzH2ASv5Rp/ZicudJMHfyVRKkcoAZxR2TqoGfX0+PINRKUyaiFmEab1u
kBL1ALf2CvLWGczG9o2AHfjAgmLYiwqj12M+IqdxUSLZ1leQXuxPUg03KiRU
J41iaF4T1FKQ0ZOvx80cyokcdpz4H6rGMKjZYlpvSgn9XCnB36YK7CJwn0bE
Jn+yqA1iUxnEYBUZAGXS+8KlKIgKPi94aIsMWG4tGW8t1tPcPRG+mJGPsuMS
kwi/dyDCS1KKNBEnJmea1mDpwsn0jbBPiEYrLCOIcbqHU2NkhQWYDjZoA93M
+CBTyTwUpkuUR4ECdgobpd7XJY0RJ0lbN4yGlyTJM+EVQkpLOwEfA3yxJWSE
H4BqdxygSwV3QJssI6k+POi/oaVD8+fxcRezNnngxoSjrQnRx7vjXve/2xo3
A+9HpHSGfdt/DUpx+O3W0CswCcOSh/A7DTX4ztUQXGxHovnNyRsZLiC6ufLh
E7IK4v2xkVs5d+2E32IW/bM2EfOIhnQHvsIJT7ZWLyaTjBJzZyCL8HTvLcxZ
Ara21Xf0ant1GnkrRer2+G3LRMBat+DR8dbA0ZOmPj7YGiiV2/bmx9vCcnb6
XYMQLl9zL4HZqdeXCLIaUSg86A7ZgXq+Xr8g/HnRk7+EQ/R8ff7vXy6uz8/o
efRheHnZPKgwYvTh05fLs/apnXn66erq/OOZTCZcW/tKvbga/id+Ier7IhLp
F1u5jiNVAIHaIyWAuJIuDOA/AZpJ9nx3+vl//+fwBNnqT6HRi3QlH6hniw/g
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

-->

</rfc>
