<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 2.6.10) -->
<?rfc docmapping="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-nfsv4-uncacheable-files-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Uncacheable File">Adding an Uncacheable File Data Attribute to NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-uncacheable-files-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 57?>

<t>Network File System version 4.2 (NFSv4.2) clients commonly perform
client-side caching of file data in order to improve performance.
On some systems, applications may influence client data caching
behavior, but there is no standardized mechanism for a server or
administrator to indicate that particular file data should not be
cached by clients for reasons of performance or correctness. This
document introduces a new file data caching attribute for NFSv4.2.
Files marked with this attribute are intended to be accessed with
client-side caching of file data suppressed, in order to support
workloads that require predictable data visibility. This document
extends NFSv4.2 (see RFC7862).</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 71?>

<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-files"/>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/ietf-wg-nfsv4"/>.</t>
    </note>
  </front>
  <middle>
    <?line 82?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Clients of remote filesystems commonly perform client-side caching
of file dat in order to improve performance.  Such caching may
include retaining data read from the server to satisfy subsequent
READ requests, as well as retaining data written by applications
in order to delay or combine WRITE requests before transmitting
them to the server.  While these techniques are effective for many
workloads, they may be unsuitable for workloads that require
predictable data visibility or involve concurrent modification of
shared files by multiple clients.</t>
      <t>In some cases, Network File System version 4.2 (NFSv4.2) (see
<xref target="RFC7862"/>)  mechanisms such as file delegations can reduce the
impact of concurrent access.  However, delegations are not always
available or effective, particularly for workloads with frequent
concurrent writers or rapidly changing access patterns.</t>
      <t>There have been prior efforts to bypass file data caching in order to
address these issues.  In High-Performance Computing (HPC) workloads,
file data caching is often bypassed to improve predictability and to
avoid read-modify-write hazards when multiple clients write disjoint
byte ranges of the same file.</t>
      <t>Applications on some systems can request bypass of the client data
cache by opening files with the O_DIRECT flag (see <xref target="OPEN-O_DIRECT"/>).
However, this approach has limitations, including the requirement
that each application be explicitly modified and the lack of a
standardized mechanism for communicating this intent between servers
and clients.</t>
      <t>This document introduces the uncacheable file data attribute to
NFSv4.2.  This <bcp14>OPTIONAL</bcp14> attribute allows a server to indicate that
client-side caching of file data for a particular file is unsuitable.
When both the client and the server support this attribute, the
client is advised suppress client-side caching of file data for
that file, in accordance with the semantics defined in this document.</t>
      <t>The uncacheable file data attribute is read-write, applies on a
per-file basis, and has a data type of boolean.</t>
      <t>Support for the uncacheable file data attribute is specific to the
exported filesystem and may differ between filesystems served by the
same server.  A client can determine whether the attribute is
supported for a given file by issuing a GETATTR request and examining
the returned attribute list.</t>
      <t>The uncacheable file data attribute applies only to regular files
(NF4REG).  Attempts to query or set this attribute on objects of
other types <bcp14>MUST</bcp14> result in an error of NFS4ERR_INVAL. Since the
uncacheable file data attribute applies only to regular files,
attempts to apply it to other object types represent an invalid use
of the attribute.</t>
      <t>Using the process described in <xref target="RFC8178"/>, the revisions in this
document extend 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>client-side caching of file data</dt>
          <dd>
            <t>The retention of file data by a client in a local data cache, commonly
referred to as the page cache, for the purpose of satisfying subsequent
READ requests or delaying transmission of WRITE data to the server.</t>
          </dd>
          <dt>write-behind caching</dt>
          <dd>
            <t>A form of file data caching in which WRITE data is retained by the
client and transmission of the data to the server is delayed in order
to combine multiple WRITE operations or improve efficiency.</t>
          </dd>
          <dt>direct I/O</dt>
          <dd>
            <t>An access mode in which file data is transferred between application
buffers and the underlying storage without populating or consulting
the client's file data cache.  Direct I/O suppresses both read caching
and write-behind caching of file data.</t>
          </dd>
          <dt>write hole</dt>
          <dd>
            <t>A write hole is an instance of data corruption that arises when
