<?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.29 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netconf-transaction-id-10" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="NETCONF Txid">Transaction ID Mechanism for NETCONF</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-transaction-id-10"/>
    <author initials="J." surname="Lindblad" fullname="Jan Lindblad">
      <organization>All For Eco</organization>
      <address>
        <email>jan.lindblad+ietf@for.eco</email>
      </address>
    </author>
    <date year="2025" month="August" day="01"/>
    <area>ops</area>
    <workgroup>NETCONF</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 52?>

<t>NETCONF clients and servers often need to have a synchronized view of
the server's configuration data stores.  The volume of configuration
data in a server may be very large, while data store changes typically
are small when observed at typical client resynchronization intervals.</t>
      <t>Rereading the entire data store and analyzing the response for changes
is inefficient for synchronization.  This document
specifies a NETCONF extension that allows clients and servers to
keep synchronized with a much smaller data exchange and without any
need for servers to store information about the clients.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Network Configuration Working Group mailing list (netconf@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netconf/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/netconf-wg/transaction-id"/>.</t>
    </note>
  </front>
  <middle>
    <?line 65?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>When a NETCONF client <xref target="RFC6241"/> wishes to initiate a new configuration transaction
with a NETCONF server, a frequently occurring use case is for the
client to find out if the configuration has changed since the client
last communicated with that server.  Such changes could occur, for
example, if another NETCONF client has made changes, or another system
or operator made changes through other means than NETCONF (e.g., local configuration).</t>
      <t>One way of detecting a change for a client would be to
retrieve the entire configuration from the server, then compare
the result with a previously stored copy at the client side.  This
approach is not popular with most NETCONF users, however, since it
would often be very expensive in terms of communications and
computation cost.</t>
      <t>Furthermore, even if the configuration is reported to be unchanged,
that will not guarantee that the configuration remains unchanged
when a client sends a subsequent change request, a few moments later.</t>
      <t>In order to simplify the task of tracking changes, a NETCONF server
may implement a meta level transaction tag or timestamp for an entire
configuration datastore or YANG subtree, and offer clients a way to
read and compare this tag or timestamp.  If the tag or timestamp is
unchanged, clients can avoid performing expensive operations.  Such
tags and timestamps are referred to as a 'transaction id' (txid) in this
document.</t>
      <t>Note that several server implementors have built proprietary and mutually
incompatible mechanisms for obtaining a transaction id from a NETCONF
server. This document solves the interoperability issue.</t>
      <t>RESTCONF, <xref target="RFC8040"/>,
defines a mechanism for detecting changes in configuration subtrees
based on Entity-Tags (ETags) and Last-Modified headers. An example is depicted in Appendix B.2.2 of <xref target="RFC8040"/></t>
      <t>In conjunction with this, RESTCONF
provides a way to make configuration changes conditional on the server
configuration being untouched by others.  This mechanism leverages
conditional requests per <xref section="13" sectionFormat="of" target="RFC9110"/>.</t>
      <t>This document defines similar mechanism for NETCONF,
<xref target="RFC6241"/>, for config true data.  It also ties this in
with YANG-Push, <xref target="RFC8641"/>, and "Comparison of Network
Management Datastore Architecture (NMDA) Datastores",
<xref target="RFC9144"/>.  'Config false' data (operational data, state, and statistics)
is left out of scope from this document.</t>
      <t>This document does not change the RESTCONF protocol in any way, and
is carefully written to allow implementations to share much of the
code between NETCONF and RESTCONF.  Note that the NETCONF txid
mechanism described in this document uses XML attributes, but the
RESTCONF mechanism relies on HTTP Headers instead, and use none of
the XML attributes described in this document, nor JSON Metadata
(see <xref target="RFC7952"/>).</t>
      <section anchor="how-to-read-this-document">
        <name>How to Read this Document</name>
        <t>At the heart of this document, in chapter <xref target="txid-mechanisms">Txid Mechanisms</xref>, there are two transaction-id handling mechanisms defined, the "Etag" and "Last-Modified" Transaction-id mechanisms.</t>
        <t>The common and general principles for all transaction-id mechanisms are defined in the chapter before that, <xref target="netconf-txid-extension">NETCONF Txid Extension</xref>.  Since the two Transaction-id mechanisms defined in this document have a lot in common, and the future might bring additional such mechanisms, this arrangement keeps the repetition to a minimum.  By necessity, this chapter is a bit abstract.  The details of how the principles are expressed in a specific Transaction-id mechanism follows in the <xref target="txid-mechanisms">Txid Mechanisms</xref> chapter.</t>
        <t>Next after the central chapter with the definitions of the Transaction-id handling mechanisms, there is an extensive chapter with usage examples.  This chapter is called <xref target="txid-mechanism-examples">Txid Mechanism Examples</xref>.</t>
        <t>Towards the end, there is also a chapter with <xref target="yang-modules">YANG Modules</xref>.  These are necessary for a correct implementation, but reading them will not provide much for the understanding of this document.  The mechanisms defined in this document are largely on the NETCONF protocol level, and most aspects cannot be described by YANG modules.</t>
        <t>The examples found throughout this document are referencing acls, aces, dscp and many other related names defined in YANG modules. Interested readers can find definitions of the relevant YANG structures in <xref target="RFC8519"/>. For the purposes of understanding this document, going there is entirely optional.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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>
      <t>This document uses the terminology defined in
<xref target="RFC6241"/>,
<xref target="RFC7950"/>,
<xref target="RFC7952"/>,
<xref target="RFC8040"/>,
<xref target="RFC8641"/>, and
<xref target="RFC9144"/>.</t>
      <t>In addition, this document defines the following terms:</t>
      <dl>
        <dt>C-txid:</dt>
        <dd>
          <t>Client side transaction-id, i.e., a txid value maintained or provided
by a NETCONF client.</t>
        </dd>
        <dt>Etag:</dt>
        <dd>
          <t>One protocol mechanism that conforms to the definitions in the
<xref target="netconf-txid-extension">NETCONF Txid Extension</xref> section in this
document.  Also the name of the XML attribute that this mechanism
uses in the NETCONF stream, and the message header used in RESTCONF.</t>
        </dd>
        <dt>Last-Modified:</dt>
        <dd>
          <t>Another protocol mechanism that conforms to the definitions in the
<xref target="netconf-txid-extension">NETCONF Txid Extension</xref> section in this
document.  Also the name of the XML attribute that this mechanism
uses in the NETCONF stream, and the message header used in RESTCONF.</t>
        </dd>
        <dt>S-txid:</dt>
        <dd>
          <t>Server side transaction-id, i.e., a txid value maintained or sent by
a NETCONF server.</t>
        </dd>
        <dt>Transaction-id Mechanism:</dt>
        <dd>
          <t>A protocol implementation that fulfills the principles described in
the first part, <xref target="netconf-txid-extension">NETCONF Txid Extension</xref>, of
this document.  See also Etag and Last-Modified.</t>
        </dd>
        <dt>Txid:</dt>
        <dd>
          <t>Abbreviation of Transaction-id.  A transaction-id is an UTF-8
string of characters.  The specific format depends on the protocol
mechanism used (e.g. Etag or Last-Modified).</t>
        </dd>
        <dt>Txid History:</dt>
        <dd>
          <t>Temporally ordered list of txid values used by the server.  Allows
the server to determine if a given txid occurred more recently than
another txid.</t>
        </dd>
        <dt>Versioned node:</dt>
        <dd>
          <t>A node in the instantiated YANG data tree for which
the server maintains a transaction id (txid) value.</t>
        </dd>
      </dl>
    </section>
    <section anchor="netconf-txid-extension">
      <name>NETCONF Txid Extension</name>
      <t>This document describes a NETCONF extension which modifies the
behavior of <tt>&lt;get-config&gt;</tt>, <tt>&lt;get-data&gt;</tt>, <tt>&lt;edit-config&gt;</tt>, <tt>&lt;edit-data&gt;</tt>,
<tt>&lt;discard-changes&gt;</tt>, <tt>&lt;copy-config&gt;</tt>, <tt>&lt;delete-config&gt;</tt>, and <tt>&lt;commit&gt;</tt> operations such
that clients are able to conditionally retrieve and update the
configuration in a NETCONF server.</t>
      <t>For servers implementing YANG-Push <xref target="RFC8641"/>, an extension for conveying txid
updates as part of subscription updates is also defined.  A similar
extension is also defined for servers implementing
"Comparison of NMDA Datastores" <xref target="RFC9144"/>.</t>
      <t>Several low level mechanisms could be defined to fulfill the
requirements for efficient client/server txid synchronization.
This document defines two such mechanisms, the 'etag txid' mechanism (<xref target="sec-etag"/>)
and the 'last-modified txid' mechanism (<xref target="sec-lm"/>). However, additional txid mechanisms may be defined in the future. Such mechanisms have to adhere
to the principles defined in <xref target="sec-principles"/>.</t>
      <t>This document is divided into a two
main parts; the first part discusses the txid mechanism in an abstract,
protocol-neutral way.  The second part,
<xref target="txid-mechanisms">Txid Mechanisms</xref>, then adds the protocol layer,
and provides concrete encoding examples.</t>
      <section anchor="sample-use-cases">
        <name>Sample Use Cases</name>
        <t>The common use cases for txid mechanisms are briefly discussed in this section.</t>
        <dl>
          <dt>Initial configuration retrieval:</dt>
          <dd>
            <t>When a client initially connects to a server, it may be interested
to acquire a current view of (parts of) the server's configuration.
In order to be able to efficiently detect changes later, it may also
be interested to store meta level txid information for
subtrees of the configuration.</t>
          </dd>
          <dt>Subsequent configuration retrieval:</dt>
          <dd>
            <t>When a client needs to retrieve again (parts of) the server's configuration,
it may be interested to leverage the txid metadata it has
stored by requesting the server to prune the response so that it does
not repeat configuration data that the client is already aware of.</t>
          </dd>
          <dt>Configuration update with txid return:</dt>
          <dd>
            <t>When a client issues a transaction towards a server, it may be
interested to also learn the new txid metadata that the server
has stored for the updated parts of the configuration.</t>
          </dd>
          <dt>Conditional configuration change:</dt>
          <dd>
            <t>When a client issues a transaction towards a server, it may specify
txid metadata for the transaction in order to allow the server to
verify that the client is up to date with any changes in the parts of
the configuration that it is concerned with.  If the txid
metadata in the server is different than the client expected, the
server rejects the transaction with a specific error message.</t>
          </dd>
          <dt>Subscribe to configuration changes with txid return:</dt>
          <dd>
            <t>When a client subscribes to configuration change updates through
YANG-Push, it may be interested to also learn the updated txid
metadata for the changed data trees, and recognize the YANG-Push
echo of its own changes.</t>
          </dd>
          <dt>Compare datastores:</dt>
          <dd>
            <t>When a client compares datastores, it may be interested to get the
latest txid values of the nodes being compared.</t>
          </dd>
        </dl>
        <t>This chapter will also provide some details about how to handle the (or a) candidate datastore, dependencies within a transaction, and txid handling in a few other NETCONF operations (e.g. copy-config).</t>
      </section>
      <section anchor="sec-principles">
        <name>General Txid Principles</name>
        <t>All servers implementing a txid mechanism MUST maintain a top level
server side txid (s-txid) metadata value for each configuration datastore
supported by the server.
Txid mechanism implementations MAY also maintain txid
metadata values for nodes deeper in the YANG data tree.  The nodes
for which the server maintains txids are collectively referred to as
the "Versioned Nodes".</t>
        <t>Server implementations MAY use the YANG extension statement
ietf-netconf-txid:versioned-node to inform potential clients about
which YANG nodes the server maintains a txid value for.  Another way
to discover (a partial) set of Versioned Nodes is for a client to
request the current configuration with txids.  The returned
configuration will then have the Versioned Nodes decorated with their
txid values.</t>
        <t>Regardless of whether a server declares the Versioned Nodes or not,
the set of Versioned Nodes in the server's YANG tree MUST remain
constant, except at system redefining events, such as software upgrades
or entitlement (a.k.a. "license") installations or removals. If a
Versioned Node was allowed to change status to a non-Versioned Node
(or vice versa), the client would no longer be able to reason about
the change. The effective txid of some nodes would sometimes seem to
change even when no configuration change had taken place.</t>
        <t>The server returning txid values for the Versioned Nodes
MUST ensure that the txid values are changed every time there has
been a configuration change at or below the node associated with
the txid value.  This means any update of a config true node will
result in a new txid value for all ancestor Versioned Nodes, up
to and including the datastore root itself.</t>
        <t>This also means a server MUST update the txid value for any
nodes that change as a result of a configuration change, and their
ancestors, regardless
of source, even if the changed nodes are not explicitly part
of the change payload.  An example of this is dependent data under
YANG <xref target="RFC7950"/> "when" or "choice" statements.</t>
        <t>A server MUST NOT change the txid value of a versioned node
unless the node itself or a child node of that node has
been changed.  The server MUST NOT change any txid values due to
changes in config false data, or any kind of metadata that the
server may maintain for YANG data tree nodes.</t>
      </section>
      <section anchor="initial-configuration-retrieval">
        <name>Initial Configuration Retrieval</name>
        <t>When a NETCONF server receives a <tt>&lt;get-config&gt;</tt> or <tt>&lt;get-data&gt;</tt> request (<xref section="3.1.1" sectionFormat="of" target="RFC8526"/>)
containing requests for txid values, and assuming no authorization or validation error is encountered,  it MUST, in the reply, return
txid values for all Versioned Nodes below the point requested by
the client.</t>
        <t>The exact encoding varies by mechanism, but all txid mechanisms
would have a special "txid-request" txid value (e.g., "?") which is
guaranteed to never be used as a normal txid value.  Clients MAY use
this special txid value associated with one or more nodes in the
data tree to indicate to the server that they are interested in
txid values below that point of the data tree.</t>
        <figure anchor="fig-baseline">
          <name>Initial Configuration Retrieval.  The client annotated the get-config request itself with the txid request value, which makes the server return all txid values in the entire datastore, that also fall within the requested subtree filter.  The most recent change seems to have been an update to ace R8 and R9.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config (txid: ?)                          |
       |     acls                                        |
       |                                                 |
       |   <------------------------------------------   |
       |   data (txid: 5152)                             |
       |     acls (txid: 5152)                           |
       |       acl A1 (txid: 4711)                       |
       |         aces (txid: 4711)                       |
       |           ace R1 (txid: 4711)                   |
       |             matches ipv4 protocol 17            |
       |             actions forwarding accept           |
       |       acl A2 (txid: 5152)                       |
       |         aces (txid: 5152)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 5152)                   |
       |             matches tcp source-port port 22     |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
        <ul empty="true">
          <li>
            <t>The call flow examples in this document use a 4-digit,
strictly increasing integer as txid.  The same txid value
is also used for all changed nodes in a given transaction.
These conventions of the examples are convenient and enhances
readability of the examples, but do not necessarily
reflect a typical implementation.</t>
          </li>
        </ul>
        <t>Txid values are opaque strings that uniquely identify
a particular configuration state.  Servers are expected to know which
txid values it has used in the recent past, and in which order they
were assigned to configuration change transactions.  This information
is known as the server's Txid History.</t>
        <t>How many historical txid values to track is up to each server
implementor to decide, and a server MAY decide not to store any
historical txid values at all.  The more txid values in the server's
Txid History, the more efficient the client synchronization may be, as
described in the coming sections. Servers may expose a configuration parameter
to control the history depth. Such control depends on the local server capabilities.
Refer to <xref target="sec-histo-size"/> for more considerations about history size.</t>
        <t>Some server implementors may decide to use a strictly increasing
integer as the txid value or a timestamp.  Doing so obviously makes
it very easy for the server to determine the sequence of historical
transaction ids.</t>
        <t>Some server implementors may decide to use a completely different txid
value sequence, to the point that the sequence may appear completely
random to outside observers.</t>
      </section>
      <section anchor="subsequent-configuration-retrieval">
        <name>Subsequent Configuration Retrieval</name>
        <t>Clients MAY request the server to return txid values in the response
by adding one or more txid values received previously in <tt>&lt;get-config&gt;</tt> or
<tt>&lt;get-data&gt;</tt> requests.  Txid values sent by a client are referred to as
c-txid.</t>
        <t>When a client sends a c-txid value of a node that matches the
server's s-txid value for that Versioned Node, or matches a more recent
s-txid value in the server's Txid History,
the server prunes (i.e., does not return) that subtree from
the response.  Since the client already knows the txid for that part
of the data tree, or a txid that occurred more recently, it
is obviously already up to date with that part of the configuration.
Sending it again would be a waste of time and energy.</t>
        <t><xref target="tab-rules"/> describes in detail how the client side (c-txid) and
server side txid (s-txid) values are determined and compared when the
server processes each data tree reply node from a get-config or
get-data request.</t>
        <t>Servers MUST process each of the config true nodes as follows:</t>
        <table anchor="tab-rules">
          <name>The Txid rules for response pruning.</name>
          <thead>
            <tr>
              <th align="left">Case</th>
              <th align="left">Condition</th>
              <th align="left">Behavior</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1. NO CLIENT TXID</td>
              <td align="left">In its request, the client did not specify a c-txid value for the current node, nor any ancestor of this node.</td>
              <td align="left">In this case, the server MUST return the current node according to the normal NETCONF specifications.  The rules below do not apply to the current node.  Any child nodes MUST also be evaluated with respect to these rules.</td>
            </tr>
            <tr>
              <td align="left">2. CLIENT ANCESTOR TXID</td>
              <td align="left">The client did not specify a c-txid value for the current node, but did specify a c-txid value for one or more ancestors of this node.</td>
              <td align="left">In this case, the current node MUST inherit the c-txid value of the closest ancestor node in the client's request that has a c-txid value.  Processing of the current node continues according to the rules below.</td>
            </tr>
            <tr>
              <td align="left">3. SERVER ANCESTOR TXID</td>
              <td align="left">The node is not a Versioned Node, i.e. the server does not maintain a s-txid value for this node.</td>
              <td align="left">In this case, the current node MUST, for the purposes of these rules, temporarily inherit the server's s-txid value of the closest ancestor that is a Versioned Node (has a server side s-txid value).  The datastore root is always a Versioned Node.  Processing of the current node continues according to the rules below.</td>
            </tr>
            <tr>
              <td align="left">4. CLIENT TXID UP TO DATE</td>
              <td align="left">The client specified c-txid for the current node value is "up to date", i.e. it matches the server's s-txid value, or matches a s-txid value from the server's Txid History that is more recent than the server's s-txid value for this node.</td>
              <td align="left">In this case the server MUST return the node decorated with a special "txid-match" txid value (e.g. "=") to the matching node, pruning any value and child nodes.</td>
            </tr>
            <tr>
              <td align="left">5. CLIENT TXID OUT OF DATE</td>
              <td align="left">The specified c-txid is "outdated" or "unknown" to the server, i.e. it does not match the server's s-txid value for this node, nor does the client c-txid value match any s-txid value in the server's Txid History that is more recent than the server's s-txid value for this node.</td>
              <td align="left">In this case the server MUST return the current node according to the normal NETCONF specifications.  If the current node is a Versioned Node, it MUST be decorated with the s-txid value.  Any child nodes MUST also be evaluated with respect to these rules.</td>
            </tr>
          </tbody>
        </table>
        <t>For list elements, pruning child nodes means that top-level