multiple clients modify disjoint byte ranges within the same encoded
data block without having a consistent view of the existing contents.
This can result in stale data overwriting newer updates, particularly
in environments that use erasure encoding or striped storage.
(Adapted from <xref target="I-D.haynes-nfsv4-flexfiles-v2"/>.)</t>
          </dd>
        </dl>
        <t>This document assumes familiarity with the NFSv4 protocol operations,
error codes, object types, and attributes as defined in <xref target="RFC8881"/>.</t>
      </section>
      <section anchor="requirements-language">
        <name>Requirements Language</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>
        <?line -18?>

</section>
    </section>
    <section anchor="client-side-caching-of-file-data">
      <name>Client-Side Caching of File Data</name>
      <t>The uncacheable file data attribute advises the client to bypass
its page cache for a file in certain troublesome cases.  These
include forms of client-side caching of file data such as write-behind
caching, in which multiple pending WRITEs are combined and transmitted
to the server at a later time for efficiency.  The uncacheable file
data attribute inhibits such behavior with an effect similar to
that of using the O_DIRECT flag with the open call (<xref target="OPEN-O_DIRECT"/>).</t>
      <t>The intent of this attribute is to allow a server or administrator
to indicate that client-side caching of file data for a particular
file is unsuitable.  The server is often in a better position than
individual clients to determine sharing patterns, access behavior,
or correctness requirements associated with a file.  By exposing
this information via an attribute, the server can advise clients
to suppress file data caching in a consistent manner.</t>
      <t>One important use case for this attribute arises in connection with
High-Performance Computing (HPC) workloads.  These workloads often
involve large data transfers and concurrent access by multiple
clients.  In such environments, client-side caching of file data
can introduce unpredictable latency or correctness hazards when
data is buffered and flushed at a later time.</t>
      <t>Another aspect of such workloads is the need to support concurrent
writers to shared files.  When application data spans a data block
in a client cache, delayed transmission of WRITE data can result
in clients modifying stale data and overwriting updates written by
others.  Prompt transmission of WRITE data enables the prompt
detection of write holes and reduces the risk of data corruption.</t>
      <section anchor="non-goals">
        <name>Non-Goals</name>
        <t>This attribute does not require clients to provide strict coherency,
does not replace existing NFS cache consistency mechanisms, and
does not mandate any specific client implementation strategy.  It
provides advisory guidance intended to reduce latency and correctness
risks in selected workloads.</t>
      </section>
      <section anchor="sec_files">
        <name>Uncacheable File Data</name>
        <t>When a file object is marked as uncacheable file data, the attribute
advises the client that client-side caching of file data for the
file is unsuitable.  In particular, the client is advised to transmit
modifications to the file promptly rather than retaining them in a
local data cache.  Note that a client that does not query this
attribute cannot be expected to observe the behavior described in
this section.</t>
        <t>For uncacheable file data, the client is advised not to retain file
data in its local data cache for the purpose of satisfying subsequent
READ requests or delaying transmission of WRITE data.  In such
cases, READ operations bypass the client data cache, and WRITE data
is not retained for read-after-write satisfaction or for the purpose
of combining multiple WRITE requests.</t>
        <t>Caching of unstably written data used to reissue WRITEs lost because
of server failure prior to COMMIT is not affected by the advice
provided by the uncacheable file data attribute.  This is because
the server is made aware of the WRITE operation without the sort
of delays introduced by write-behind caching.</t>
        <t>Suppressing read caching in addition to suppressing write-behind
caching reduces the risk of stale-data overwrite in multi-writer
workloads.  If a client retains cached READ data while other clients
concurrently modify disjoint byte ranges of the same file, the
client may perform a read-modify-write operation using stale data
and overwrite updates written by others.  This risk exists even
when WRITE operations are transmitted promptly.</t>
        <t>Disabling READ caching allows clients to observe the most recent
data prior to modification and reduces read-modify-write hazards
for shared files.  This behavior is consistent with direct I/O
semantics such as those provided by the O_DIRECT flag in Linux and
the directio/forcedirectio mechanisms in Solaris.</t>
        <t>If the fattr4_uncacheable_file_data attribute is not set when a