key nodes MUST be included in the response, and other child nodes
MUST NOT be included.  For containers, child nodes MUST NOT
be included.</t>
        <section anchor="when-there-is-no-change">
          <name>When there is No Change</name>
          <t>Here follows a couple of examples of how the rules above are applied.
See <xref target="fig-baseline">the example above</xref> for the most recent server
configuration state that the client is aware of, before this happens:</t>
          <figure anchor="fig-pruning">
            <name>Response Pruning.  Client sends get-config request with known txid values.  Server prunes response where the c-txid matches expectations.  In this case, the server had no changes, and pruned the response at the earliest point offered by the client.</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     acls (txid: 5152)                           |
       |       acl A1 (txid: 4711)                       |
       |         aces (txid: 4711)                       |
       |       acl A2 (txid: 5152)                       |
       |         aces (txid: 5152)                       |
       |                                                 |
       |   <------------------------------------------   |
       |   data                                          |
       |     acls (txid: =)                              |
       v                                                 v
]]></artwork>
          </figure>
          <t>In this case, the server's txid-based pruning saved a substantial
amount of information that is already known by the client to be sent
to and processed by the client.</t>
        </section>
        <section anchor="when-there-is-an-out-of-band-oob-change">
          <name>When there is an Out-Of-Band (OOB) Change</name>
          <t>In the following example someone has made a change to the
configuration on the server.  This server has chosen to implement
a Txid History with up to 5 entries.  The 5 most recently used
s-txid values on this example server are currently: 4711, 5152, 5550,
6614, 7770 (most recent).  Then a client sends this request:</t>
          <figure anchor="fig-oob-change">
            <name>Out of band change detected.  Client sends get-config request with known txid values.  Server provides updates only where changes have happened.  (Txid 7770 does not appear in this subtree, so that transaction must relate to some changes elsewhere.)</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     acls (txid: 5152)                           |
       |       acl A1 (txid: 4711)                       |
       |       acl A2 (txid: 5152)                       |
       |                                                 |
       |   <------------------------------------------   |
       |   data                                          |
       |     acls (txid: 6614)                           |
       |       acl A1 (txid: =)                          |
       |       acl A2 (txid: 6614)                       |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: =)                      |
       |           ace R8 (txid: =)                      |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
          </figure>
          <t>In the example depicted in <xref target="fig-oob-change"/>, the server returns the acls container because
the client supplied c-txid value (5152) differs from the s-txid value
held by the server (6614), and 5152 is less recent in the server's
Txid History than 6614.  The client is apparently unaware of the
latest config developments in this part of the server config tree.</t>
          <t>The server prunes list entry acl A1 is because it has the same s-txid
value as the c-txid supplied by the client (4711). The server returns
the list entry acl A2 because 5152 (specified by the client) is less
recent than 6614 (held by the server).</t>
          <t>The container aces under acl A2 is returned because 5152 is less recent
than 6614. The server prunes ace R7 because the c-txid for this
node is 5152 (from acl A2), and 5152 is more recent than the closest
ancestor Versioned Node (with txid 4711).</t>
          <t>The server also prunes acl R8 because the server and client txids
exactly match (5152). Finally, acl R9 is returned because of its less
recent c-txid value given by the client (5152, on the closest ancestor
acl A2) than the s-txid held on the server (6614).</t>
        </section>
        <section anchor="when-a-txid-value-is-inherited-from-an-ancestor-node">
          <name>When a Txid value is Inherited from an Ancestor Node</name>
          <t>In the example shown in <xref target="fig-vn"/>, the client specifies the c-txid for a node that
the server does not maintain a s-txid for, i.e., it is not a
Versioned Node.</t>
          <figure anchor="fig-vn">
            <name>Versioned Nodes.  Server lookup of dscp txid gives 4711, as closest ancestor is ace R7 with txid 4711.  Since the server's and client's txid match, the txid value is '=', and the leaf value is pruned.</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     acls                                        |
       |       acls A2                                   |
       |         aces                                    |
       |           ace R7                                |
       |             matches                             |
       |               ipv4                              |
       |                 dscp (txid: 4711)               |
       |                                                 |
       |   <------------------------------------------   |
       |   data                                          |
       |     acls                                        |
       |       acl A2                                    |
       |         aces                                    |
       |           ace R7                                |
       |             matches                             |
       |               ipv4                              |
       |                 dscp (txid: =)                  |
       v                                                 v
]]></artwork>
          </figure>
          <t>Here, the server looks up the closest ancestor node that is a
Versioned Node.  This particular server has chosen to keep a s-txid
for the list entry ace R7, but not for any of its children.  Thus
the server finds the server side s-txid value to be 4711 (from ace R7),
which matches the client's c-txid value of 4711.</t>
          <t>Servers MUST NOT use the special txid values, txid-match,
txid-request, txid-unknown (e.g., "=", "?", or "!") as actual
txid values.</t>
        </section>
      </section>
      <section anchor="candidate-datastore-configuration-retrieval">
        <name>Candidate Datastore Configuration Retrieval</name>
        <t>When a client retrieves the configuration from the (or a) candidate
datastore, some of the configuration nodes may hold the same data as
the corresponding node in the running datastore.  In such cases, the
server MUST return the same s-txid value for nodes in the candidate
datastore as in the running datastore.</t>
        <t>If a node in the candidate datastore holds different data than in the
running datastore, the server has a choice of what to return:</t>
        <ul spacing="normal">
          <li>
            <t>The server MAY return a txid-unknown value (e.g., "!").  This may
  be convenient in servers that do not know a priori what txids will
  be used in a future, possible commit of the candidate.</t>
          </li>
          <li>
            <t>If the txid-unknown value is not returned, the server MUST return
  the s-txid value the node will have after commit, assuming the client
  makes no further changes of the candidate datastore.  If a client
  makes further changes in the candidate datastore, the s-txid value
  MAY change again, i.e. the server is not required to stick with the
  s-txid value just returned.</t>
          </li>
        </ul>
        <t>See the example in
<xref target="candidate-datastore-transactions">Candidate Datastore Transactions</xref>.</t>
      </section>
      <section anchor="conditional-transactions">
        <name>Conditional Transactions</name>
        <t>Conditional transactions are useful when a client is interested
to make a configuration change, being sure that relevant parts of
the server configuration have not changed since the client last
inspected it.</t>
        <t>By supplying the latest c-txid values known to the client
in its change requests (<tt>&lt;edit-config&gt;</tt>, for example), it can request the server
to reject the transaction in case any relevant changes have occurred
at the server that the client is not yet aware of.</t>
        <t>This allows a client to reliably compute and send configuration
changes to a server without either acquiring a global datastore lock
for a potentially extended period of time, or risk that a change
from another client disrupts the intent in the time window between a
read (<tt>&lt;get-config&gt;</tt>, for example) and write (<tt>&lt;edit-config&gt;</tt>, for example) operation.</t>
        <t>Clients that are also interested to know the s-txid assigned to the
root Versioned Node in the model immediately in the
response could set a flag in the <tt>&lt;rpc&gt;</tt> element to request the server
to return the new s-txid with the <tt>&lt;ok&gt;</tt> element.</t>
        <figure anchor="base-edit-config">
          <name>Conditional transaction towards the Running datastore successfully executed.  As all the txid values specified by the client matched those on the server, the transaction was successfully executed.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (request new txid in response)    |
       |     config (txid: 5152)                         |
       |       acls (txid: 5152)                         |
       |         acl A1 (txid: 4711)                     |
       |           aces (txid: 4711)                     |
       |             ace R1 (txid: 4711)                 |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 7688)                               |
       v                                                 v
]]></artwork>
        </figure>
        <t>After the above edit-config, the client might issue a get-config to
observe the change.  It would look like this:</t>
        <figure anchor="fig-updated-all">
          <name>The txids are updated on all Versioned Nodes that were modified themselves or have a child node that was modified.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     acls (txid: ?)                              |
       |                                                 |
       |   <------------------------------------------   |
       |   data                                          |
       |     acls (txid: 7688)                           |
       |       acl A1 (txid: 7688)                       |
       |         aces (txid: 7688)                       |
       |           ace R1 (txid: 7688)                   |
       |             matches ipv4 protocol 6             |
       |             actions forwarding accept           |
       |       acl A2 (txid: 6614)                       |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
        <t>When a client sends in a c-txid value of a node, the server MUST consider it a match if the server's s-txid value is identical to the client, or if the server's value is found earlier in the server's Txid History than the value supplied by the client.</t>
        <section anchor="error-response-on-out-of-band-changes">
          <name>Error Response on Out-of-Band Changes</name>
          <t>If the server rejects the transaction because one or more of the
configuration s-txid value(s) differs from the client's expectation,
the server MUST return at least one <tt>&lt;rpc-error&gt;</tt> with the following
values:</t>
          <artwork><![CDATA[
   error-tag:      operation-failed
   error-type:     protocol
   error-severity: error
]]></artwork>
          <t>Additionally, the error-info tag MUST contain an sx:structure <xref target="RFC8791"/>
containing relevant details about one of the mismatching txids.
A server MAY send multiple rpc-errors when multiple txid mismatches
are detected.</t>
          <figure anchor="fig-cond-fails">
            <name>Conditional transaction that fails a txid check.  The client wishes to ensure there has been no changes to the particular acl entry it edits, and therefore sends the c-txid it knows for this part of the configuration.  Since the s-txid has changed (out of band), the server rejects the configuration change request and reports an error with details about where the mismatch was detected.</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config                                   |
       |     config                                      |
       |       acls                                      |
       |         acl A1 (txid: 4711)                     |
       |           aces (txid: 4711)                     |
       |             ace R1 (txid: 4711)                 |
       |               matches ipv4 dscp 20              |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   rpc-error                                     |
       |     error-tag       operation-failed            |
       |     error-type      protocol                    |
       |     error-severity  error                       |
       |     error-info                                  |
       |       mismatch-path /acls/acl[A1]               |
       |       mismatch-etag-value 6912                  |
       v                                                 v
]]></artwork>
          </figure>
        </section>
        <section anchor="sec-histo-size">
          <name>Txid History Size Consideration</name>
          <t>It may be tempting for a client implementor to send a single
c-txid value for the tree being edited.  In many cases, that
would certainly work just fine.  This is a way for the client to
request the server to go ahead with the change as long as there
has not been any changes more recent in the subtree below the
c-txid provided.</t>
          <t>Here the client is sending the same change as in
<xref target="base-edit-config">the example above</xref>, but with only a single
c-txid value that reflects the latest txid the client is
aware of anywhere in the configuration.</t>
          <figure>
            <name>Conditional transaction towards the Running datastore successfully executed.  As all the c-txid values specified by the client were the same or more recent in the server's Txid History, so the transaction was successfully executed.</name>
            <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (request new txid in response)    |
       |     config                                      |
       |       acls                                      |
       |         acl A1 (txid: 8602)                     |
       |           aces                                  |
       |             ace R1                              |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 9009)                               |
       v                                                 v
]]></artwork>
          </figure>
          <t>This approach works well in the example above because the c-txid
value 8602 is inherited down in the child nodes, from acl A1 to aces,
ace R1, and onwards. The server compares the c-txid value 8602
with the s-txid value in the data tree.  The server finds that the
values do not match (e.g., s-txid 7688 for ace R1 is not equal to
c-txid 8602), but finds that 8602 is a more recent txid than 7688
by looking in the server's Txid History, and therefore accepts the
transaction.</t>
          <t>Clients relying on the server's Txid History being long enough,
could see their changes rejected if some of the s-txid have
fallen out of the server's Txid History (e.g., if the txid 7688
happened so long ago that the it is no longer in the server's
Txid History).  Some servers may have a Txid History size of zero.
A client specifying a single c-txid value for a change like the one
above towards such a server would not be able to get the transaction
accepted.</t>
          <t>Choosing a Txid History size greater than zero in a server is an
optimization allowing clients to be less explicit, saving both on
communications and processing. Servers implementing a Txid Mechanism
using txid values with a natural order (e.g. strictly increasing
integers or timestamps) may be able to implement an infinite history
very easily. Other schemes might need to store recently used txids in
a database.</t>
          <t>It is RECOMMENDED that server implementors that implement Txid History
at all choose a Txid History size that is at least large enough to
hold twice as many txids as this type of server normally experiences
between the typical connection interval by clients, and not less than
100. In a server near the core of a network, the number of transactions
would often be high, but the connection interval by clients typically
short. Servers closer to the edge might see fewer transactions, but
also be visited by clients less often.</t>
        </section>
      </section>
      <section anchor="candidate-datastore-transactions">
        <name>Candidate Datastore Transactions</name>
        <t>When using the (or a) Candidate datastore, the txid validation
happens at commit time, rather than at individual edit-config or
edit-data operations.  Clients add their c-txid attributes to the
configuration payload the same way.  In case a client specifies
different c-txid values for the same element in successive edit-config
or edit-data operations, the c-txid value specified last MUST be used
by the server at commit time.</t>
        <figure>
          <name>Conditional transaction towards the Candidate datastore successfully executed.  As all the c-txid values specified by the client matched those on the server at the time of the commit, the transaction was successfully executed.  If a client issues a get-config towards the candidate datastore, the server may choose to return the special txid-unknown value (e.g., "!") or the s-txid value that would be used if the candidate was committed without further changes (when that s-txid value is known in advance by the server).</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (operation: merge)                |
       |     config (txid: 5152)                         |
       |       acls (txid: 5152)                         |
       |         acl A1 (txid: 4711)                     |
       |           type ipv4                             |
       |                                                 |
       |   <------------------------------------------   |
       |   ok                                            |
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (operation: merge)                |
       |     config                                      |
       |       acls                                      |
       |         acl A1                                  |
       |           aces (txid: 4711)                     |
       |             ace R1 (txid: 4711)                 |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok                                            |
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     config                                      |
       |       acls                                      |
       |         acl A1                                  |
       |           aces (txid: ?)                        |
       |                                                 |
       |   <------------------------------------------   |
       |     config                                      |
       |       acls                                      |
       |         acl A1                                  |
       |           aces (txid: 7688  or !)               |
       |             ace R1 (txid: 7688 or !)            |
       |               matches ipv4 protocol 6           |
       |               actions forwarding accept         |
       |             ace R2 (txid: 2219)                 |
       |               matches ipv4 dscp 21              |
       |               actions forwarding accept         |
       |                                                 |
       |   ------------------------------------------>   |
       |   commit (request new txid in response)         |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 7688)                               |
       v                                                 v
]]></artwork>
        </figure>
      </section>
      <section anchor="dependencies-within-transactions">
        <name>Dependencies within Transactions</name>
        <t>YANG modules that contain 'when' statements referencing remote
parts of the model will cause the s-txid to change even in parts of the
data tree that were not modified directly.</t>
        <t>Let's say there is an energy-example.yang module that defines a
mechanism for clients to request the server to measure the amount of
energy that is consumed by a given access control rule.  The
"energy-example" module augments the access control module as follows:</t>
        <sourcecode type="yang"><![CDATA[
module energy-example {
...

  container energy {
    leaf metering-enabled {
      type boolean;
      default false;
    }
  }

  augment /acl:acls/acl:acl {
    when /energy-example:energy/energy-example:metering-enabled;
    leaf energy-tracing {
      type boolean;
      default false;
    }
    leaf energy-consumption {
      config false;
      type uint64;
      units J;
    }
  }
}
]]></sourcecode>
        <t>This means there is a system wide switch leaf metering-enabled in
energy-example which disables all energy measurements in the system when
set to false, and that there is a boolean leaf energy-tracing that
controls whether energy measurement is happening for each acl rule
individually.</t>
        <t>In this example, we have an initial configuration like this:</t>
        <figure>
          <name>Initial configuration for the energy example.  Note the energy metering-enabled leaf at the top and energy-tracing leafs under each acl.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     energy (txid: ?)                            |
       |     acls (txid: ?)                              |
       |                                                 |
       |   <------------------------------------------   |
       |   data (txid: 7688)                             |
       |     energy metering-enabled true (txid: 4711)   |
       |     acls (txid: 7688)                           |
       |       acl A1 (txid: 7688)                       |
       |         energy-tracing false                    |
       |         aces (txid: 7688)                       |
       |           ace R1 (txid: 7688)                   |
       |             matches ipv4 protocol 6             |
       |             actions forwarding accept           |
       |       acl A2 (txid: 6614)                       |
       |         energy-tracing true                     |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
        <t>At this point, a client updates metering-enabled to false.  This causes
the when-expression on energy-tracing to turn false, removing the leaf
entirely.  This counts as a configuration change, and the s-txid must
be updated appropriately.</t>
        <figure>
          <name>Transaction changing a single leaf.  This leaf is the target of a when-statement, however, which means other leafs elsewhere may be indirectly modified by this change.  Such indirect changes will also result in s-txid changes.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   edit-config (request new txid in response)    |
       |     config                                      |
       |       energy metering-enabled false             |
       |                                                 |
       |   <------------------------------------------   |
       |   ok (txid: 9118)                               |
       v                                                 v
]]></artwork>
        </figure>
        <t>After the transaction above, the new configuration state has the
energy-tracing leafs removed.  Every such removal or (re)introduction
of a node counts as a configuration change from a txid perspective,
regardless of whether the change has any net configuration change
effect in the server.</t>
        <figure>
          <name>The txid for the energy subtree has changed since that was the target of the edit-config.  The txids of the ACLs have also changed since the energy-tracing leafs are now removed by the now false when-expression.  Both acl A1 and acl A2 have their txids updated, even though energy-tracing was already false for acl A1.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   get-config                                    |
       |     energy (txid: ?)                            |
       |     acls (txid: ?)                              |
       |                                                 |
       |   <------------------------------------------   |
       |   data (txid: 9118)                             |
       |     energy metering-enabled false (txid: 9118)  |
       |     acls (txid: 9118)                           |
       |       acl A1 (txid: 9118)                       |
       |         aces (txid: 7688)                       |
       |           ace R1 (txid: 7688)                   |
       |             matches ipv4 protocol 6             |
       |             actions forwarding accept           |
       |       acl A2 (txid: 9118)                       |
       |         aces (txid: 6614)                       |
       |           ace R7 (txid: 4711)                   |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |           ace R8 (txid: 5152)                   |
       |             matches udp source-port port 22     |
       |             actions forwarding accept           |
       |           ace R9 (txid: 6614)                   |
       |             matches tcp source-port port 830    |
       |             actions forwarding accept           |
       v                                                 v
]]></artwork>
        </figure>
      </section>
      <section anchor="other-netconf-operations">
        <name>Other NETCONF Operations</name>
        <dl>
          <dt><tt>&lt;discard-changes&gt;</tt>:</dt>
          <dd>
            <t>The <tt>&lt;discard-changes&gt;</tt> operation resets the candidate datastore to the
contents of the running datastore.  The server MUST ensure the
txid values in the candidate datastore get the same txid values
as in the running datastore when this operation runs.</t>
          </dd>
          <dt><tt>&lt;copy-config&gt;</tt>:</dt>
          <dd>
            <t>The <tt>&lt;copy-config&gt;</tt> operation can be used to copy contents between
datastores.  The server MUST ensure the txid values are retained
and changed as if the data being copied had been sent in through an
edit-config operation.</t>
          </dd>
          <dt><tt>&lt;delete-config&gt;</tt>:</dt>
          <dd>
            <t>The server MUST ensure the datastore txid value is changed, unless it
was already empty.</t>
          </dd>
          <dt><tt>&lt;commit&gt;</tt>:</dt>
          <dd>
            <t>At commit, with regards to the txid values, the server MUST
treat the contents of the candidate datastore as if any txid
value provided by the client when updating the candidate was provided
in a single edit-config towards the running datastore.  If the
transaction is rejected due to txid value mismatch,
an rpc-error as described in section
<xref target="conditional-transactions">Conditional Transactions</xref> MUST be sent.</t>
          </dd>
        </dl>
      </section>
      <section anchor="yang-push-subscriptions">
        <name>YANG-Push Subscriptions</name>
        <t>A client issuing a YANG-Push establish-subscription or
modify-subscription request or configuring a YANG-Push subscription
towards a server that supports
ietf-netconf-txid-yang-push.yang MAY request that the server
provides updated txid values in YANG-Push on-change subscription
updates.</t>
        <t>This functionality pertains only to on-change updates.  This RPC may
also be invoked over RESTCONF or other protocols, and might
therefore be encoded in JSON.</t>
        <t>To request txid values (e.g. etag), the client adds a flag in the
request (e.g., with-etag).  The server then returns the txid
(e.g., etag) value in the yang-patch payload (e.g., as etag-value).</t>
        <figure>
          <name>A client requests a YANG-Push subscription for a given path with txid value included.  When the server delivers a push-change-update notification, the txid value pertaining to the entire patch is included.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   rpc                                           |
       |     establish-subscription                      |
       |       datastore running                         |
       |       datastore-xpath-filter /acls              |
       |       on-change                                 |
       |       with-etag true                            |
       |                                                 |
       |   <------------------------------------------   |
       |   ok                                            |
       |                                                 |
       |   <------------------------------------------   |
       |   notification                                  |
       |     eventTime 2022-04-04T06:00:24.16Z           |
       |     push-change-update                          |
       |       id 89                                     |
       |       datastore-changes                         |
       |         yang-patch                              |
       |           patch-id 0                            |
       |           edit                                  |
       |             edit-id edit1                       |
       |             operation delete                    |
       |             target /acls/acl[A1]                |
       |           edit                                  |
       |             edit-id edit2                       |
       |             operation merge                     |
       |             target /acls/acl[A2]/ace[R7]        |
       |               value                             |
       |                 matches ipv4 dscp 10            |
       |                 actions forwarding accept       |
       |           etag-value 8008                       |
       |                                                 |
       v                                                 v
]]></artwork>
        </figure>
      </section>
      <section anchor="comparing-yang-datastores">
        <name>Comparing YANG Datastores</name>
        <t>A client issuing an NMDA Datastore compare request towards a server
that supports ietf-netconf-txid-nmda-compare.yang MAY request that
the server provides updated txid values in the compare reply.
Besides NETCONF, this RPC may also be invoked over RESTCONF or other
protocols, and might therefore be encoded in JSON.</t>
        <t>To request txid values (e.g. etag), the client adds a flag in the
request (e.g. with-etag).  The server then returns the txid
(e.g. etag) value in the yang-patch payload (e.g. as etag-value).</t>
        <t>The txid value returned by the server MUST be the txid value
pertaining to the target node in the source or target datastores
that is the most recent.  If one of the datastores being
compared is not a configuration datastore, the txid in the
configuration datastore MUST be used.  If none of the datastores
being compared are a configuration datastore, then txid values
MUST NOT be returned at all.</t>
        <t>The txid to return is the one that pertains to the target node, or
in the case of delete, the closest surviving ancestor of the target
node.</t>
        <figure>
          <name>A client requests a NMDA Datastore compare for a given path with txid values included. When the server delivers the reply, the txid is included for each edit.</name>
          <artwork type="call-flow"><![CDATA[
     Client                                            Server
       |                                                 |
       |   ------------------------------------------>   |
       |   rpc                                           |
       |     compare                                     |
       |       source ds:running                         |
       |       target ds:operational                     |
       |       with-etag true                            |
       |                                                 |
       |   <------------------------------------------   |
       |   differences                                   |
       |     yang-patch                                  |
       |       patch-id 0                                |
       |       edit                                      |
       |         edit-id edit1                           |
       |         operation delete                        |
       |         target /acls/acl[A1]                    |
       |         etag-value 8008                         |
       |       edit                                      |
       |         edit-id edit2                           |
       |         operation merge                         |
       |         target /acls/acl[A2]/ace[R7]            |
       |           value                                 |
       |             matches ipv4 dscp 10                |
       |             actions forwarding accept           |
       |         etag-value 8008                         |
       |                                                 |
       v                                                 v
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="txid-mechanisms">
      <name>Txid Mechanisms</name>
      <t>This document defines two txid mechanisms:</t>
      <ul spacing="normal">
        <li>
          <t>The etag attribute txid mechanism (<xref target="sec-etag"/>)</t>
        </li>
        <li>
          <t>The last-modified attribute txid mechanism (<xref target="sec-lm"/>)</t>
        </li>
      </ul>
      <t>Servers implementing this specification MUST support the etag
attribute txid mechanism and MAY support the last-modified
attribute txid mechanism.</t>
      <t>Section <xref target="netconf-txid-extension">NETCONF Txid Extension</xref> describes
the logic that governs all txid mechanisms.  This section describes
the mapping from the generic logic to specific mechanism and encoding.</t>
      <t>If a client uses more than one txid mechanism, such as both etag and
last-modified in a particular message to a server, or particular
commit, the result is undefined.</t>
      <section anchor="sec-etag">
        <name>The ETag Attribute txid Mechanism</name>
        <t>The etag txid mechanism described in this section is centered around
a meta data XML attribute called "etag".  The etag attribute is
defined in the namespace "urn:ietf:params:xml:ns:netconf:txid:1.0".
The etag attribute is added to XML elements in the NETCONF payload
in order to indicate the txid value for the YANG node represented by
the element.</t>
        <t>NETCONF servers that support this extension MUST announce the
capability "urn:ietf:params:netconf:capability:txid:etag:1.0".</t>
        <t>The etag attribute values are opaque strings chosen freely.  They MUST
consist of ASCII printable characters (VCHAR), except that the etag
string MUST NOT contain space, backslash or double quotes. The point of
these restrictions is to make it easy to reuse implementations that
adhere to section 8.8.3.1 in <xref target="RFC9110"/>.  The probability
SHOULD be made very low that an etag value that has been used
historically by a server is used again by that server if the
configuration is different.</t>
        <t>It is RECOMMENDED that the same etag txid values are used across all
management interfaces (i.e. NETCONF, RESTCONF and any other the server
might implement), if it implements more than one.  It is RECOMMENDED
that the etag txid has an encoding specific suffix, especially when it
is not encoded in XML.  E.g. a response encoded in JSON might append
"+json" at the end of the etag value. This is in line with the language
in <xref target="RFC9110"/> and traditions in the HTTP world at large.</t>
        <t>The detailed rules for when to update the etag value are described in
<xref target="sec-principles"/>.  These
rules are chosen to be consistent with the ETag mechanism in
RESTCONF, specifically Sections <xref target="RFC8040" section="3.4.1.2" sectionFormat="bare"/>, <xref target="RFC8040" section="3.4.1.3" sectionFormat="bare"/> and <xref target="RFC8040" section="3.5.2" sectionFormat="bare"/> of <xref target="RFC8040"/>.</t>
      </section>
      <section anchor="sec-lm">
        <name>The Last-Modified Attribute txid Mechanism</name>
        <t>The last-modified txid mechanism described in this section is
centered around a meta data XML attribute called "last-modified".
The last-modified attribute is defined in the namespace
"urn:ietf:params:xml:ns:netconf:txid:1.0".  The last-modified
attribute is added to XML elements in the NETCONF payload in
order to indicate the txid value for the YANG node represented by
the element.</t>
        <t>NETCONF servers that support this extension MUST announce the
feature last-modified defined in ietf-netconf-txid.yang.</t>
        <t>The last-modified attribute values are yang:date-and-time values as
defined in ietf-yang-types.yang, <xref target="RFC6991"/>.</t>
        <t>"2022-04-01T12:34:56.123456Z" is an example of what this time stamp
format looks like.  Servers MUST ensure the timestamps provided are
strictly increasing for as long as the server's operation is
maintained.</t>
        <t>It is RECOMMENDED that the same last-modified txid values are used
across all management interfaces (i.e. NETCONF and any other the
server might implement), except RESTCONF.</t>
        <t>RESTCONF, as defined in
<xref target="RFC8040"/>,
is using a different format for the time stamps which is
limited to one second resolution.  Server implementors that support
the Last-Modified txid mechanism over both RESTCONF and other
management protocols are RECOMMENDED to use Last-Modified timestamps
that match the point in time referenced over RESTCONF, with the
fractional seconds part added.</t>
        <t>The detailed rules for when to update the last-modified value are
described in <xref target="sec-principles"/>.  These rules
are chosen to be consistent with the Last-Modified mechanism in
RESTCONF, <xref target="RFC8040"/>,
specifically sections 3.4.1.1, 3.4.1.3 and 3.5.1.</t>
      </section>
      <section anchor="common-features-to-both-etag-and-last-modified-txid-mechanisms">
        <name>Common features to both etag and last-modified txid mechanisms</name>
        <t>Clients MAY add etag or last-modified attributes to zero or
more individual elements in the get-config or get-data filter, in
which case they pertain to the subtree(s) rooted at the element(s)
with the attributes.</t>
        <t>Clients MAY also add such attributes directly to the get-config or
get-data tags (e.g. if there is no filter), in which case it
pertains to the txid value of the datastore root.</t>
        <t>Clients might wish to send a txid value that is guaranteed to never
match a server constructed txid.  With both the etag and
last-modified txid mechanisms, such a txid-request value is "?".</t>
        <t>Clients MAY add etag or last-modified attributes to the payload
of edit-config or edit-data requests, in which case they indicate
the client's txid value of that element.</t>
        <t>Clients MAY request servers that also implement YANG-Push to return
configuration change subscription updates with etag or
last-modified txid attributes.  The client requests this service by
adding a with-etag or with-last-modified flag with the value 'true'
to the subscription request or yang-push configuration.  The server
MUST then return such txids on the YANG Patch edit tag and to the
child elements of the value tag.  The txid attribute on the edit tag
reflects the txid associated with the changes encoded in this edit
section, as well as parent nodes.  Later edit sections in the same
push-update or push-change-update may still supersede the txid value
for some or all of the nodes in the current edit section.</t>
        <t>Servers returning txid values in get-config, edit-config, get-data,
edit-data and commit operations MUST do so by adding etag and/or
last-modified txid attributes to the data and ok tags.  When
servers prune output due to a matching txid value, the server
MUST add a txid-match attribute to the pruned element, and MUST set
the attribute value to "=", and MUST NOT send any element value.</t>
        <t>Servers returning a txid mismatch error MUST return an rpc-error
as defined in section
<xref target="conditional-transactions">Conditional Transactions</xref> with an
error-info tag containing a txid-value-mismatch-error-info
structure.</t>
        <section anchor="candidate-datastore">
          <name>Candidate Datastore</name>
          <t>When servers return txid values in get-config and get-data operations
towards the candidate datastore, the txid values returned MUST adhere
to the following rules:</t>
          <ul spacing="normal">
            <li>
              <t>If the versioned node holds the same data as in the running
datastore, the same txid value as the versioned node in running
MUST be used.</t>
            </li>
            <li>
              <t>If the versioned node is different in the candidate store
than in the running datastore, the server has a choice of what
to return. The server MAY return the special "txid-unknown" value "!".
If the txid-unknown value is not returned, the server MUST return
the txid value the versioned node will have if the client decides to
commit the candidate datastore without further updates.</t>
            </li>
          </ul>
        </section>
        <section anchor="namespaces-and-attribute-placement">
          <name>Namespaces and Attribute Placement</name>
          <t>The txid attributes are valid on the following NETCONF tags,
where xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" <xref target="RFC4741"/> <xref target="RFC6241"/>,
xmlns:ncds="urn:ietf:params:xml:ns:yang:ietf-netconf-nmda" <xref target="RFC8526"/>,
xmlns:sn="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications" <xref target="RFC8639"/>,
xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push" <xref target="RFC8641"/> <xref target="RFC8072"/>:</t>
          <t>In client messages sent to a server:</t>
          <ul spacing="normal">
            <li>
              <t>/nc:rpc/nc:get-config</t>
            </li>
            <li>
              <t>/nc:rpc/nc:get-config/nc:filter//*</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:get-data</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:get-data/ncds:subtree-filter//*</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:get-data/ncds:xpath-filter//*</t>
            </li>
            <li>
              <t>/nc:rpc/nc:edit-config/nc:config</t>
            </li>
            <li>
              <t>/nc:rpc/nc:edit-config/nc:config//*</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:edit-data/ncds:config</t>
            </li>
            <li>
              <t>/nc:rpc/ncds:edit-data/ncds:config//*</t>
            </li>
          </ul>
          <t>In server messages sent to a client:</t>
          <ul spacing="normal">
            <li>
              <t>/nc:rpc-reply/nc:data</t>
            </li>
            <li>
              <t>/nc:rpc-reply/nc:data//*</t>
            </li>
            <li>
              <t>/nc:rpc-reply/ncds:data</t>
            </li>
            <li>
              <t>/nc:rpc-reply/ncds:data//*</t>
            </li>
            <li>
              <t>/nc:rpc-reply/nc:ok</t>
            </li>
            <li>
              <t>/yp:push-update/yp:datastore-contents/yp:yang-patch/
yp:edit</t>
            </li>
            <li>
              <t>/yp:push-update/yp:datastore-contents/yp:yang-patch/
yp:edit/yp:value//*</t>
            </li>
            <li>
              <t>/yp:push-change-update/yp:datastore-contents/yp:yang-patch/
yp:edit</t>
            </li>
            <li>
              <t>/yp:push-change-update/yp:datastore-contents/yp:yang-patch/
yp:edit/yp:value//*</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="txid-mechanism-examples">
      <name>Txid Mechanism Examples</name>
      <section anchor="initial-configuration-response">
        <name>Initial Configuration Response</name>
        <section anchor="with-etag">
          <name>With etag</name>
          <t>To retrieve etag attributes across the entire NETCONF server
configuration, a client might send:</t>
          <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config txid:etag="?">
    <source>
      <running/>
    </source>
  </get-config>
</rpc>
]]></sourcecode>
          <t>The server's reply might then be:</t>
          <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="1"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data txid:etag="fd6a52d9-5152-411c-a117-b99d3b723c93">
    <acls xmlns=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
          txid:etag="fd6a52d9-5152-411c-a117-b99d3b723c93">
      <acl txid:etag="2c4b50e4-4711-49f8-a2b2-2e20aebe120f">
        <name>A1</name>
        <aces txid:etag="2c4b50e4-4711-49f8-a2b2-2e20aebe120f">
          <ace txid:etag="2c4b50e4-4711-49f8-a2b2-2e20aebe120f">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      ...
    </acls>
    ...
  </data>
</rpc-reply>
]]></sourcecode>
          <t>It is up to the server implementor to decide on the format of the
etag txid value.  In the example above, the server used "random"
UUIDv4 values <xref target="RFC9562"/>.  This is one valid implementation choice.</t>
          <t>For the etag txid examples below, we have chosen to use an etag txid
value consisting of "nc" (or "cli" in some cases) followed by a
strictly increasing integer.  This is another valid implementation
choice.  This format is convenient for the reader trying to make
sense of the examples, but is not an implementation requirement.</t>
          <t>Clients have to be prepared to receive etag txid values in different
formats.</t>
          <t>Repeating the example above, but now with a server returning more
human readable etag txid values, the server's reply might be:</t>
          <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="1"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data txid:etag="nc5152">
    <acls xmlns=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
          txid:etag="nc5152">
      <acl txid:etag="nc4711">
        <name>A1</name>
        <aces txid:etag="nc4711">
          <ace txid:etag="nc4711">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      <acl txid:etag="nc5152">
        <name>A2</name>
        <aces txid:etag="nc5152">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R8</name>
            <matches>
              <udp>
                <source-port>
                  <port>22</port>
                </source-port>
              </udp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R9</name>
            <matches>
              <tcp>
                <source-port>
                  <port>22</port>
                </source-port>
              </tcp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
    <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"
          txid:etag="nc3072">
      <groups txid:etag="nc3072">
        <group txid:etag="nc3072">
          <name>admin</name>
          <user-name>sakura</user-name>
          <user-name>joe</user-name>
        </group>
      </groups>
    </nacm>
  </data>
</rpc-reply>
]]></sourcecode>
          <t>To retrieve etag attributes for a specific ACL using an xpath
filter, a client might send:</t>
          <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter type="xpath"
      xmlns:acl=
        "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      select="/acl:acls/acl:acl[acl:name='A1']"
      txid:etag="?"/>
  </get-config>
</rpc>
]]></sourcecode>
          <t>To retrieve etag attributes for "acls", but not for "nacm",
a client might send:</t>
          <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="3"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter>
      <acls
        xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
        txid:etag="?"/>
      <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"/>
    </filter>
  </get-config>
</rpc>
]]></sourcecode>
          <t>If the server considers "acls", "acl", "aces" and "acl" to be
Versioned Nodes, the server's response to the request above
might look like:</t>
          <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="3"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls xmlns=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
          txid:etag="nc5152">
      <acl txid:etag="nc4711">
        <name>A1</name>
        <aces txid:etag="nc4711">
          <ace txid:etag="nc4711">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      <acl txid:etag="nc5152">
        <name>A2</name>
        <aces txid:etag="nc5152">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R8</name>
            <matches>
              <udp>
                <source-port>
                  <port>22</port>
                </source-port>
              </udp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R9</name>
            <matches>
              <tcp>
                <source-port>
                  <port>22</port>
                </source-port>
              </tcp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
    <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm">
      <groups>
        <group>
          <name>admin</name>
          <user-name>sakura</user-name>
          <user-name>joe</user-name>
        </group>
      </groups>
    </nacm>
  </data>
</rpc-reply>
]]></sourcecode>
        </section>
        <section anchor="with-last-modified">
          <name>With last-modified</name>
          <t>To retrieve last-modified attributes for "acls", but not for "nacm",
a client might send:</t>
          <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter>
      <acls
        xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
        txid:last-modified="?"/>
      <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"/>
    </filter>
  </get-config>
</rpc>
]]></sourcecode>
          <t>If the server considers "acls", "acl", "aces" and "acl" to be
Versioned Nodes, the server's response to the request above
might look like:</t>
          <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="4"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:last-modified="2022-04-01T12:34:56.789012Z">
      <acl txid:last-modified="2022-03-20T16:20:11.333444Z">
        <name>A1</name>
        <aces txid:last-modified="2022-03-20T16:20:11.333444Z">
          <ace txid:last-modified="2022-03-20T16:20:11.333444Z">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      <acl txid:last-modified="2022-04-01T12:34:56.789012Z">
        <name>A2</name>
        <aces txid:last-modified="2022-04-01T12:34:56.789012Z">
          <ace txid:last-modified="2022-03-20T16:20:11.333444Z">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:last-modified="2022-04-01T12:34:56.789012Z">
            <name>R8</name>
            <matches>
              <udp>
                <source-port>
                  <port>22</port>
                </source-port>
              </udp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:last-modified="2022-04-01T12:34:56.789012Z">
            <name>R9</name>
            <matches>
              <tcp>
                <source-port>
                  <port>22</port>
                </source-port>
              </tcp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
    <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm">
      <groups>
        <group>
          <name>admin</name>
          <user-name>sakura</user-name>
          <user-name>joe</user-name>
        </group>
      </groups>
    </nacm>
  </data>