file is opened and is changed while the file is open, the client
is not expected to retroactively alter its caching behavior.  A
client may choose to flush cached data and apply the advice to
subsequent I/O, but such behavior is not required until the file
is closed and reopened.</t>
        <t>The presence of the uncacheable file data attribute does not
invalidate file delegations.  A server that wishes to ensure prompt
client I/O may choose not to issue write delegations for files
marked as uncacheable, but clients are not required to suppress
delegations solely due to the presence of this attribute.</t>
      </section>
    </section>
    <section anchor="sec_setting">
      <name>Setting the Uncacheable File Data Attribute</name>
      <t>The uncacheable file data attribute provides a mechanism by which
applications that do not support O_DIRECT can request DIRECT-I/O-like
semantics for file access.  In particular, the attribute allows a
server to advise clients that client-side caching of file data for
a file is unsuitable, including both read caching and write-behind
caching.</t>
      <t>Suppressing read caching is necessary in addition to suppressing
write-behind caching to avoid read-modify-write hazards in multi-writer
workloads.  If clients retain cached READ data while other clients
concurrently modify disjoint byte ranges of the same file, stale
cached data may be merged with new WRITE data and overwrite updates
written by others.  This risk exists even when WRITE data is
transmitted promptly and is not addressed by suppressing write-behind
caching alone.</t>
      <t>One possible deployment model is for a server or administrator to
configure a mount (see <xref target="MOUNT"/>) option such that newly created
files under a given export are marked as uncacheable file data.  In
such a configuration, the NFSv4.2 client could use SETATTR to set
the fattr4_uncacheable_file_data attribute at file creation time.</t>
      <t>This approach is conceptually similar int intent to the Solaris forcedirectio
mount option (see <xref target="SOLARIS-FORCEDIRECTIO"/>), but differs in scope
and visibility in that it allows DIRECT-I/O-like behavior to be
applied without requiring changes to individual applications.
However, unlike the Solaris option, the NFSv4.2 attribute is visible
to all clients accessing the file and is intended to convey server-side
knowledge or policy in a distributed environment.</t>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>There is a prototype Hammerspace server which implements the
uncacheable file data attribute and a prototype Linux client which
treats the uncacheable file data attribute as an indication to use
O_DIRECT.  For the prototype, all files created under the mount
point have the fattr4_uncacheable_file_data set to be true.</t>
      <t>Experience with the prototype indicates that the uncacheable file
data attribute can provide many of the practical benefits of O_DIRECT
without requiring application modification. For applications that
issue well-formed I/O requests, this approach has been observed to
improve performance in many cases, while also reducing memory
pressure and CPU utilization in the NFS client.</t>
    </section>
    <section anchor="xdr-for-uncacheable-attribute">
      <name>XDR for Uncacheable Attribute</name>
      <sourcecode type="xdr"><![CDATA[
///
/// typedef bool            fattr4_uncacheable_file_data;
///
/// const FATTR4_UNCACHEABLE_FILE_DATA       = 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 file 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[
<CODE BEGINS>
#!/bin/sh
grep '^ *///' $* | sed 's?^ */// ??' | sed 's?^ *///$??'
<CODE ENDS>
]]></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[
<CODE BEGINS>
sh extract.sh < spec.txt > uncacheable_prot.x
<CODE ENDS>
]]></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>The attribute does not introduce new authorization mechanisms or
alter existing access control semantics; existing NFSv4.2 security
mechanisms continue to apply.</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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.haynes-nfsv4-flexfiles-v2">
          <front>
            <title>Parallel NFS (pNFS) Flexible File Layout Version 2</title>
            <author fullname="Thomas Haynes" initials="T." surname="Haynes">
              <organization>Hammerspace</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   Parallel NFS (pNFS) allows a separation between the metadata (onto a
   metadata server) and data (onto a storage device) for a file.  The
   Flexible File Layout Type Version 2 is defined in this document as an
   extension to pNFS that allows the use of storage devices that require
   only a limited degree of interaction with the metadata server and use
   already-existing protocols.  Data protection is also added to provide
   integrity.  Both Client-side mirroring and the Erasure Coding
   algorithms are used for data protection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-haynes-nfsv4-flexfiles-v2-02"/>
        </reference>
        <reference anchor="MOUNT" target="https://man7.org/linux/man-pages/man2/mount.2.html">
          <front>
            <title>mount(2) - mount filesystem</title>
            <author>
              <organization>Linux man-pages project</organization>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="Linux" value="Programmer's Manual"/>
        </reference>
        <reference anchor="OPEN-O_DIRECT" target="https://man7.org/linux/man-pages/man2/open.2.html">
          <front>
            <title>open(2) - Linux system call for opening files (O_DIRECT)</title>
            <author>
              <organization>Linux man-pages project</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="SOLARIS-FORCEDIRECTIO" target="https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/manage-nfs/mount-options-for-nfs-file-systems.html">
          <front>
            <title>mount -o forcedirectio - Solaris forcedirectio mount option</title>
            <author>
              <organization>Oracle Solaris Documentation</organization>
            </author>
            <date year="2023"/>
          </front>
          <seriesInfo name="Solaris" value="Administration Guide"/>
        </reference>
      </references>
    </references>
    <?line 391?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Trond Myklebust, Mike Snitzer, Jon Flynn, Keith Mannthey, and Thomas