</rpc-reply>
]]></sourcecode>
        </section>
      </section>
      <section anchor="configuration-response-pruning">
        <name>Configuration Response Pruning</name>
        <t>A NETCONF client that already knows some txid values MAY request that
the configuration retrieval request is pruned with respect to the
client's prior knowledge.</t>
        <t>To retrieve only changes for "acls" that do not have the
last known etag txid value, a client might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter>
      <acls
        xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
        txid:etag="nc5152">
        <acl txid:etag="nc4711">
          <name>A1</name>
          <aces txid:etag="nc4711"/>
        </acl>
        <acl txid:etag="nc5152">
          <name>A2</name>
          <aces txid:etag="nc5152"/>
        </acl>
      </acls>
    </filter>
  </get-config>
</rpc>
]]></sourcecode>
        <t>Assuming the NETCONF server configuration is the same as
in the previous rpc-reply example, the server's response to request
above might look like:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="6"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="="/>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>Or, if a configuration change has taken place under /acls since the
client was last updated, the server's response may look like:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="6"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="nc6614">
      <acl txid:etag="=">
        <name>A1</name>
      </acl>
      <acl txid:etag="nc6614">
        <name>A2</name>
        <aces txid:etag="nc6614">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R8</name>
            <matches>
              <ipv4>
                <source-port>
                  <port>22</port>
                </source-port>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc6614">
            <name>R9</name>
            <matches>
              <ipv4>
                <source-port>
                  <port>830</port>
                </source-port>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>In case the client provides a txid value for a non-versioned node,
the server needs to treat the node as having the same txid value as
the closest ancestor that does have a txid value.</t>
        <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter>
      <acls
        xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list">
        <acl>
          <name>A2</name>
          <aces>
            <ace>
              <name>R7</name>
              <matches>
                <ipv4>
                  <dscp txid:etag="nc4711"/>
                </ipv4>
              </matches>
            </ace>
          </aces>
        </acl>
      </acls>
    </filter>
  </get-config>
</rpc>
]]></sourcecode>
        <t>If a txid value is specified for a leaf, and the txid value matches
(i.e. is identical to the server's txid value, or found earlier in
the server's Txid History), the leaf value is pruned.</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="7"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list">
      <acl>
        <name>A2</name>
        <aces>
          <ace>
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp txid:etag="="/>
              </ipv4>
            </matches>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="configuration-change">
        <name>Configuration Change</name>
        <t>A client that wishes to update the ace R1 protocol to tcp might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8">
  <edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
               xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0"
               xmlns:ietf-netconf-txid=
                "urn:ietf:params:xml:ns:yang:ietf-netconf-txid">
    <target>
      <running/>
    </target>
    <test-option>test-then-set</test-option>
    <ietf-netconf-txid:with-etag>true</ietf-netconf-txid:with-etag>
    <config>
      <acls
        xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
        txid:etag="nc5152">
        <acl txid:etag="nc4711">
          <name>A1</name>
          <aces txid:etag="nc4711">
            <ace txid:etag="nc4711">
              <matches>
                <ipv4>
                  <protocol>6</protocol>
                </ipv4>
              </matches>
              <actions>
                <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                  acl:accept
                </forwarding>
              </actions>
            </ace>
          </aces>
        </acl>
      </acls>
    </config>
  </edit-config>
</rpc>
]]></sourcecode>
        <t>The server would update the protocol leaf in the running datastore,
and return an rpc-reply as follows:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="8"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <ok txid:etag="nc7688"/>
</rpc-reply>
]]></sourcecode>
        <t>A subsequent get-config request for "acls", with txid:etag="?" might
then return:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="9"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="nc7688">
      <acl txid:etag="nc7688">
        <name>A1</name>
        <aces txid:etag="nc7688">
          <ace txid:etag="nc7688">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>6</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      <acl txid:etag="nc6614">
        <name>A2</name>
        <aces txid:etag="nc6614">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc5152">
            <name>R8</name>
            <matches>
              <udp>
                <source-port>
                  <port>22</port>
                </source-port>
              </udp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc6614">
            <name>R9</name>
            <matches>
              <tcp>
                <source-port>
                  <port>830</port>
                </source-port>
              </tcp>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>In case the server at this point received a configuration change from
another source, such as a CLI operator, removing ace R8 and R9 in
acl A2, a subsequent get-config request for acls, with txid:etag="?"
might then return:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="9"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="cli2222">
      <acl txid:etag="nc7688">
        <name>A1</name>
        <aces txid:etag="nc7688">
          <ace txid:etag="nc7688">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>6</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
      <acl txid:etag="cli2222">
        <name>A2</name>
        <aces txid:etag="cli2222">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="conditional-configuration-change">
        <name>Conditional Configuration Change</name>
        <t>If a client wishes to delete acl A1 if and only if its configuration
has not been altered since this client last synchronized its
configuration with the server, at which point it received the etag
"nc7688" for acl A1, regardless of any possible changes to other
acls, it might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"
     xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"
     xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0"
     xmlns:ietf-netconf-txid=
       "urn:ietf:params:xml:ns:yang:ietf-netconf-txid">
  <edit-config>
    <target>
      <running/>
    </target>
    <test-option>test-then-set</test-option>
    <ietf-netconf-txid:with-etag>true</ietf-netconf-txid:with-etag>
    <config>
      <acls xmlns=
          "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
        <acl nc:operation="delete"
             txid:etag="nc7688">
          <name>A1</name>
        </acl>
      </acls>
    </config>
  </edit-config>
</rpc>
]]></sourcecode>
        <t>If acl A1 now has the etag txid value "nc7688", as expected by the
client, the transaction goes through, and the server responds
something like:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="10"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <ok txid:etag="nc8008"/>
</rpc-reply>
]]></sourcecode>
        <t>A subsequent get-config request for acls, with txid:etag="?" might
then return:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="11"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="nc8008">
      <acl txid:etag="cli2222">
        <name>A2</name>
        <aces txid:etag="cli2222">
          <ace txid:etag="nc4711">
            <name>R7</name>
            <matches>
              <ipv4>
                <dscp>10</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>In case acl A1 did not have the expected etag txid value "nc7688"
when the server processed this request, nor was the client's txid
value found later in the server's Txid History, then the server
rejects the transaction, and might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:acl=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
           xmlns:ietf-netconf-txid=
             "urn:ietf:params:xml:ns:yang:ietf-netconf-txid"
           message-id="11">
  <rpc-error>
    <error-type>protocol</error-type>
    <error-tag>operation-failed</error-tag>
    <error-severity>error</error-severity>
    <error-info>
      <ietf-netconf-txid:txid-value-mismatch-error-info>
        <ietf-netconf-txid:mismatch-path>
          /acl:acls/acl:acl[acl:name="A1"]
        </ietf-netconf-txid:mismatch-path>
        <ietf-netconf-txid:mismatch-etag-value>
          cli6912
        </ietf-netconf-txid:mismatch-etag-value>
      </ietf-netconf-txid:txid-value-mismatch-error-info>
    </error-info>
  </rpc-error>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="reading-from-the-candidate-datastore">
        <name>Reading from the Candidate Datastore</name>
        <t>Let's assume that a get-config towards the running datastore
currently contains the following data and txid values:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="12"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"
      txid:etag="nc4711">
      <acl txid:etag="nc4711">
        <name>A1</name>
        <aces txid:etag="nc4711">
          <ace txid:etag="nc4711">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>17</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc2219">
            <name>R2</name>
            <matches>
              <ipv4>
                <dscp>21</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>A client issues discard-changes (to make the candidate datastore
equal to the running datastore), and issues an edit-config to
change the R1 protocol from udp (17) to tcp (6), and then executes a
get-config with the txid-request attribute "?" set on the acl A1,
the server might respond:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="13"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
           xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <data>
    <acls
      xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list">
      <acl txid:etag="!">
        <name>A1</name>
        <aces txid:etag="!">
          <ace txid:etag="!">
            <name>R1</name>
            <matches>
              <ipv4>
                <protocol>6</protocol>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
          <ace txid:etag="nc2219">
            <name>R2</name>
            <matches>
              <ipv4>
                <dscp>21</dscp>
              </ipv4>
            </matches>
            <actions>
              <forwarding xmlns:acl=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
                acl:accept
              </forwarding>
            </actions>
          </ace>
        </aces>
      </acl>
    </acls>
  </data>
</rpc-reply>
]]></sourcecode>
        <t>Here, the txid-unknown value "!" is sent by the server.  This
particular server implementation does not know beforehand which
txid value would be used for this versioned node after commit.
It will be a value different from the current corresponding
txid value in the running datastore.</t>
        <t>In case the server is able to predict the txid value that would
be used for the versioned node after commit, it could respond
with that value instead.  Let's say the server knows the txid
would be "7688" if the candidate datastore was committed without
further changes, then it would respond with that value in each
place where the example shows "!" above.</t>
      </section>
      <section anchor="commit">
        <name>Commit</name>
        <t>The client MAY request that the new etag txid value is returned as an
attribute on the ok response for a successful commit.  The client
requests this by adding with-etag to the commit operation.</t>
        <t>For example, a client might send:</t>
        <sourcecode type="xml"><![CDATA[
<rpc message-id="14"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
    xmlns:ietf-netconf-txid=
      "urn:ietf:params:xml:ns:yang:ietf-netconf-txid">
  <commit>
    <ietf-netconf-txid:with-etag>true</ietf-netconf-txid:with-etag>
  </commit>
</rpc>
]]></sourcecode>
        <t>Assuming the server accepted the transaction, it might respond:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply message-id="14"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
    xmlns:txid="urn:ietf:params:xml:ns:netconf:txid:1.0">
  <ok txid:etag="nc8008"/>
</rpc-reply>
]]></sourcecode>
      </section>
      <section anchor="yang-push">
        <name>YANG-Push</name>
        <t>A client MAY request that the updates for one or more YANG-Push
subscriptions are annotated with the txid values.  The request might
look like this:</t>
        <sourcecode type="xml"><![CDATA[
<netconf:rpc message-id="16"
             xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
  <establish-subscription
      xmlns=
        "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
      xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push"
      xmlns:ietf-netconf-txid-yp=
        "urn:ietf:params:xml:ns:yang:ietf-txid-yang-push">
    <yp:datastore
        xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
      ds:running
    </yp:datastore>
    <yp:datastore-xpath-filter
        xmlns:acl=
          "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
      /acl:acls
    </yp:datastore-xpath-filter>
    <yp:on-change/>
    <ietf-netconf-txid-yp:with-etag>
      true
    </ietf-netconf-txid-yp:with-etag>
  </establish-subscription>
</netconf:rpc>
]]></sourcecode>
        <t>A server might send a subscription update like this:</t>
        <sourcecode type="xml"><![CDATA[
<notification
  xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"
  xmlns:ietf-netconf-txid-yp=
    "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push">
  <eventTime>2022-04-04T06:00:24.16Z</eventTime>
  <push-change-update
      xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
    <id>89</id>
    <datastore-changes>
      <yang-patch>
        <patch-id>0</patch-id>
        <edit>
          <edit-id>edit1</edit-id>
          <operation>delete</operation>
          <target xmlns:acl=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
            /acl:acls
          </target>
          <value>
            <acl xmlns=
              "urn:ietf:params:xml:ns:yang:ietf-access-control-list">
              <name>A1</name>
            </acl>
          </value>
        </edit>
        <ietf-netconf-txid-yp:etag-value>
          nc8008
        </ietf-netconf-txid-yp:etag-value>
      </yang-patch>
    </datastore-changes>
  </push-change-update>
</notification>
]]></sourcecode>
        <t>In case a client wishes to modify a previous subscription request in
order to no longer receive YANG-Push subscription updates, the request
might look like this:</t>
        <sourcecode type="xml"><![CDATA[
<rpc message-id="17"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <modify-subscription
      xmlns=
        "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
      xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push"
      xmlns:ietf-netconf-txid-yp=
        "urn:ietf:params:xml:ns:yang:ietf-txid-yang-push">
    <id>1011</id>
    <yp:datastore
        xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
      ds:running
    </yp:datastore>
    <ietf-netconf-txid-yp:with-etag>
      false
    </ietf-netconf-txid-yp:with-etag>
  </modify-subscription>
</rpc>
]]></sourcecode>
      </section>
      <section anchor="nmda-compare">
        <name>NMDA Compare</name>
        <t>The following example is taken from section 5 of <xref target="RFC9144"/>.
It compares the difference between the operational and intended
datastores for a subtree under "interfaces".</t>
        <t>In this version of the example, the client requests that txid
values, in this case etag-values, are annotated to the result.</t>
        <sourcecode type="xml"><![CDATA[
<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <compare xmlns="urn:ietf:params:xml:ns:yang:ietf-nmda-compare"
      xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"
      xmlns:ietf-netconf-txid-nmda-compare=
        "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare">
    <source>ds:operational</source>
    <target>ds:intended</target>
    <report-origin/>
    <ietf-netconf-txid-nmda-compare:with-etag>
      true
    </ietf-netconf-txid-nmda-compare:with-etag>
    <xpath-filter
        xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces">
      /if:interfaces
    </xpath-filter>
  </compare>
</rpc>
]]></sourcecode>
        <t>RPC reply when a difference is detected:</t>
        <sourcecode type="xml"><![CDATA[
<rpc-reply
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
    message-id="101">
  <differences
    xmlns="urn:ietf:params:xml:ns:yang:ietf-nmda-compare"
    xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin"
    xmlns:ietf-netconf-txid-nmda-compare=
      "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare"
    xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces">
    <yang-patch>
      <patch-id>interface status</patch-id>
      <comment>
        diff between operational (source) and intended (target),
        with txid values taken from intended.
      </comment>
      <edit>
        <edit-id>1</edit-id>
        <operation>replace</operation>
        <target>/ietf-interfaces:interface=eth0/enabled</target>
        <value>
          <if:enabled>false</if:enabled>
        </value>
        <source-value>
          <if:enabled or:origin="or:learned">true</if:enabled>
        </source-value>
        <ietf-netconf-txid-nmda-compare:etag-value>
          4004
        </ietf-netconf-txid-nmda-compare:etag-value>
      </edit>
      <edit>
        <edit-id>2</edit-id>
        <operation>create</operation>
        <target>/ietf-interfaces:interface=eth0/description</target>
        <value>
          <if:description>ip interface</if:description>
        </value>
        <ietf-netconf-txid-nmda-compare:etag-value>
          8008
        </ietf-netconf-txid-nmda-compare:etag-value>
      </edit>
    </yang-patch>
  </differences>
</rpc-reply>
]]></sourcecode>
        <t>The same response in RESTCONF (using JSON format):</t>
        <sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 24 Jan 2019 20:56:30 GMT
Server: example-server
Content-Type: application/yang-data+json

{ "ietf-nmda-compare:output" : {
    "differences" : {
      "ietf-yang-patch:yang-patch" : {
        "patch-id" : "interface status",
        "comment" : "diff between intended (source) and operational",
        "edit" : [
          {
            "edit-id" : "1",
            "operation" : "replace",
            "target" : "/ietf-interfaces:interface=eth0/enabled",
            "value" : {
              "ietf-interfaces:interface/enabled" : "false"
            },
            "source-value" : {
              "ietf-interfaces:interface/enabled" : "true",
              "@ietf-interfaces:interface/enabled" : {
                "ietf-origin:origin" : "ietf-origin:learned"
              }
            },
            "ietf-netconf-txid-nmda-compare:etag-value": "4004"
          },
          {
            "edit-id" : "2",
            "operation" : "create",
            "target" : "/ietf-interfaces:interface=eth0/description",
            "value" : {
              "ietf-interface:interface/description" : "ip interface"
            },
            "ietf-netconf-txid-nmda-compare:etag-value": "8008"
          }
        ]
      }
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="yang-modules">
      <name>YANG Modules</name>
      <section anchor="base-module-for-txid-in-netconf">
        <name>Base module for txid in NETCONF</name>
        <sourcecode type="yang" markers="true" name="ietf-netconf-txid@2025-08-01.yang"><![CDATA[
module ietf-netconf-txid {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-txid";
  prefix ietf-netconf-txid;

  import ietf-netconf {
    prefix nc;
    reference
      "RFC 6241: Network Configuration Protocol (NETCONF)";
  }
  import ietf-netconf-nmda {
    prefix ncds;
    reference
      "RFC 8342: Network Management Datastore Architecture (NMDA)";
  }
  import ietf-yang-structure-ext {
    prefix sx;
    reference
      "RFC 8791: YANG Data Structure Extensions.";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/netconf/>
     WG List:  <netconf@ietf.org>

     Author:   Jan Lindblad
               <mailto:jan.lindblad+ietf@for.eco>";
  description
    "NETCONF Transaction ID aware operations for NMDA.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.

     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 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.
    ";

  revision 2025-08-01 {
    description
      "Initial revision";
    reference
      "RFC XXXX: Transaction ID Mechanism for NETCONF";
  }

  feature last-modified {
    description
      "Servers implementing this module MUST support the
       etag txid mechanism.  Servers MAY also support the
       last-modified txid mechanism.  Support is shown by announcing
       this feature.";
  }

  extension versioned-node {
    description
      "This statement is used by servers to declare that a
       the server is maintaining a Txid for the YANG node with this
       statement.  Which YANG nodes are versioned nodes may be useful
       information for clients (especially during development).

       Servers are not required to use this statement to declare
       which nodes are versioned nodes.

       Example of use:

       container interfaces {
       ietf-netconf-txid:versioned-node;
       ...
       }
      ";
  }

  typedef etag-t {
    type string {
      pattern '.* .*' {
        modifier "invert-match";
      }
      pattern '.*".*' {
        modifier "invert-match";
      }
      pattern '.*\.*' {
        modifier "invert-match";
      }
    }
    description
      "Unique Entity-tag txid value representing a specific
       transaction.  Could be any string that does not contain
       spaces, double quotes or backslash.

       The txid values '?', '!' and '=' have special meaning:

       '?' This txid value is used by clients and is
          guaranteed not to match any txid on the server.

       '!' This txid value used by servers to indicate
          the node in the candidate datastore has changed
          relative to the running datastore, but not yet received
          a new txid value on the server.

       '=' This txid value used by servers to indicate
          that contents has been pruned due to txid match
          between client and server.
      ";
  }

  typedef last-modified-t {
    type union {
      type yang:date-and-time;
      type enumeration {
        enum ? {
          description
            "Txid value used by clients that is
             guaranteed not to match any txid on the server.";
        }
        enum ! {
          description
            "Txid value used by servers to indicate
             the node in the candidate datastore has changed
             relative to the running datastore, but not yet received
             a new txid value on the server.";
        }
        enum = {
          description
            "Txid value used by servers to indicate
             that contents has been pruned due to txid match
             between client and server.";
        }
      }
    }
    description
      "Last-modified txid value representing a specific transaction.
       The txid values '?', '!' and '=' have special meaning.";
  }

  grouping txid-grouping {
    leaf with-etag {
      type boolean;
      description
        "Indicates whether the client requests the server to include
         a txid:etag txid attribute when the configuration has
         changed.";
    }
    leaf with-last-modified {
      if-feature "last-modified";
      type boolean;
      description
        "Indicates whether the client requests the server to include
         a txid:last-modified attribute when the configuration has
         changed.";
    }
    description
      "Grouping for txid mechanisms, to be augmented into
       RPCs that modify configuration data stores.";
  }

  grouping txid-value-grouping {
    leaf etag-value {
      type etag-t;
      description
        "Indicates server's txid value for a YANG node.";
    }
    leaf last-modified-value {
      if-feature "last-modified";
      type last-modified-t;
      description
        "Indicates server's txid value for a YANG node.";
    }
    description
      "Grouping for txid mechanisms, to be augmented into
       output of RPCs that return txid metadata for configuration
       data stores.";
  }

  augment "/nc:edit-config/nc:input" {
    uses txid-grouping;
    description
      "Injects the txid mechanisms into the
       edit-config operation";
  }

  augment "/nc:commit/nc:input" {
    uses txid-grouping;
    description
      "Injects the txid mechanisms into the
       commit operation";
  }

  augment "/ncds:edit-data/ncds:input" {
    uses txid-grouping;
    description
      "Injects the txid mechanisms into the
       edit-data operation";
  }

  sx:structure txid-value-mismatch-error-info {
    container txid-value-mismatch-error-info {
      description
        "This error is returned by a NETCONF server when a client
         sends a configuration change request, with the additional
         condition that the server aborts the transaction if the
         server's configuration has changed from what the client
         expects, and the configuration is found not to actually
         not match the client's expectation.";
      leaf mismatch-path {
        type instance-identifier;
        description
          "Indicates the YANG path to the element with a mismatching
           etag txid value.";
      }
      leaf mismatch-etag-value {
        type etag-t;
        description
          "Indicates server's txid value of the etag
           attribute for one mismatching element.";
      }
      leaf mismatch-last-modified-value {
        if-feature "last-modified";
        type last-modified-t;
        description
          "Indicates server's txid value of the last-modified
           attribute for one mismatching element.";
      }
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="additional-support-for-txid-in-yang-push">
        <name>Additional support for txid in YANG-Push</name>
        <sourcecode type="yang" markers="true" name="ietf-netconf-txid-yang-push@2025-08-01.yang"><![CDATA[
module ietf-netconf-txid-yang-push {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push";
  prefix ietf-netconf-txid-yp;

  import ietf-subscribed-notifications {
    prefix sn;
    reference
      "RFC 8639: Subscription to YANG Notifications";
  }
  import ietf-yang-push {
    prefix yp;
    reference
      "RFC 8641: Subscriptions to YANG Datastores";
  }
  import ietf-netconf-txid {
    prefix ietf-netconf-txid;
    reference
      "RFC XXXX: Transaction ID Mechanism for NETCONF";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/netconf/>
     WG List:  <netconf@ietf.org>

     Author:   Jan Lindblad
               <mailto:jan.lindblad+ietf@for.eco>";
  description
    "NETCONF Transaction ID aware operations for YANG Push.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.

     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 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.
    ";

  revision 2025-08-01 {
    description
      "Initial revision";
    reference
      "RFC XXXX: Transaction ID Mechanism for NETCONF";
  }

  augment "/sn:establish-subscription/sn:input" {
    description
      "This augmentation adds additional subscription parameters
       that apply specifically to datastore updates to RPC input.";
    uses ietf-netconf-txid:txid-grouping;
  }

  augment "/sn:modify-subscription/sn:input" {
    description
      "This augmentation adds additional subscription parameters
       specific to datastore updates.";
    uses ietf-netconf-txid:txid-grouping;
  }

  augment "/sn:subscriptions/sn:subscription" {
    description
      "This augmentation adds additional subscription parameters
       specific to datastore updates.";
    uses ietf-netconf-txid:txid-grouping;
  }

  augment "/yp:push-change-update/yp:datastore-changes/"
        + "yp:yang-patch" {
    description
      "This augmentation makes it possible for servers to return
       txid-values.";
    uses ietf-netconf-txid:txid-value-grouping;
  }
}
]]></sourcecode>
      </section>
      <section anchor="additional-support-for-txid-in-nmda-compare">
        <name>Additional support for txid in NMDA Compare</name>
        <sourcecode type="yang" markers="true" name="ietf-netconf-txid-nmda-compare@2025-08-01.yang"><![CDATA[
module ietf-netconf-txid-nmda-compare {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare";
  prefix ietf-netconf-txid-nmda-compare;

  import ietf-nmda-compare {
    prefix cmp;
    reference
      "RFC 9144: Comparison of Network Management Datastore
       Architecture (NMDA) Datastores";
  }
  import ietf-netconf-txid {
    prefix ietf-netconf-txid;
    reference
      "RFC XXXX: Transaction ID Mechanism for NETCONF";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/netconf/>
     WG List:  <netconf@ietf.org>

     Author:   Jan Lindblad
               <mailto:jan.lindblad+ietf@for.eco>";
  description
    "NETCONF Transaction ID aware operations for NMDA Compare.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.

     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 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.
    ";

  revision 2025-08-01 {
    description
      "Initial revision";
    reference
      "RFC XXXX: Transaction ID Mechanism for NETCONF";
  }

  augment "/cmp:compare/cmp:input" {
    description
      "This augmentation makes it possible for clients to request
       txids to be returned.";
    uses ietf-netconf-txid:txid-grouping;
  }

  augment "/cmp:compare/cmp:output/cmp:compare-response/"
        + "cmp:differences/cmp:differences/cmp:yang-patch/cmp:edit" {
    description
      "This augmentation makes it possible for servers to return
       txid-values.";
    container most-recent {
      description
        "The txid value returned by the server MUST be the
         txid value pertaining to the target node in the source or
         target datastores that is the most recent.";
      uses ietf-netconf-txid:txid-value-grouping;
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The YANG modules specified in this document define YANG types, groupings, structures and additional RPC parameters for data that is designed to be accessed via network management protocols such as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. The lowest NETCONF layer is the secure transport layer, and the mandatory-to-implement secure transport is Secure Shell (SSH) <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure transport is TLS <xref target="RFC8446"/>.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.</t>
      <t>In the YANG modules published with this document, there is no configuration, state data, new RPCs, or notifications.  This document defines additional XML attributes and headers, however, that merit consideration from a security perspective.</t>
      <section anchor="nacm-access-control">
        <name>NACM Access Control</name>
        <t>NACM, <xref target="RFC8341"/>, access control
processing happens as usual, independently of any txid handling, if
supported by the server and enabled by the NACM configuration.</t>
        <t>It should be pointed out however, that when txid information is added
to a reply, it may occasionally be possible for a client to deduce
that a configuration change has happened in some part of the
configuration to which it has no access rights.</t>
        <t>For example, a client may notice that the root node txid has changed
while none of the subtrees it has access to have changed, and thereby
conclude that someone else has made a change to some part of the
configuration that is not accessible by the client.</t>
        <section anchor="hash-based-txid-algorithms">
          <name>Hash-based Txid Algorithms</name>
          <t>Servers that implement NACM and choose to implement a hash-based txid
algorithm over the configuration may reveal to a client that the
configuration of a subtree that the client has no access to is the
same as it was at an earlier point in time.</t>
          <t>For example, a client with partial access to the configuration might
observe that the root node txid was 1234. After a few configuration
changes by other parties, the client may again observe that the root
node txid is 1234.  It may then deduce that the configuration is the
same as earlier, even in the parts of the configuration it has no
access to.</t>
          <t>In some use cases, this behavior may be considered a feature, since it
allows a security client to verify that the configuration is the same
as expected, without transmitting or storing the actual configuration.</t>
        </section>
      </section>
      <section anchor="unchanged-configuration">
        <name>Unchanged Configuration</name>
        <t>It will also be possible for clients to deduce that a configuration
change has not happened during some period, by simply observing that
the root node (or other subtree) txid remains unchanged.  This is
true regardless of NACM being deployed or choice of txid algorithm.</t>
        <t>Again, there may be use cases where this behavior may be considered a
feature, since it allows a security client to verify that the
configuration is the same as expected, without transmitting or storing
the actual configuration.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="netconf-capability-urn">
        <name>NETCONF Capability URN</name>
        <t>This document requests IANA to register the following capability identifier URN in
the 'Network Configuration Protocol (NETCONF) Capability URNs'
registry:</t>
        <t>RFC Ed.: replace XXXX with actual RFC number and remove this note.</t>
        <artwork><![CDATA[
Capability: :txid
Capability Identifier: urn:ietf:params:netconf:capability:txid:1.0
Reference: RFC XXXX
]]></artwork>
      </section>
      <section anchor="ietf-xml-registry">
        <name>IETF XML Registry</name>
        <t>This document request IANA to register four XML namespace URIs in the "ns"
subregistry within the "IETF XML Registry" <xref target="RFC3688"/>:</t>
        <artwork><![CDATA[
  URI: urn:ietf:params:xml:ns:netconf:txid:1.0
  Registrant Contact: The IESG.
  XML: N/A, the requested URIs are XML namespaces.

  URI: urn:ietf:params:xml:ns:yang:ietf-netconf-txid
  Registrant Contact: The IESG.
  XML: N/A, the requested URIs are XML namespaces.

  URI: urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push
  Registrant Contact: The IESG.
  XML: N/A, the requested URIs are XML namespaces.

  URI: urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare
  Registrant Contact: The IESG.
  XML: N/A, the requested URIs are XML namespaces.
]]></artwork>
      </section>
      <section anchor="yang-module-names">
        <name>YANG Module Names</name>
        <t>This document requests IANA to register three module names in the "YANG
Module Names" subregistry <xref target="RFC6020"/> within the "YANG Parameters"
registry.</t>
        <t>RFC Ed.: replace XXXX with actual RFC number in this document as well as in the following YANG modules, and remove this note:
ietf-netconf-txid-nmda-compare.yang:      "RFC XXXX: Transaction ID Mechanism for NETCONF";
ietf-netconf-txid-nmda-compare.yang:     This version of this YANG module is part of RFC XXXX
ietf-netconf-txid-nmda-compare.yang:     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
ietf-netconf-txid-nmda-compare.yang:      "RFC XXXX: Transaction ID Mechanism for NETCONF";
ietf-netconf-txid-yang-push.yang:      "RFC XXXX: Transaction ID Mechanism for NETCONF";
ietf-netconf-txid-yang-push.yang:     This version of this YANG module is part of RFC XXXX
ietf-netconf-txid-yang-push.yang:     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
ietf-netconf-txid-yang-push.yang:      "RFC XXXX: Transaction ID Mechanism for NETCONF";
ietf-netconf-txid.yang:     This version of this YANG module is part of RFC XXXX
ietf-netconf-txid.yang:     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
ietf-netconf-txid.yang:      "RFC XXXX: Transaction ID Mechanism for NETCONF";</t>
        <artwork><![CDATA[
  name: ietf-netconf-txid
  prefix: ietf-netconf-txid
  namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-txid
  maintained by IANA? N
  RFC: XXXX

  name: ietf-netconf-txid-yang-push
  prefix: ietf-netconf-txid-yp
  namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-txid-yang-push
  maintained by IANA? N
  RFC: XXXX

  name: ietf-netconf-txid-nmda-compare
  prefix: ietf-netconf-txid-nmda-compare
  namespace:
    urn:ietf:params:xml:ns:yang:ietf-netconf-txid-nmda-compare
  maintained by IANA? N
  RFC: XXXX
]]></artwork>
      </section>
    </section>
    <section anchor="changes-to-be-deleted-by-rfc-editor">
      <name>Changes (to be deleted by RFC Editor)</name>
      <section anchor="major-changes-in-10-since-09">
        <name>Major changes in -10 since -09</name>
        <t>Changes based on shepherd review.</t>
        <ul spacing="normal">
          <li>
            <t>Updated module revision dates, copyright year and author's
email address.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-09-since-08">
        <name>Major changes in -09 since -08</name>
        <t>Changes based on shepherd review.</t>
        <ul spacing="normal">
          <li>
            <t>Updated references to RFC 7232 (Etag, etc.) to the corresponding
sections of RFC 9110, which obsoletes RFC 7232. Added a normative
reference to RFC 9562 (UUIDs, etc.).</t>
          </li>
          <li>
            <t>Made sure all YANG imports have references to the corresponding
RFC document. Updated the copyright year to 2025 in a few modules.</t>
          </li>
          <li>
            <t>Broke out NETCONF example messages into separate files, and added
build logic to perform XML validation on them. Corrected a number of
example message errors.</t>
          </li>
          <li>
            <t>Changed some document IETF metadata values (abbrev, area, author's
affiliation).</t>
          </li>
          <li>
            <t>Corrected IANA registration parameters for
ietf-netconf-txid-yang-push</t>
          </li>
          <li>
            <t>Spelling and formatting updates.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-08-since-07">
        <name>Major changes in -08 since -07</name>
        <ul spacing="normal">
          <li>
            <t>Added brief motivation to why the server's set of Versioned Nodes
must not change unless the server at a discontinuity point
(software upgrades, etc.)</t>
          </li>
          <li>
            <t>Added a few lines to the beginning of chapter 3 to better describe
the contents later in that chapter.</t>
          </li>
          <li>
            <t>Added some guidance regarding the recommended Txid History size.</t>
          </li>
          <li>
            <t>Mention that examples are based on the RFC8519 YANG module for
Network Access Control Lists.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-07-since-06">
        <name>Major changes in -07 since -06</name>
        <ul spacing="normal">
          <li>
            <t>Changed "monotonically increasing" to "strictly increasing" in
multiple locations. Removed recommendation about timestamps in the
last-modified txid mechanism being similar to wall clock time.</t>
          </li>
          <li>
            <t>Removed two clumsily formulated sentences stating that clients MUST NOT infer temporal order from txid values.  The remaining wording states that some servers use sequences of txid values that may appear random to outside observers.</t>
          </li>
          <li>
            <t>Added brief explanation that entitlements are sometimes also
known as "licenses".</t>
          </li>
          <li>
            <t>Added introductory section on "How to Read this Document"</t>
          </li>
          <li>
            <t>Added an example to highlight that the etag txid values can have different formats, and do not need to consist of strictly increasing integers, as in most of the examples.</t>
          </li>
          <li>
            <t>Changed WG URLs in YANG modules to new datatracker format, e.g. https://datatracker.ietf.org/wg/netconf/</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-06-since-05">
        <name>Major changes in -06 since -05</name>
        <ul spacing="normal">
          <li>
            <t>Many language, style, spelling and formatting improvements thanks
to reviews by Reshad Rahman and Med Boucadair</t>
          </li>
          <li>
            <t>Clarified Txid History Size Consideration example</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-05-since-04">
        <name>Major changes in -05 since -04</name>
        <ul spacing="normal">
          <li>
            <t>Corrected namespace for reference to elements in ietf-yang-push</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-04-since-03">
        <name>Major changes in -04 since -03</name>
        <ul spacing="normal">
          <li>
            <t>Updated security considerations.</t>
          </li>
          <li>
            <t>Added several normative RFC references.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-03-since-02">
        <name>Major changes in -03 since -02</name>
        <ul spacing="normal">
          <li>
            <t>Updated language slightly regarding format of etag values, and some
recommendations for implementors that support etags in multiple management
protocols (NETCONF, RESTCONF, ...) and encodings (XML, JSON, ...).</t>
          </li>
          <li>
            <t>Added missing normative RFC references.</t>
          </li>
          <li>
            <t>Corrected the YANG-push namespace reference.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-02-since-01">
        <name>Major changes in -02 since -01</name>
        <ul spacing="normal">
          <li>
            <t>Added optional to implement Txid History concept in order to make
the algorithm both more efficient and less verbose.  Servers may
still choose a Txid History size of zero, which makes the server
behavior the same as in earlier versions of this document.
Implementations that use txids consisting of a monotonically
increasing integer or timestamp will be able to determine the sequence
of transactions in the history directly, making this trivially simple
to implement.</t>
          </li>
          <li>
            <t>Added extension statement versioned-node, which servers may use to
declare which YANG tree nodes are Versioned Nodes.  This is entirely
optional, however, but possibly useful to client developers.</t>
          </li>
          <li>
            <t>Renamed YANG feature ietf-netconf-txid:txid-last-modified to
ietf-netconf-txid:last-modified in order to reduce redundant mentions
of "txid".</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-01-since-00">
        <name>Major changes in -01 since -00</name>
        <ul spacing="normal">
          <li>
            <t>Changed YANG-push txid mechanism to use a simple leaf rather than
an attribute to convey txid information.  This is preferable since
YANG-push content may be requested using other protocols than NETCONF
and other encodings than XML.  By removing the need for XML
attributes in this context, the mechanism becomes significantly
more portable.</t>
          </li>
          <li>
            <t>Added a section and YANG module augmenting the RFC9144 NMDA
datastore compare operation to allow request and reply with txid
information.  This too is done with augments of plain leafs for
maximum portability.</t>
          </li>
          <li>
            <t>Added note clarifying that the txid attributes used in the XML
encoding are never used in JSON (since RESTCONF uses HTTP headers
instead).</t>
          </li>
          <li>
            <t>Added note clarifying that pruning happens when client and server
txids <em>match</em>, since the server sending information to the client
only makes sense when the information on the client is out of date.</t>
          </li>
          <li>
            <t>Added note clarifying that this entire document is about config
true data only.</t>
          </li>
          <li>
            <t>Rephrased slightly when referring to the candidate datastore to
keep making sense in the event that private candidate datastores
become a reality in the future.</t>
          </li>
          <li>
            <t>Added a note early on to more clearly lay out the structure of this
document, with a first part about the generic mechanism part, and a
second part about the two specific txid mechanisms.</t>
          </li>
          <li>
            <t>Corrected acl data model examples to conform to their YANG module.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-draft-ietf-netconf-transaction-id-00-since-02">
        <name>Major changes in draft-ietf-netconf-transaction-id-00 since -02</name>
        <ul spacing="normal">
          <li>
            <t>Changed the logic around how txids are handled in the candidate
datastore, both when reading (get-config, get-data) and writing
(edit-config, edit-data). Introduced a special "txid-unknown"
value "!".</t>
          </li>
          <li>
            <t>Changed the logic of copy-config to be similar to edit-config.</t>
          </li>
          <li>
            <t>Clarified how txid values interact with when-dependencies
together with default values.</t>
          </li>
          <li>
            <t>Added content to security considerations.</t>
          </li>
          <li>
            <t>Added a high-level example for YANG-Push subscriptions with txid.</t>
          </li>
          <li>
            <t>Updated language about error-info sent at txid mismatch in an
edit-config: error-info with mismatch details MUST be sent when
mismatch detected, and that the server can choose one of the txid
mismatch occurrences if there is more than one.</t>
          </li>
          <li>
            <t>Some rewording and minor additions for clarification, based
on mailing list feedback.</t>
          </li>
          <li>
            <t>Divided RFC references into normative and informative.</t>
          </li>
          <li>
            <t>Corrected a logic error in the second figure (figure 6) in the
"Conditional Transactions" section</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-02-since-01-1">
        <name>Major changes in -02 since -01</name>
        <ul spacing="normal">
          <li>
            <t>A last-modified txid mechanism has been added (back).  This
mechanism aligns well with the Last-Modified mechanism defined in
RESTCONF <xref target="RFC8040"/>,
but is not a carbon copy.</t>
          </li>
          <li>
            <t>YANG-Push functionality has been added.  This allows YANG-Push
users to receive txid updates as part of the configuration updates.
This functionality comes in a separate YANG module, to allow
implementors to cleanly keep all this functionality out.</t>
          </li>
          <li>
            <t>Changed name of "versioned elements". They are now called
"Versioned Nodes".</t>
          </li>
          <li>
            <t>Clarified txid behavior for transactions toward the Candidate
datastore, and some not so common situations, such
as when a client specifies a txid for a non-versioned node, and
when there are when-statement dependencies across subtrees.</t>
          </li>
          <li>
            <t>Examples provided for the abstract mechanism level with simple
message flow diagrams.</t>
          </li>
          <li>
            <t>More examples on protocol level, and with ietf-interfaces as
example target module replaced with ietf-access-control to reduce
confusion.</t>
          </li>
          <li>
            <t>Explicit list of XPaths to clearly state where etag or
last-modified attributes may be added by clients and servers.</t>
          </li>
          <li>
            <t>Document introduction restructured to remove duplication between
sections and to allow multiple (etag and last-modified) txid
mechanisms.</t>
          </li>
          <li>
            <t>Moved the actual YANG module code into proper module files that
are included in the source document.  These modules can be compiled
as proper modules without any extraction tools.</t>
          </li>
        </ul>
      </section>
      <section anchor="major-changes-in-01-since-00-1">
        <name>Major changes in -01 since -00</name>
        <ul spacing="normal">
          <li>
            <t>Updated the text on numerous points in order to answer questions
that appeared on the mailing list.</t>
          </li>
          <li>
            <t>Changed the document structure into a general transaction id part
and one etag specific part.</t>
          </li>
          <li>
            <t>Renamed entag attribute to etag, prefix to txid, namespace to
urn:ietf:params:xml:ns:yang:ietf-netconf-txid.</t>
          </li>
          <li>
            <t>Set capability string to
urn:ietf:params:netconf:capability:txid:1.0</t>
          </li>
          <li>
            <t>Changed YANG module name, namespace and prefix to match names above.</t>
          </li>
          <li>
            <t>Harmonized/slightly adjusted etag value space with RFC 7232 and
RFC 8040.</t>
          </li>
          <li>
            <t>Removed all text discussing etag values provided by the client
(although this is still an interesting idea, if you ask the author)</t>
          </li>
          <li>
            <t>Clarified the etag attribute mechanism, especially when it comes to
matching against non-versioned elements, its cascading upwards in the
tree and secondary effects from when- and choice-statements.</t>
          </li>
          <li>
            <t>Added a mechanism for returning the server assigned etag value in
get-config and get-data.</t>
          </li>
          <li>
            <t>Added section describing how the NETCONF discard-changes,
copy-config, delete-config and commit operations work with respect to
etags.</t>
          </li>
          <li>
            <t>Added IANA Considerations section.</t>
          </li>
          <li>
            <t>Removed all comments about open questions.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4741">
          <front>
            <title>NETCONF Configuration Protocol</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <date month="December" year="2006"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized on top of a simple Remote Procedure Call (RPC) layer. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4741"/>
          <seriesInfo name="DOI" value="10.17487/RFC4741"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8072">
          <front>
            <title>YANG Patch Media Type</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This document describes a method for applying patches to configuration datastores using data defined with the YANG data modeling language.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8072"/>
          <seriesInfo name="DOI" value="10.17487/RFC8072"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8526">
          <front>
            <title>NETCONF Extensions to Support the Network Management Datastore Architecture</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document extends the Network Configuration Protocol (NETCONF) defined in RFC 6241 in order to support the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
              <t>This document updates RFCs 6241 and 7950. The update to RFC 6241 adds new and operations and augments existing,, and operations. The update to RFC 7950 requires the usage of the YANG library (described in RFC 8525) by NETCONF servers implementing the NMDA.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8526"/>
          <seriesInfo name="DOI" value="10.17487/RFC8526"/>
        </reference>
        <reference anchor="RFC8639">
          <front>
            <title>Subscription to YANG Notifications</title>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="A. Gonzalez Prieto" initials="A." surname="Gonzalez Prieto"/>
            <author fullname="E. Nilsen-Nygaard" initials="E." surname="Nilsen-Nygaard"/>
            <author fullname="A. Tripathy" initials="A." surname="Tripathy"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document defines a YANG data model and associated mechanisms enabling subscriber-specific subscriptions to a publisher's event streams. Applying these elements allows a subscriber to request and receive a continuous, customized feed of publisher-generated information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8639"/>
          <seriesInfo name="DOI" value="10.17487/RFC8639"/>
        </reference>
        <reference anchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore. Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </reference>
        <reference anchor="RFC8791">
          <front>
            <title>YANG Data Structure Extensions</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Björklund" initials="M." surname="Björklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document describes YANG mechanisms for defining abstract data structures with YANG.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8791"/>
          <seriesInfo name="DOI" value="10.17487/RFC8791"/>
        </reference>
        <reference anchor="RFC9144">
          <front>
            <title>Comparison of Network Management Datastore Architecture (NMDA) Datastores</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="Y. Qu" initials="Y." surname="Qu"/>
            <author fullname="J. Tantsura" initials="J." surname="Tantsura"/>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This document defines a Remote Procedure Call (RPC) operation to compare management datastores that comply with the Network Management Datastore Architecture (NMDA).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9144"/>
          <seriesInfo name="DOI" value="10.17487/RFC9144"/>
        </reference>
        <reference anchor="RFC9562">
          <front>
            <title>Universally Unique IDentifiers (UUIDs)</title>
            <author fullname="K. Davis" initials="K." surname="Davis"/>
            <author fullname="B. Peabody" initials="B." surname="Peabody"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9562"/>
          <seriesInfo name="DOI" value="10.17487/RFC9562"/>
        </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 anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC7952">
          <front>
            <title>Defining and Using Metadata with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines a YANG extension that allows for defining metadata annotations in YANG modules. The document also specifies XML and JSON encoding of annotations and other rules for annotating instances of YANG data nodes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7952"/>
          <seriesInfo name="DOI" value="10.17487/RFC7952"/>
        </reference>
        <reference anchor="RFC8519">
          <front>
            <title>YANG Data Model for Network Access Control Lists (ACLs)</title>
            <author fullname="M. Jethanandani" initials="M." surname="Jethanandani"/>
            <author fullname="S. Agarwal" initials="S." surname="Agarwal"/>
            <author fullname="L. Huang" initials="L." surname="Huang"/>
            <author fullname="D. Blair" initials="D." surname="Blair"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document defines a data model for Access Control Lists (ACLs). An ACL is a user-ordered set of rules used to configure the forwarding behavior in a device. Each rule is used to find a match on a packet and define actions that will be performed on the packet.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8519"/>
          <seriesInfo name="DOI" value="10.17487/RFC8519"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
      </references>
    </references>
    <?line 3440?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author wishes to thank Benoît Claise for making this work happen,
and the following individuals, who all provided helpful comments
and reviews:
Per Andersson, James Cumming, Kent Watsen, Andy Bierman, Robert Wilton,
Qiufang Ma, Jason Sterne, Robert Varga, Reshad Rahman, Med Boucadair
and Bing Liu.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAJOJjGgAA+296XrbVpYo+n8/BYr5YamapCVZlm3FdrUiOxXX8dS2UkPn
5rsFEaCEmATYACiZ5XY/y3mC+xD3vNhZ4x4AkKIkO3G5pK8qlkhgD2uvveZh
MBiYqo7z5P+NJ0We7kd1OU9NNivpt6re2dp6sLVj6qyewJe9ozLOq3hUZ0Ue
PXsSvUhHp3GeVdNoXJTRy6dHh69eft8z8fFxmZ7B4/JJdPQ+S3pmFNfpSVEu
9qOqTkw1P55mVQUj1YsZjP3s6dH3Ji7TeD8qZpU5L8p3J2Uxn+3ruMYkxSiP
p/BsUsbjepCl9XiQp/WoyMeD2q1skCWD7S1jJnF+sh+luXmXLmC4ZN9E0SB6
ltdpCW8NnuAgxswy/rwuRvRvVZR1mY4r/mMxpd9NXpTTuM7OUnz4zfeHu/d2
t+XXvR3/1x399cED/fTeg7tb8uv9rV336z199v4dO8L93d09/fXujv11784D
+6t79p6d4sH27q7+encPxjVZPm4s+c7e/fu6uK2dLbc4u4y72w/seNvwgInn
9WlRMnyyvNqP/jSMnmd5cjyJE/gwivg4/hTn4cdFeQJo8Y8YT2M/OphMou8B
P56OCvo2ncbZZD/6Jc6HE3nr3/As/x1WPEzhITMYDKL4uIIzHcEJKRaNJlma
11UE2BpVaXmWllVUjOs0j/I0TeAAo9P4LI1iOLV8dFoWsAL4+CxLz+ExU5+m
8tatKkKUyU7mJa0wSuIaXqqLMq2GUXQED54Vk/k0hdfCJw09meU4Bw0VTeNF
dAzPp+UimsTlSdqPzk+zSeqNGeEdOUmrCPA8G8WTyQLRPKqm8Cs8DMsvjmm0
JIprfUg2G8GS7GZ4sRni71k8qYbGvEnhviRZfhLh7uD5rAxmRkjFeTxZ/EOf
gfFmRV6ldGFlYSarYNR0PM5GNCd+1ZiVwAKPwQ0EuOS1qWbpKBtnsKtY72eU
voezwAsNM8FOYHvFedV5anUBdzKdhQd1ntWnMNp0Pjpl4AB4aS/pe14oDYFP
FXMYPV8YOnZarR1XNm6xHxYTH+PzuHlZypARbJolySQ15hskCWWRzIl4GPMX
PBK3KzmIDx/kqn/8CGuoTlOaLcuzOgOyBs/ngGYhWnkkycjmdFBecB8+GZfp
f81hgskiKkajeVniSc3hgEYx/AdAjvuDxRtZB0w6hksT4Z6yMW8rmPU0ruRg
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
Op7nIwY1purPOIdY+hfBAbtB9D3RvN+8PiRVWUPks/yseIdldnC/b56+ZcqO
7eiJ1KtsKYkDFHpvXG4T9tLNR4U0kv3T21cvcX2ei9rbJGeLYJ7+ZlBvLk4I
5F7VTZvXLDEMeH8pwX8zJHQ1Xia/0xHdP3mJng9Tzfi4KHdMg+DlYcB2V0Bg
82tTYOFWX3XWaNmVW+fVyO8eL7RqzVm9VwfvsSzEYJxN0O5yux3q13rVIf8l
9xo5VFvuZ1n26vo//9whuNdYcF7UtvX3pReMomt9hFFZO1s7O4OtXfjf0dbe
/tbW/s7ucHvvP5e/iiRaUEIKj609axRh0uiDi1fb9arDYbUxrv1q5FOry82K
P/TeAJbe0ncvfBWljdUzLn1VTPQwLf67LKR2yatO+mXB8RKvinK2qnLMZ97r
sqY2F+6Vki8u82p7rzs/w7/pT2/u/XzBq5Gww1U/K6jERdaUFa9epOt3H44r
6XN/a+v+5Rd80c8ntC4cuI4jUu5+mZQp6cgUe2eo4JHrjaPSymgyT8gXoC2T
bWO0dJJRWmRsOmiaT15bXXNERFS3JPkh0PnIpIKrA8i8ouwfUlY/vkDRlzY/
slNIz6OXL54ceEmUUhPAiYIN4doEwnXUFq7zaRIPZJRu+dqvBniRfC1hvLKk
GTpHv0srekPMGX1W4EVAjtYTkE2XgBz9ugLyVeTjy4jHben4KEQt199w0VSl
qaxS8LRpIaKSNL/3DNsSKXCZv3TGDqPBrBzLa3tjs/LrlUB0r7A5w8j5J7Zt
YMOn1ZXJKwBf8mCQmsoLyDtXYNSgIiugHgcrpw861hrbhOnYAzenofvn4aLD
BT64GIKX1RDbMMeqo8ZaxLg9JbNgRUNulFXNy7PsjG+7tMySfYoLN/8KWy9e
S3dSgnOFVyO9Akm1f2ndSe9MtW8FjbizAOA/uQKkienrdQZsLHhd+brj1XXl
685X15M5O19dT75e8uo68vWSV9eRr5cteC0h7nOCaVW/yZVgWi6aL3l1HdF8
yavriOZLX/0tHJ1XPtf1fz6zeL5EXr1IPPfk5OXiOctoM634zJKEe9OlHiCC
srzdqMFTiZ03KUZzSl3QxKD6XMz3Nj8Ikw24ax7RbVv/o/FYtPHhAxa/xIc+
ftzUd7DCxsCGSl308mRKr3aWESLxWTLuxMZDYovI+Oz4hMnN0klQgqbi1N4b
wfqWvkqd39jd8ZO6JwmgT7FTFnpLf974JlAvUv1i0zo6pPN6cZKNWGg6QaE/
l+TCEOZqTxe/SGOMaTybUTi8VjM/QWcrDCuDFxZOjd2TsoCVmqQfo4anVlqU
k+rFkFQXrKcv1asqLgTFiJAnJjxdcip5HUynaVXFJ6nfnYxK0HsVZtWHRv4m
CYvjDvGIjgk7cxCPnh7BlAfh8VhslrqrhHosrrKIER5/4HCqfeiiGzClbmAo
OmMdfBNjsBAXd4r++uK5h7koe8JzPZyiJxpR42ZkWDqWNqAKRx4DMGYYC9HD
TpSoju4DGGK4Xe+nk/282hfs2ac4ie3hVm9oOkdGfY3dtrgsKYtjdVBFTtGw
UO7mYlpYDitP8OI0NSYbsUBqOGlJQFvQZ55zcSNCOddWTKcIWl66K0UJTYL7
fEHjPAeQSjveUTyLjzPyKrUgoSBwzzA0EAYCki6YeL7nYhb/Fxb4qdGuYPvm
jstUg6DTBbtgqatCRQEXB28Pnz3DLp15TYXDAF1K4Fq4tY0/H/5w8AbU5fQ9
sSzrdSM6w7O4BraaMkrn3I+O49G7Ci7IKaJ8Usxx7P+aF+Qsw11QjLh0VqwI
+6nSGXHLjBQp6tiIlZfjasG6F6aTWqIoNdjIVBEnXMG4sDh9f3h/eGe4jYhB
Vf4fbG9vffwo+Dori2MBsXn7w6sfnz9BzW8aw9lTeCjX4I2pcBpB20vqtaWj
qV4SV1Pj4lqc9ukqzlF8AXXiZNXdK4XW1bMh8zq/Li+mZoMn3BX3EICnHJVF
RWTVTOMcKJBUjoIzHXO0GPUFtYYZa3ahGBdslmwDVcWYJE2rFPKbVLEw8z5p
kE9uWxUu3wTYE9ly15S1y2TZke1qPh5n7wHxJAUbyzejNJDVRitPOrsPEAIM
7CVbig1SbxqGxHZE6YmJ6f3bL1WR9zTPAYtOa+yRPe6hLRCdYephnrqKzxNQ
buYAWBNiF6cPlDG76S1R+uHo6DVWF52QTYFK1clN5ircsMiSMq+REnGsSyGG
tsaSIm4Q4ei4YbkBb+8IO0pUiuIV9gqeCFa4/tncuBevPhdHl/0Qd3GcAsZV
nOg7kQMP4cMHkQOq6M5wd7g93OnLL3do83eGd4c7CErsq7G1izfOsrDnyCxf
KLO8gJeBJMQgClnsJViaabC06GKWFswlDGiZAIe3dQmPM+vzuKgtJJorczs8
ty+L243TmPqshED04NayS5Mpeth19J0MD5/ep8bCgH0DKiqh3wYyCM1DJglM
4a5olj5f3b0H2P4FpuxZx+f20fbO/p3d/bt7w+2dO7t39/6zp/UFJBXbNtem
WpI4LdXgxF6yU7zjRfGuonTlYWRrLbYCx2zlThfOFGMZjnbFT1abgvryrqCs
U6kB6adxxln+yRospONuNXiJcbwkWoOXtDmI9lhvcxCRKZTQwHIdzYn9y2W4
Sw9Rk74hvspxRq5wooDddgiwB1JJagtAZpJNM+l1iwI+EIqCuiNUxWSu7RiW
FSoVhKe7EZKxBkEiNwbpCAFTZWeGB0Dr1yBIBydUIOCbs1hUYS7KFZprK0Uh
PcA9a22OpkOl7xp8j8tYIpsEBBXpI0xoLsWWQuyx/MkERHk5f+LBzVr8KYTG
EkYVoEnAtaqQZ223eda2NiCfTtGHyGSLSwL7Ct9KblS5ktOoZWPlUHoPoLeE
ktEEVKuYQuzKNKhT2iD2Xp4MjIh/ESfjwJ0+goJRnXwMNUr64pRQn4SEYmM7
MGzmzB4Oj9rDF66WuFvjsLEtdNzh3lgjdluxiWEyXbBeY9cLEFFfHEvBXIEi
L2QnKFvmkbcVEPla3hXHzpquINqat2SmO9gFxusu4r2v3i4Q58oYqBoTiDwl
qZdumZXoETGpc5icPDqQEVyEIVZOa5sFGliitgSuKqSuRhuP2/tDrwnxNRGJ
yIHovQCWsM6tVxtWjXRNQBPOqNhgnIcUWEwT4AAzJyL4a9XtBOICdxu3tZ6d
49760xqaUEeApk0hJgwVcHQB2kNcFq6apkkRE8uzjAomgerIVlnPNyNNcgbh
8OQhtheEoXEL3Ti3jLthneGxNpC11QDIuZPZB+n5lBlNJPEhdzLba8JKst8r
VdIIfuo0YOmGXA3B89hPpfCEKRlaxzNBixd+tqqKURZrjSp2WkrAladksTAI
wxght8TGqZ1CTDwGT4HaIMBCnlOtdprUEmf1TYNkwuEXwmvQYtaOxsAggqrG
nFJgzoBqadJyhSPf4gL9JQkwAhBagw1amJe0MH8pQ2eB5aNolmuHdx1164et
npXQ9b3K0pQJwOXrXGFmlgeTAkv8o+GA0VBpyO2LsFtvvJ2geEe0VcJajN7A
WTlHj/m8ns1rjU+XPprhtvw4fUZGJDxCpoQUOp1NyA0OblGOYzTYKJ2ysNQQ
2vG93qOe9yAajpgqg9SoRa5Z/e46hThsmSgdrYJelV6YvQnkyGsG2XON/tw0
+kt6bSMFVrT6gWudZp83tvGk9AbtqI4uBdGrYOfLkY8AaXmrQy6zVv07f1gb
9iBHTx2s5JhtZ0+W2cghIg1Lz2zjWNIlse5+5RQMRs5mZo9pLKORC6QKTmPo
LLfvB2EhyxfjG9TaOUkMbrJYLUs8ClJXTjkD/LRAviH6n6sXGDRsYU7YKiPY
8+sI9mSzvd8Bv3/m+n806gyKtUtPp90fVxhoQyzqgAbl31PqmhYiZMaYwOKo
5W9htNZ7N85ohcJIKxS6nAlE5pdq/uC2GM6+83oCH+K99iJpPDqGCgAV9FdW
5LBNtUqka33DhQjeTydoSRk9usjIgj0pyMjCisHuvV1Q80Xl38Hf+0bHSqql
o5GBIbBSYOCcjHn/7s6eG6fK1xhFRATQjgZ+PGGlI+7deeBGXMzWGNEKF3YI
t9H7W/d2Pn7cp1prWpuTnVIVZ5t5rim61bfz0T6QT/zHEZmlX+BfLLXfvv37
8Kmk2leytPQL/kvUksHFA/Fffr5C6+l9jxfjn50b6Hyma2LLwfnPrsGWPUXD
PVNC3gV1Pg8f6gPyaeMfDbCFX4Qrtd/B1Mtek6+WvLhfvKOPF7N9T+zCP70A
e0nUw09dZM9tE0XwAQl91x4BvyDipcvU0QK57zrLus5A4eqa4QTRU7YLVmRF
0IpMh4FSoy3AmVr+RdUYiVcFcpieNV17lbpy2EdB8cShQTZUnLyKS9rFJU+k
ViLQDYONu5mAXoJ6CuoOsuRRb7vHQSNMnpCSXziQtXU/hlcf+hV61bX5CFTe
xzTuQw7KeyyRKQ+FId+Wb2+7rx/ediM9Ng9vw8Yea9VNzzRKKO6ihjHrtwGO
gTzSscnIbXV9cLVevQqU2FDi4DNO9uK7O8mDAdY7GOxub48G8fb2vcHxgwfJ
neN7O3dGD+4oCCmBixftr2Wp390xEi41O5BCn4NJVtX+dq62Hl6R//LOaPf4
7la6O8BqE4PdB+P7g3jneGewk+5sxelxur2zNbYvw+voVnl8sP3wNv3iPidJ
4+rj8gjXGkAX96a1OPpOosbCT+FzjCJrfggfq0n48fa9h7ftH82Xb7fffni7
c6aHorm0hvBC0RhD4YAeNR66Gra0d8XFf9HQ39qIW0ZzOx0Lxw/9w8c/7QP4
l4UUFju2H8oj/NnD23ivhFrwvReawX6S+cxaSlt+APyGBWUnpZLLQSpXN5zx
3PCJqLbfQjKQ3slV3wMVMymmPfPjj8+enO2qMsY+5bt7O2IuZzc0ui1YUg5j
IEQpATn8ey2+YZcj81fcWNjV2HUmd/Q2aJiDl2EvZnhqnDiOevmoR725esBf
eqRMo2GF2i1visQuda87/VfSsc5vupyzj6hrQ0Y2JE8LqLnA9lmaZ+Lykaip
mDye5UJSHjBqxMDeKmscVhhwuzTNTsibUESDXVY2rZpc7IM8EzPAGUovIK1v
lGZnHVEYABqrdIo7EDWkN+ksdVUJGliBy8I6JNIG0Hb5VqsHugbM6XyKtg3Y
LoXpNCf2cavB+f45mV4+Qu7ya7K1YMY248pHyBiuwppab7aZT8cjN+zlC2Qv
baQIcMYixc4aSNF483JIce9TIAXGsj/e3gLOiL/cIIP9MF19LK2Ts8dy/1LH
Mk9aULdaEFX6an+LVxm/2AEM635C9aTOAR7ebs15c6YXnOmDS51p3b5Jn/1M
W3P+C57pUqLtawJwoqPpBeJN2+QL7ywVGe5s3fNEhpOymM+qFU/oMysfUcyL
k2mWt5HvIYjs5YA+reJ38zKGS20/6X7ulyLtfOjhbVqNgxpvQAGH0Hq8UnVa
ZbziXB8b03tw+FxDt/KIrLhGg1c+s9lq59OZrS5rqMK7xaV1MPDwUY/2rcjU
cdWuJc9WKbruH/VazXd+wn/x5B/dOti+9bM+H5jgbl9gV7vgoHs4X091GdbP
eog/vb75zMd75ws4Xl8+rOxprktoVuoo7VO6HiWz23ArX37s4pn0QqCyBB3T
etz4L/+TVj1y/NEnrDGbP1sX5EsMumjpqBKqL2YXjZghrVhyDjCSlgJpL1Zh
73wRKuyNvnqjr34xos+Nvvqvhww3+mpjhH+5M73RV+nnCz/Tz6yvNlTSpv75
T6ls2sCJMGEu0E2WRsj/xkrK7r+AkhLA/kZbWamt7H5p2opZZyVrYUMXLnTl
Vt67/2Bre+c/OxSYzpfvDHa2jrb39ne29re3h3fu3Nnd3f3Py6k3VxrXZ75X
HOBGNfriuOyF6LYaV9dSnK407qdEtxulq7mbX0FAv+Kp36hk4UP/Qid+o7DR
zxd+4jcK2xUUtiVB8NFrUFcwlcsc2Ih2Ub8kZZjbD2EqVMWxhn6QXWep6jCH
WBTCeGIfzCrNV5SORdSp0ybPaq7zrMxAK8SJJ2nClXo89ZI6wGj2q1MpedVJ
QVql9gejBM6Is7ka4Xqf3eW59y+gbi6zaF/kB1muKkRLfSG3QzowWTVd206+
RFTsnI7eXjZdQGrWUokPqmo+1bjTMHmkcWMyL3EzrrRk9axMz7JiXkVOjZXo
1RX6sVw5Q7pxdGndeO8r1435qB+py30Z9XxVUp21JW2Hqd9x/C7NoxkmWEbc
jp0b+NhWiEYbo2HxIKRGtlVh99lhVv3NQbUoDLbtXOpnfXShDeICj1ww+lqK
5ZI3oxuP3JcoOHYdy6fyyC05ls+rDdycqu4uveA+XlHFu86p3r+zdXOsn1XL
W5FIlttSSire2845QdkpDo3Mi3wQVmno+0138jSVjqq2YSpVcogpK0llunb1
DKndxG1FbDMR0VBSbZ3sp6t9QsXj3lepeITi/iVk+9bFSVuXZgU3Xk4ilhIJ
4cmrVRj7aMedX37rW/TvdrjDa2oqVJHdQ2RX7l5K+sfUyZuLBzXqnciCDVej
xAzDBPPlR6D+BzmdQS0zKsY+ptqwaVzCdS2xil7wMKX5/0A1nhfSNgrX4FbI
FoXhhZLyva9QUvav2Zria/N+fF7BtEPbChF6TY73KVlEyyR2SOqc1/SNCDVW
LOQiX17FTZQ33mzb4qGE2rDLz2NBus9o45cRvAbaWly7JOp2j9EqG9wUMtYR
M/z3Nc2Ue8ws5TX+1w9r4KuDgor9PabfscLEoEpreM77ih9uzbhvyw0+xhqC
gIsrnuAxfK74dVjV2tzxwoeuxhKtl3xvucf8kuxwuRj8KwvCK0ThVcLwEnH4
enzeoejD2x7lWFaiJTov5pPEJ3GWthGbXVqYzcRUu9mv+Mc8N66kGkF1sfXq
/m/Ok7Fmo4/v9/bu30c+1WYbB1RcFM2qwCG8Kjrq3PCj22xLJZs14jrLa3XR
i6Hz4DeHzq9j2yOYLzfOBV8vp3EdFK7xZhd9az0SfZ5AoRVU70btd3+um0Jx
Y7D9upGh61huUii+vjP9VObaa0TkXN1aexOSc01N3DfWijiqHV24q4bUeEqW
eWCx/aDROlZ8Vq5RYBwdPn8mFZmLsg+DTQvu7oxK/H0yYr15gAYnZC8HOxgR
crGIh7vqEvCMV+PwRsDzYTOaZDvwcyPh3dCKtSW8Js5cQsRrv3oj4/1zocP6
RlzbQ6DboOt3mHXmXOkOTkR/m8J7sHcDRhVSS8UqZDUGo3wwppA6TsYTbmin
4T1YEZHHp9ieapGPTssiz/6B/Q7qqtFVxTbv0Fa0aGam9i/SRMrjeFpE0igJ
U+4Di0ZedgJgn8DhYYlF7NwwK6oqk+6hFBqJXbao6RVzrOyzVSTeCvyNl6kL
7793FaP0RaboK1igHwY2M8LGfzaLdLvoxafwuEZYply7Wzzq8SVqOAcuYM3L
2Po1jZl4y/kuYwXPU+ld0Qj3jXRF1BMnfY+Bx1wu1cXoSUsO13MkOkFnfQ03
en5y6ryetjoohuwllcHg6Jp6uawXs7fdIbz9xmZPbHF/dbPnMpn4KkbP7S+j
Durnt3oSyG/kH/vZjfxzFdVZKF+SJUHig6Nwy+ig4X6SjpyB8oLAINEjq/R+
92HYkoKXW+3ojAZSzaktY03BG9HS4I0+68Zei6sy/cX1OXNUlwntUmFFaMa1
CUMLYa5dGGpN1/glpRL/5QahJBSxvbYEebjbFda6e6z6KDBP92HwFMgRlqkP
xtRy1D5sZQz+u8KOjFm9eEx/6lP2U/9RbLVl8botw+B/lvfo8i5I+1X7PBbx
8+/WioJ7vYPt3s/erVt71FXz47XiPfirgPux92B7Z73J2kN0Pb4OsPQw9BMm
F4IUnbrTmzQm2okGNLp/nY3Qnqd412PMX5E+nbEvAvgdzloOYiN9/TBZixu0
VY3eUrZvnpdXtoZ8sPMvIh8EHPqmspx89i8nJXQdz87O9oPu4+kIgr2i8Laz
fSO8fS7hzQYaZkBaqXFzNYKFDNR0syFNNJb1ATQgm7m42hbp3WQJSgbHziJe
BCE2GWTnCb7rxzISL5gns2hj+96mRjZu7G1axRcGep+OuCuW8fiANWsRr7JV
eWz7QdQEq7TWvi1iw/Lj7FnYE4V6DR7wxRUa/QQ8YBmp/91VqPzvVhL43934
Q74EGnJD2r/IY7kWaf8h9Vv7NlrJwsWjnAok/Wx5FAIofZYMwKPORvNJXLY6
YLEHgbKHUNHHYaPjFPaZniJ5JjeC8fR8juuUFr3SqwnmbrSkjcc1ZaFj19kh
duGiHrXHmJzEw7j2vVZV0Ibdo6IUio1lJPy0kSUxo8NOjz92okK/BTCcWQmc
alQ3U0s4HB/3Y8L9tDrs+tshl8eIoCDLNMKo4toutKpBEcJu6KTpVLF/KFL6
QhdjLER77I/RJr5dfXrjSlahPduLeW20a6+weTGIZLI3XWXUXmWUxnC4nGTO
PXj9FlbVKS4TcYuS/YfiHMPZOdJXhI1myQ5OZ0vPWyaizOtFjXEUuWk1qy/e
uYx1aTIwpzs7nk8UnbjZPU9uZOKKsdB1W7f+DJVmml3apaearXiwRtWOQFSQ
Kn9XkREuMOdcxbvEu/tU/h90kPB4S+tNaFgNkUlxKwa2NusXXF/6ujZIP6vD
ApD/bwcv/zh4Pa9OPVG7E/ulfzahMPb2g3+w05s3gHSLJrcdd8qOc6C/sd7r
Zhd3wXqdiR0gtp4DYb8PYd1sC233Gq41ca7y4+sDnV2aVQ0UNqtOB/5uApHV
TnaN/tn+gJdtnB2828L6AYx2iRXyK3ZsuW1+t2ETgnWt7uP25cqKIkm1L0xO
5AN/jo5pB37n7MYaGnLS9WQkaw3tWFewCLfIIhf18/Yy6gSn0HQ/RxHSKZnk
4hce3u5GRbzG3k1wnkdfO0RKLxF6+p6mrXRfLQ85zbrUyn9JqdZFSHk5PtBA
zIfpGVCnowwEe1u0bvdoa29/a2t/Z3e4vfefADT7CL7QbqR9SeWzdTOy5PH9
B3B+ifztNeVmScXKwq4xtycu099AtR5jHK3+7r5G40MgbZM1Ah7Bf7fFr++/
gdReuf9jjjN4eNt94j/HsRef1qETKgzhTZJpb4chIfRZyxcgmnwrGONTrWy5
NYDX2MySv91YIUN+lbcD72+3n4P5rzfUmu8CJWpgEGtSLWwDTGqhOVEJ7342
PaHtSC8qCAmipiuhFVAPW5YuN0VJLWyxelw0KWDO0vaXtbJAF+mREtVabatR
Z6tFk1ps/t6VRCmCEG/uX5qlA9XY3tre9kjXb8Tk1+OV43hSXYZZdpxwKOmD
qPvyxZMDVPawLTJre87BpgpipmXKSIWvUo5tuouRg9zment39+NHUv9HPBJr
var7g9Z5nNbnqXjvLSmOJ2xnzmtgzWliHPCsTnhcl6kWRuvhg+WYKr+zKcC3
SDRaRff9Ci6e8oiCu409wLBGGYVIgCM48E0oq9uS8dV8UjerrYTBWdtXv5MC
vvWrj06TeCAvhRfmsth6wW3zJ7rMvVs6iF5Bqf0Cl8RDi0ZJGOGW8IyiSiNq
EtS3oqwHRZmdZPly+dOf/5KS6KpXH66QyrPlupYDkofXVgDPxvvuY1lWU/Am
9R1XFN7qN68PpXk4hejE/j0ETE9AHsLInk5F/cqKefMKsJPDTlytMfAqtGZo
FuUaLzMWrLTAdKLzdZDZXPfEOyRjJxfbpyPQfup51RaTyS4ElM7JWAh6S3V9
irvBV2szIL3RBt+nzb4dwEZjasVejwXoa0MrljXmbwjtVmTvEtc9YR1RELbZ
Ka0rFbjdAKC7Jo/S+nTrdpqjNThpy9htCfshXDJ5/DHx1oe3vU886bQp+UpW
36oBo6LcZ0x81INfJ2mM5tCe2uU6p+ke9iJC1i1h725t7a6Ury8YI5Tul53n
zurzHGHVs+sdZ5Ja2WXdI/VeeZzNIjsggd3/csUJXwnmF+o0l4B5U9MBPccR
0842vlpIztrVQbR58/Qtlwve4La9f3r76iXKVtO43hT6f1rXM/PD0dHr29vD
7Whnayt69b/MEzi2/ejodN6PdnajP8U5fLH9AP6zf3dv/85W9McXR+YtGVf2
VeAaSFDmYYHEoR4cLWYwRDybTUQb4A2hyPFvv1Sga5gPINE1qf1+Ma9n87oX
7Ucf2Djibdt9GsmrDkb77lf/MXhQaSV+3GuS0p4jeD2hYfRcQD4dlfRpp0dU
/VHwCHGInzzE+OD9Lo/ogra9d+lLOyx9LRSx+RBfBHpiTXrYHIEQL4SUD9iu
8exQOC3Ry9DG/LExhU/OrjETUszG6uHdf1/r5eaUOilTZiHQjBjex0qsGy9/
XLnbtW97D2ZD6uwPHwy2Alt2VmML09trIItHHa+KMN5B+KMRjD1ivBp1LgVM
cuX4wLS/a9Quf4L//Wg+iupLdpnoRZHMJyCdoir8HaqAU/qA/cMo/AARlZLr
RC7/J0I6Y+Sp1jIJOESJVCsFovotfIYGtmqGdOeSXj98eVam4+x9e7ZvDXyZ
TVH3Cb6UI5LX8tG39Cf8xXRUKSho7tHezu72fvQSCF1RvmtkQb7WwK4NgcAm
reZj96R0Qs2Zk2rF3Pfv7O64uV/EOegPSIBdBHF0UI5OM1RX5vDHBtoqutdA
IK+AUtCTg/R9Ha6ker9qHfceAAwIHXDm6K2OEz19D4Qfj7EaLp8Wg+KrcDr8
fBXQH+CE6GEHKLt5kWNWMg/8pyhP4jz7R2wNc71nT4++tw0ANjoPbTP6C3yG
rP6P2OiDRqPw6RHHuPT+8sfoL+nxPvz6EDl/tX+bDKh1GY/epeUQtzWEmW+f
n6hHRYsuwpvPs6reR7sxf/Pv+vRjw48czOtTEHbhNxQZnmd5cjyJkyYNfjiN
QYUt9n+J8+FEnvk3HOrf4dYN01HxmJbtUQ9euu78yEuwe/Ykis/RYmIJIduO
EFWGsqrDYrYoybC6MdoEGWbnbkSQPCrnVF2XndrwfoVvc9lRbj0pRvuYtlWp
hWlUJOkQNjuZRDQsFd9H4SfRGd8Aza444gEXiVPMWSBjnkifHGd5XC5IGtPk
t0LMBxLwwfZnEZ/6VKs0LSUmZDYvq3mMtSYLjq+s5se/cDMUHoMKnWajlPo5
wGuVhtFjZnHO5rE36VmG0TDfvX0Cp8XPVqlEQ8HCYEmw5rdi8NsdjhQEDn63
quh5egJ65Wuskkx3RWEwgXXnFJdBjz8pRnO83vL9hqJfjcOkqUM9WTVlI2wq
SI9apj74m+6O0mKATgwXE77DO/ZX+GlMdH5+PizHowEyVEA0nAqnuA2f4dOb
38LeJaoVBsjqKp2MLSii8XyCJe1wq2jjBubplpZG79JFBLcxqaJbL358e3Sr
z/9GL1/R72+e/sePz948fYK/v/3h4Plz+wsPIY+9/eHVj8+fuN/c64evXrx4
+vIJjwCfRsFHPMitFwd/u8XIcOvV66Nnr14ePL9lDZyJgJ/smtQtk5kxkKza
w3W+dceEJNF3h6+j7d1oA+Gxs739YJN/vb99b3eTjEt9l/tOf1rUW6DkD2IU
jhID4EbxLKtjzPKMKwo4yiOMQ2IDQo8YGbpY6HTxhg627g+2toWqNikBksI8
qzPqDMQv9VaQWzzc/SbVeJGibyirpkwumLQ44jsGQQo5QNiLdulyWBeqXLQd
h88A2AU7CRmq+Yx4B2YMCy10oVNTXRCQFh0OY04AaEXXm+HK2kPIG5mCG0Om
8ryY5yP1RNBJwfey16Hbfap8z8XHDSg+bikA6HqiSsUcHP6gMDuYtJK9UOGE
0YSwjzKB3Br8UD7gDUSlqM4O5/9prB7ddlqGBM5k1qlqZ4ad/4UKItiHOegm
jPOrqEsKxwLCvdZRkBqgaowbx0nZe1BFG9RnCtAN0DyZlxSTmJ6lk2KGU1oS
5c4NZ8QgS/Q7ZCV7D+aV1HtwUHIg0QG4mMPSZbuZnoprBqgdDLxvP1caXzpJ
u3ISezscLDzfb/XB4VBNe1aadtiBAk+SjtlbooIWfhghzwPg6HygecMa8ujW
8PfR8Pe3PM1B8JZ8OrAEQGRS3HX+j+0Betcd4P+5wgAfl6H7j3n2X3OQD+Gi
14tBI/wRdHYUCJgIxFoBfWTx3RGiIQonEhSKNTgEfq7OPyKRHKlFddQigI4m
xRyjXv9rXmAAGmDrMUhwFVCFU4clR2FsWXTrD8g+fneLecSjW5zuK8gN5CPG
a+eQCR5nvhvGdurN1uvBuSKelHcyB80G0C/lnGJKRqmxphZskYYq/DRet1xc
WXO+DjICIiPKRKk3o22sIKHDXTG1WNiB4wF8ibQkMeUsXZoM41qNL1JXXsUb
IaYYWG/Jy3b36Oq7ixkNCNy4D6olI63wkjkvnjgAwtl7Uy1Y4gclOVGWJZjc
utUBXwmv9zxHyqh3iD4irRUBPYCxB3U2tTSEvk5zkDlEnXR3Dz+N/hAYEtp3
TNZ31AaW4h2BJUC8y+OevfC+2YDW97srr2/1YV4LW6NPgbDRhTi7HCqPPidU
rorl0SpE79jLBcT9eVuyWknYA4p+LdLriWDUp5OYAVq/7F8Mfaqs7SLfgxt5
XBTwda677joikJ75ACqU2imloDtYwgpmdGijyTzxzix2AdW8Uxfkb0tDhOWr
TmPvsgpy6/l8bGysS/AGAWY8UMm8FzzR+/a3hEG42E8Ahw6s/KOigDVNWnEf
g8hIoYvnJyhYkvKmdgDQxF8fCrGUeLZwNZRGz1EgS/GP6wd0YaEzxYZoyMLh
mifQ0dlFIoCsGN+BJyGnCtewJqI0mN3nWu4nPU72kJGdwx6s1NGXceqYzpRU
mKAUnYzQfeIyW9S7nY/2vYxf/DPLySnH0AWKXoVk6dvlarpXoSXcJO0pUIW9
JGPn1uheHqet/Fora6YUdS8qqRhqCF3+81eDGh1ox/Kq9/vWKO5f5I5CILJK
pz+u9fiSq0JiLj0c5IKhCaLZwFZClCTLy1JFDNavllXttaWFbAINJoOxK9Yj
rFre0aXraDLTcVG2ywZJPp6/BrnmLeqtRJujYc51+OYmuIZS5Qq/hQOh6YVq
H4mgCsuYo43BDYBfsPgaFE/icTm7zdIzIolBIRpPVCNih9mK2EtuYE3cpZON
ukU5j+hZCwwNLcJnytYuPojYTu9ZmAgOoYLs1vyxc+0dLKWTqayx6C5KrXGi
WBvTW6Tj2prM5e1GN3rR0lexpHWY0mq2dL0NB4Nee+eeM/V/zId9cWyga2Qw
jct3IOk/Ys+98b7hckotK9S/O4vvEBXK3kfyxx7YS23tn75b1kvSu9gx62K/
L3bR0v6unJSzymE7WMxaPttlsfMNB2a+yoG5d+fBfvTWzy6A+0mX9WUQjr/U
h2kB41yYs5UTotf4bZDaqDM+cTHFq7zF1lu+yr29dAFXMenf+FOv4U+lo8XL
duNUvXGqRjdO1Run6hUosNOWqny/O5MXvwnUpmW+RhmLJWkQ/ytPBwgT7Yh/
w3GU1ujC/scZZkioDY98e+iPswZYTe2HDzGhghalQhDpcm1nWku7a++6IyXr
V9mys1V27PH62wqqHDQ/+Gfd12K2304iDVPhJeP0tgs//LeoB0/4wciX2DzW
bKuwooYtxo/3yLOcsypt8diq6GttNTTiffsJBXgnRF5NlA+TENeQ5v1o0M8j
0AfpPStlev/JdkRmc6F2oNF0lYSNKZX7ApKsYu68KlJSUaIjYPJGIv8qJXL/
ztwI5TdCeXQjlN8I5dcSyoEj7Qurot8vL5R2yy82XqOwdS48AaaSI1IvwTWF
tuYm2FvmfzzQBLlQasMnvFyz211/O7GO/uRUr19VvnP+mWlR1QOM7sg1Rmep
MyYNgxicN8bzidAdPk5DD4j3GtBjDcsU27/UzvEDWYTmF6U3BD/llXaQsB16
ATcR8SacgflyMuynNUUHAlunMItMYo4dC1AsqYCHClPmDEyPTleqnDCFCUlT
AgJWLo9TAknfetzhV+u04+A6Tx1CVdRpQYQ+5PxToAIGZCc5R5yiB3kkLTnO
Mgz5YXFq6uRHLbBb2aaXKoL8BPQEk4N+xtBCm0aKn97f2t36eUi8YFKcY/0b
fWcSLziIl/FqRF5HJEYkbNK3zhcGq0iwr+ZiUBcDGzfdfg2Ge8ufvT1Ngb5u
vH37w6YubydciF2nXQkmtr690qRHz9/ydnd3934e8ul250kdEJDxQyy1hCll
KeZMHRy+4HXev4NgnKHUkIgjDeN95MKj9ATCDJ8UHahXxFUh658BXA8mFlSW
SF2KacJ9lkgsQD4Un4EMSoVRuwaxRbs9qRKBJPFXWl6lgdCzOVlsXOlCD6VJ
zipJOsmL0NPZ55hnwtQ+RZ5h5EIfFxS4PKSKbfOWBPaAv7547hxWvObTNIZb
COMBs02pLR4Hu2BfEVyIu6Tsr435vPEKoyiMvtRMy57iqTUO1Bj8sM+lbvAs
P37s63FJeS0jvW+QOp6iOIDQxEDZeTzBEjNJOsMEYmpmIe32iLRi5V3QD07g
mbERxbhFmXGLWlRAvqFVBiDGA6tR3JBoYuoHiFUIQLYOwcIxSax4u3D3jICc
JobwivLKubRnDCsejeKKoD9Z8Nge87JVsyiYPZmDQCKNPjpd9+g8ZwgxVcTW
Z1aaRd4TvgWDckh8VkfcR1Ehz/rI8uKusG4WXp33vywKYVcCfBdhCZNMMCYz
t95SKT1U6cwyLSyIAvfkRUtZyvR4gWun+DCeEreGA6aTivc9jROqMibV84sL
Ny80HaMAeHqCuuAAb5Sw9pvoh7g6HWBBloRTJg4mJwUg+OkU2JImJfBwluYR
DtGVPy2KitbjvoxxwToi1UuKdcSoONNYuWC1CHGQUVPuK+DQQqDf2BveAlve
qQ4DKBonjQsjqmmovEFMR4IFkhHLsLRxOcE4fumACWDLpulSvCC6RQQWi0/Z
CTq2Q4VXi2O6hEtxCJexvXNndxgdUOXoOBoDdQuDrrQpA5wb95mm6bXym4ev
8QkIWFHnlMZNmemM0TN+jYpA89XzINmMNPHhJyDrR1gYUmU3XJWn+Aev65EY
CzFmEITAqO9j9SzaENZmTuGGZFgJl3NslAJTF26Jf+hLA9SsBsSaYPlpjyg7
goKtocaL1buiohfG68nYt0YF4udoRUC6jII2cH6ta8zBNi0iCnfpx1yjewI2
b2x1c8rIatJBT8nxzyLuRIZIe8JaUihpRUwRYNcFbAODpvFKLgQnNDXEhIi4
gUEbhFhynzYZUcp0Sk2T5rofZa9ZZVAcbvSAJXpwnHJy02xSLKiGDVIHJKKI
FxTjq2QAYHWA+Kps3yVUMTLYOuMXYIRpYUR0CYwwSzEiugxGmFUYET07eHnQ
EvZRVhC56jCexcfZBBf645uXKCn6MowNJaZhSOQ7yapaaKgrtjdyo7j4LBwQ
y0vio7fWzdJvLKi6ZXjKcrFvDJoJnibD/Ugqi5DNQOK3GAD4RD6fHovoQV3v
5SABZVOufWfcHPsRqWbeJ9Ezu4H9qGl21/Jhbr+2Urd5o0aNfWfZ0kKFZFlD
6e+NbGYJoNtwHoPWR2+6Igw/vnlWKeHrYZ1KuDoKJAKGfteatcdy4J29+/c/
fuQSOqB+wnjtnS6pR24iHQyNmodsut4nNebZ07d/REMRTLgfvbx9EBQHhdtC
y0arVrAbNs+tWkK3j+OLWYhzH305S/LtAJ9jVX6pealCEr3E7y9DP1B4EqMw
jW1RGkc1/qi9yMdwQuG9rZ2tjx8DbOcoH2te6FnCMbwk4WibYoEhoPYe2zU6
yuermP1OmrNvVh8QWWf2r2oIXXvsK1nm1x79etb7XxdA9sL+GgN/IrB3Df2p
Yf654PLJofH5YHC9nQs/RWq237YBWzd893eWvl6eEWrZAbaxIKn9Q/QS6f73
h/sMwuWrCtjX0vUNFrNrLDGY41qLbTC25ettPOhWzu6Z63DTizcgNboOvYaG
oDhwMX96idkRIuom8dEX8S+F7YyEPGawvSUqxWDrgTE6Eps0AAmr03QGKkpC
jrX0HDjc76MfKcQn0Ztk/XRSqX1k3esLdPiRaZ4c5rcqg8rWBG1oJehTwyVL
2npgl3T/kkuy/j6OSIPd39u5sxNtPK3jE1Dk69Fw0xky/L5aUq67UnrwYHt7
qy9WNdArC4RoZQccYqgOaeo52wbPUmOn1pkf3N2DmX/88dmTSqampb5A+1aF
hnS0PxNJ4jiTim1m4RbaK8WhVWAY2o3zcwHg4W2KbUCPKxlcRHigVXxXFu9S
snuqfqZlzKVEseRQVSliLiY9ZFbuYBPo8TybJNGkOOGwMlDH0U5KEtxZPMFE
bSK9JMZMhyAPwiaoVXqs4k8xNo1JORuKV3go5gVS9q2ERJqGzd2TrOGN+Bik
tjMqRh73HbbFY1h1xvEwPKZdBImJIrfFjag5JLaruBaO9HYGcholOOeJlAol
bVlj6pah9n2L2vdwGEaj4zJLx3A8gEeeQdc3b2PXNHZa/NnWOnmJtU7MFGNW
qAAG20zmOZkqfMt4TcWtK7TCZ/mcDPpoBTQbVTGuKWhmPjspAS0VT93KGHEm
5F4QbDwGoHEuPawGJp2hkH2HPWlYRsRGDBixRXGmute5Pq71vaGbiY75ZA54
g+Bho4taodB/g0VHEzXcSq97gOU/Ur5UqEmrMViQijUKSzaEI9+/u/0gEATw
sNVm0PBRYZjT8qO8Z49yz8fX3rSA4yhyiZaFRwAp0efRQxj12JHV+CLL4Rwn
dYZXYVJYP88bEvATt38J/jwmI002xeDg6Ux1BbOq1pHYrKpsmk2YNpxTGAbM
9k5twb+3EwI04Kv5tMomHJA0nxCVwax+Jk3oqrJFWNSqpxEu6DNBzStFugYq
D7f94M6GLtnf9vCaiscc42VokbWk0ol7wLr+5xSOBIoeLUGNbVp4m7xZsQ00
AUkqwQkLpHJolFKbsdAX/+ql70FZyz1/AqJTzVZ+RiNcB0Gc7JqG202CmtaT
4CTqtaCDZog+yXzEOCrRUvC/3g/FOXGHNE5YItUYqJ535XJLitGNAvR8QjTd
mncbeYLYlCFn1uF1kSSKJPQ6KYhA5Ck7vMmuWBEx6UBGCgI6IUcha6EUfBB2
jQgJ9F/+CPr780qTzawbFNu8APHwogplWUBlhifDaN2ww2X3b8/ev7vMV/MF
UJn8ZA6MBH2pC3RpVEvoNLDcElB9qiVS8neVIasBihTkhXiTVqdwTG/i02nM
IXsvMDKumI+A92QlQQCuEl+2gCq9BaoUWkIVcMu2ctduZTdkU84WhwpAIGKk
ip4wQpiitmyWXTvLHV9mcvbjwHjr02Z0jFKcmwg7JN84QWUpibxjZ9zxZ9RT
iipC7cnCo/d8RohwhOe2zUjOLMKEtJBDAaxHrlAHnoZP4xiMxUpeXViHcWEd
ahTuW9d/H4t7bYpXeVTg0uAxEG76VB2cv/ZANM3Yr70CRP65aswApxS6U7Yv
LAXpjgXptpu9mInfP3BPBkiJXtd0Rq4/24UJA63YqG/dlsdFfcrNGVMQnka2
TAwJFYAFx0WVeqX3gN6aqkZ3j/hH4zaDxrP8R1oWKk5zeJcTUIx1fPheicz5
LEWNr6web8Vf8yzo2yuHTzXkKGZOSJ0IK3EUsGbTJnro7LB81TXplb652BKk
nGJAEi+eGZHBVTm13VruTgUESYZnjoECsHFb8BAI7xmXyiPnVWr8k/PwytUY
dAXxwmp0CtbKHQlDoDBaSfDc1fojT7KrnNeQJp3vizhgmQKUFLe8wBGsnCRu
vYUUByTGwv4nKfqnfPZNiuid8PSa2L0kbq0hwRRtKbxRRMbH5pIdivgPUAf0
FrNQWOEJ9ahM9NJbtW1v1ZbP2twVbUhTUqkwltPj/HYgnFwgB1v55l7CODPd
s3TRiijxAD6ju0+4RmsxbnIRotUx6Ozm3K5A/OWWmuECbDluiselBxwdoweA
lsHs3y3YjKyiNgkJSFPha+NFENkGULiU9xzGFEiXQJVRLMxOcopUwiAeQ3QE
6TDuauhrFSoU4ep8YVziQHU10jWLovhd3yttn+WisiiWAg3l1r3F9nHq7qMd
WkwH3OuCwiYSjEBhIz0vgGgNyISwbTxaVgmn8ftsOp/Kjsgp520KLfDRiCSC
hZWMbW0SD5RU6kuIBEJZz4XrYeINs49QI4oNRk0/so0j9jSky0iD7c2LVoNF
wvzgKwpyatUCM0w7f0+1DX6vHmdPocSqI0w0XWSUmiq4tgcFgDOdryiJwJZ4
8t8RpUwWAMdQcMEeFBIuBqylUc44QD3OcRD2TrP/nqu+wIKEGs1OS1IJrexB
a6PLV3pxu13V5oAgvUvTmRJy3pqcJHUPVTCjHt85RGX4plD0WMxubHH0zKm6
rH9JaOPIBBcRQ5ju02jCH00w5mwuFVts+RphkcbFG0rRkXFWwrUgk7foj/De
SZqnoAF4FxkfECsP2sSwUXrjHdQNXT5hWHenIeVgY04C/5SCPa1ezvSQzEUM
7az0qcASKp2U8bgehBzB8d0BsI+trVDeVDJOqS9kqIpLKiVzWpyLhBBTEcE8
mbg7aY/NUZw+y0WCKTFh/8ZJqoWY+hH+jk+zxHgOshSa6ja8Yk19V4Nocxg9
Ew2RiaGUtyMeNZjnpFz2uPceNpwfdu8FzS/FbKHFoNj26yn43uTDUFvR7asC
SXkfAEbGFdzlQGMxQQJExeiEa7/R90k6jkGaVi3eYayyKTIbXqRTxKTaDiYo
LFiFV2sotBuBVo6ODztVCUZQr/RSRVStFhSVUi1kDM2NB5p9/x2awz4L8l6c
TSob9E8jInSM/4jEznCEY1hBCRVzkYu9mEniRXaEYgSQEnsvl1bi6GC668So
4VXa8tuC2haplQQnBGEUg0sl7reSECs6Zk0SI/uXocjDjBRh7HELcliaYCVc
GvhJhiHXSUNjYfuv02e4EdpY/25edUFKKWeldTKJgHDkdbQh/+5tqsGqd6jF
pwD7PdcX+uFZQFhXC1pZ59tVySTLdbSBO98UEcC4x4Aen+Tigbc1s6jM5Qsd
2D3MQdcIEmM5M8c+b+1uffzYNygka1gqYAJoTjndVwKcQ/LxPB8xBPC6hCtV
KUVCvVwpHxvcrt1zacOaix9XfrhsIxzQGqhp5HB2luHIX2Dt/h5d7lsxy4Qa
d0FMCXk+sUc0LNbt0eF+BpQM1QJcY8+V71abRo/yFRZSIfw8Qn0NsLjXUFd6
DbpGULDaJKVO+4pZXZzHJVPQwy4arzYGOrOqoIJ2qHhl9ZzJV5/yPzCKMqjH
ZjNYKql0KSHfOXClsDQ5zWFUGEIXUMmy0cBpdz7lBQ5agp5lw6xpv0+VjUqu
hCv9Hh+jN2NUe2jK9JWwWRRNdbWMUVxOsvgEHZNsRCe1X0dHl4gGzdEoDCAa
qtEfCZMFrc2SM5msb5CiYPzXwpbbTnGjIMV5xeGEuEtsiZbVTK8ATf76GtQr
i2woAXG6BEdQkrEIZPQlNUZtKXumAI2y3L5Z+IkVJtWIm1EPaytiJbxkCr1J
5rZvm9bWdZ5E4giql1j70watlEwq/lI3hS2EotQLtsa7sEtfVxpxShn63krU
hKxDI5uIOdwgekk1ViveSPaZcyHiVbMtndiafMw6VoaXLq7C8SsbJooGV9AF
S4lXAF1qstwU2NCwfb8lKpSIblQFG9uHk3uqCpR7uMbn8Bspd6TTa3USQAXn
3/F5XEtqsmqCk5YJejGLwWg988scsuDL+nMuCGblXvwqsG6gCeokVPlT8jlL
kQApytz3bH2gTVwqPICFALhbXgyslsJvD7UqgLRh4fCD4/wF4tbd8llc4QA6
ELZEAvghLoFGZv9Ik9tWoYqTX+ZknnAWXK7Hz1TAeuWRFlL6MHDMwP1EDASR
Ar2WczasetZgR/iCJA+zEU8QMU8k5YqaSFAkOvcmxDtMamuCTmKQtRbFHCjX
O75f5DPebPAT9ba4c7UXFOR51+6CKDqlUU1JvTG2LiBlK5CH1ucFyucweYia
ao9Yp5jPkENZhx4Z65hAoSCF1QHS8ZiKnkpJTeAcmp2SjVLHRUJJexqEEXFq
q5pY1ElcSUakd2Yg2jgdh6ZRNSfwDfB9Ea8vmRdQvTh1GXV4irAtLQPTN57a
0pdoFX+WZiHZKiLnLCFPSVCnqgZk2/dW0hGArqtrYZc0sVR7AUyVO9oCTw8G
A+oUgdE1ByNUyIAUsmXIfNjn+IU0eST9HT9y3iPjEKyzOlV3eZy/i75L8+L/
/H814lVWsY7jW4Jpb2yR6RvNwHRhn1gFHpB9Trny56fET9wFOE0nM7S+6n4M
273IibVvXsPBHmBT+KpCVeBPdHcP5wBdTKb7X0gL/xLXFabtw2OL6LssBeke
/npTwP7gSyzPAav6j2w+hqMDso6DYJ2Vt9gvJLUP/hmYPnwXuMz6DX8Zruw7
3NHzbD40/xdql9KSLAACAA==

-->

</rfc>