Haynes all worked on the prototype at Hammerspace.</t>
      <t>Rick Macklem, Chuck Lever, and Dave Noveck reviewed the document.</t>
      <t>Chris Inacio, Brian Pawlowski, and Gorry Fairhurst helped guide
this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAHu3ZmkAA7Vb/3LbRpL+f55i1tkq2ymSsh1d4tUm8SqSbOvOlnySvNmt
VE41BIbkrECAiwEkMz7nWe5Z7snu6+4ZYEAxlnbvzlW2SRCY6e7pH1//wHg8
Vo1rCrun9/PclXNtSv2+zEy2sGZaWP3S4Z9D0xi93zS1m7aN1U2lT16eX+9O
nikzndb2eu/WIyqvstIssWxem1kzdraZjcuZv94dt/2t4xlu9eMnX6nMNHZe
1es97Ztc5fi2pz8e7l8cfVJZVXpb+tbv6aZurXKrmj/55tmTJ394Ahpqa/b0
K1va2hTqpqqv5nXVrvb0iW3om/BwvvaNXeo/29q7qtS76squ8Wu+p4/Lxtal
bcaHRKpSvjFlfmmKqgQRa+vVyu3pn5oqG2lf1U1tZx6f1kv5AEaXZrWC6EY6
q5ZLWzb+Z6VM2yyqek/psdL440qQfzHRr826xIp0ScRzsaiWxqfXq3puSveL
aUDmHn7AkrVfmczyr3ZpXLGni2q+WNd/mtO3CbZVqqzqJZ65tthTn708ePb0
6R/Cx91/efJ1+PjN86+f9R+/Ch+fP/1mt//4PH58/vzpnlKunKVLH48PJwum
NpznrLAf5Byveem3p+9PLvaY2KBZy6otm0fPHuuxfNR8O5+H3GbquW329KJp
Vn5vZ2dpym8mEMNO4cr2A30dr8zcevr0bIeXmDybLJplwY93osafMYlvT7+h
B3X3oF7V1d9s1vAtolzPnjzb5a/e1s56YlJW0PLwnn7wrq7mNYv/oddvTdma
4gFuOX13dDI+vTw8Pjs6GPJZrWwpbMr+wqLOTFFoyJB/JxNj9vWjuMbjf0II
tNT/lQzOT9/snx2fj1+enh0cCUnHp7cPUI8r4iKzuauxjquw0XlVmNr5jety
e7UiDd7KG2zGgzeTFZaUd8eWxFANHSvnY5Ga3/Gy9o7cN45fnz6d7JIMwBMp
oKjDWDbzYxBCV9mxxJU+K6VTXr1j5LDKWjJh09Heieqr31CX8CgUZj9futL5
puan9avW5faBUuPxWJspXYb01TandB2d0uSZfhRc62OdFY6cCXuVqizWGiIi
U1Tyw9hjeU2+lHSqmrFaEbkG3gbM5bYmT+2WOPhrGx82ZWYn6rSEK1vaoKHw
YvBghcuYbg+dWWOJWdFa3BzIkIXDbmpqF+baVfVIIyDoZmFrqyG9stLsPE2d
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

-->

</rfc>
