<?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.6.17 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netconf-transaction-id-08" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.2 -->
  <front>
    <title abbrev="NCTID">Transaction ID Mechanism for NETCONF</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-transaction-id-08"/>
    <author initials="J." surname="Lindblad" fullname="Jan Lindblad">
      <organization>Cisco Systems</organization>
      <address>
        <email>jlindbla@cisco.com</email>
      </address>
    </author>
    <date year="2025" month="February" day="20"/>
    <area>General</area>
    <workgroup>NETCONF</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <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>
    <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.</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>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.</li>
          <li>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.</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>The etag attribute txid mechanism (<xref target="sec-etag"/>)</li>
        <li>The last-modified attribute txid mechanism (<xref target="sec-lm"/>)</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 2.3.1 in <xref target="RFC7232"/>.  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="RFC7232"/> 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>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.</li>
            <li>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.</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>/nc:rpc/nc:get-config</li>
            <li>/nc:rpc/nc:get-config/nc:filter//*</li>
            <li>/nc:rpc/ncds:get-data</li>
            <li>/nc:rpc/ncds:get-data/ncds:subtree-filter//*</li>
            <li>/nc:rpc/ncds:get-data/ncds:xpath-filter//*</li>
            <li>/nc:rpc/nc:edit-config/nc:config</li>
            <li>/nc:rpc/nc:edit-config/nc:config//*</li>
            <li>/nc:rpc/ncds:edit-data/ncds:config</li>
            <li>/nc:rpc/ncds:edit-data/ncds:config//*</li>
          </ul>
          <t>In server messages sent to a client:</t>
          <ul spacing="normal">
            <li>/nc:rpc-reply/nc:data</li>
            <li>/nc:rpc-reply/nc:data//*</li>
            <li>/nc:rpc-reply/ncds:data</li>
            <li>/nc:rpc-reply/ncds:data//*</li>
            <li>/nc:rpc-reply/nc:ok</li>
            <li>/yp:push-update/yp:datastore-contents/yp:yang-patch/
yp:edit</li>
            <li>/yp:push-update/yp:datastore-contents/yp:yang-patch/
yp:edit/yp:value//*</li>
            <li>/yp:push-change-update/yp:datastore-contents/yp:yang-patch/
yp:edit</li>
            <li>/yp:push-change-update/yp:datastore-contents/yp:yang-patch/
yp:edit/yp:value//*</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-811c-a117-b99d3b723c93">
    <acls xmlns=
            "urn:ietf:params:xml:ns:yang:ietf-access-control-list"
          txid:etag="fd6a52d9-5152-811c-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>
  ...
]]></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"
UUID values.  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>
]]></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>
]]></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>
]]></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>
    </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>
]]></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>
]]></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: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>
]]></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>
]]></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>
]]></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">
    <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@2023-03-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;
  }

  import ietf-netconf-nmda {
    prefix ncds;
  }

  import ietf-yang-structure-ext {
    prefix sx;
  }

  import ietf-yang-types {
    prefix yang;
  }

  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:jlindbla@cisco.com>";

  description
    "NETCONF Transaction ID aware operations for NMDA.

     Copyright (c) 2022 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 2023-03-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@2022-04-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:jlindbla@cisco.com>";

  description
    "NETCONF Transaction ID aware operations for YANG Push.

     Copyright (c) 2022 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 2022-04-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@2023-05-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:jlindbla@cisco.com>";

  description
    "NETCONF Transaction ID aware operations for NMDA Compare.

     Copyright (c) 2022 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 2023-05-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 and remove this note.</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-yp
  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-08-since-07">
        <name>Major changes in -08 since -07</name>
        <ul spacing="normal">
          <li>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.)</li>
          <li>Added a few lines to the beginning of chapter 3 to better describe
the contents later in that chapter.</li>
          <li>Added some guidance regarding the recommended Txid History size.</li>
          <li>Mention that examples are based on the RFC8519 YANG module for
Network Access Control Lists.</li>
        </ul>
      </section>
      <section anchor="major-changes-in-07-since-06">
        <name>Major changes in -07 since -06</name>
        <ul spacing="normal">
          <li>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.</li>
          <li>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.</li>
          <li>Added brief explanation that entitlements are sometimes also
known as "licenses".</li>
          <li>Added introductory section on "How to Read this Document"</li>
          <li>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.</li>
          <li>Changed WG URLs in YANG modules to new datatracker format, e.g. https://datatracker.ietf.org/wg/netconf/</li>
        </ul>
      </section>
      <section anchor="major-changes-in-06-since-05">
        <name>Major changes in -06 since -05</name>
        <ul spacing="normal">
          <li>Many language, style, spelling and formatting improvements thanks
to reviews by Reshad Rahman and Med Boucadair</li>
          <li>Clarified Txid History Size Consideration example</li>
        </ul>
      </section>
      <section anchor="major-changes-in-05-since-04">
        <name>Major changes in -05 since -04</name>
        <ul spacing="normal">
          <li>Corrected namespace for reference to elements in ietf-yang-push</li>
        </ul>
      </section>
      <section anchor="major-changes-in-04-since-03">
        <name>Major changes in -04 since -03</name>
        <ul spacing="normal">
          <li>Updated security considerations.</li>
          <li>Added several normative RFC references.</li>
        </ul>
      </section>
      <section anchor="major-changes-in-03-since-02">
        <name>Major changes in -03 since -02</name>
        <ul spacing="normal">
          <li>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, ...).</li>
          <li>Added missing normative RFC references.</li>
          <li>Corrected the YANG-push namespace reference.</li>
        </ul>
      </section>
      <section anchor="major-changes-in-02-since-01">
        <name>Major changes in -02 since -01</name>
        <ul spacing="normal">
          <li>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.</li>
          <li>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.</li>
          <li>Renamed YANG feature ietf-netconf-txid:txid-last-modified to
ietf-netconf-txid:last-modified in order to reduce redundant mentions
of "txid".</li>
        </ul>
      </section>
      <section anchor="major-changes-in-01-since-00">
        <name>Major changes in -01 since -00</name>
        <ul spacing="normal">
          <li>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.</li>
          <li>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.</li>
          <li>Added note clarifying that the txid attributes used in the XML
encoding are never used in JSON (since RESTCONF uses HTTP headers
instead).</li>
          <li>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.</li>
          <li>Added note clarifying that this entire document is about config
true data only.</li>
          <li>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.</li>
          <li>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.</li>
          <li>Corrected acl data model examples to conform to their YANG module.</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>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 "!".</li>
          <li>Changed the logic of copy-config to be similar to edit-config.</li>
          <li>Clarified how txid values interact with when-dependencies
together with default values.</li>
          <li>Added content to security considerations.</li>
          <li>Added a high-level example for YANG-Push subscriptions with txid.</li>
          <li>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.</li>
          <li>Some rewording and minor additions for clarification, based
on mailing list feedback.</li>
          <li>Divided RFC references into normative and informative.</li>
          <li>Corrected a logic error in the second figure (figure 6) in the
"Conditional Transactions" section</li>
        </ul>
      </section>
      <section anchor="major-changes-in-02-since-01-1">
        <name>Major changes in -02 since -01</name>
        <ul spacing="normal">
          <li>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.</li>
          <li>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.</li>
          <li>Changed name of "versioned elements". They are now called
"Versioned Nodes".</li>
          <li>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.</li>
          <li>Examples provided for the abstract mechanism level with simple
message flow diagrams.</li>
          <li>More examples on protocol level, and with ietf-interfaces as
example target module replaced with ietf-access-control to reduce
confusion.</li>
          <li>Explicit list of XPaths to clearly state where etag or
last-modified attributes may be added by clients and servers.</li>
          <li>Document introduction restructured to remove duplication between
sections and to allow multiple (etag and last-modified) txid
mechanisms.</li>
          <li>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.</li>
        </ul>
      </section>
      <section anchor="major-changes-in-01-since-00-1">
        <name>Major changes in -01 since -00</name>
        <ul spacing="normal">
          <li>Updated the text on numerous points in order to answer questions
that appeared on the mailing list.</li>
          <li>Changed the document structure into a general transaction id part
and one etag specific part.</li>
          <li>Renamed entag attribute to etag, prefix to txid, namespace to
urn:ietf:params:xml:ns:yang:ietf-netconf-txid.</li>
          <li>Set capability string to
urn:ietf:params:netconf:capability:txid:1.0</li>
          <li>Changed YANG module name, namespace and prefix to match names above.</li>
          <li>Harmonized/slightly adjusted etag value space with RFC 7232 and
RFC 8040.</li>
          <li>Removed all text discussing etag values provided by the client
(although this is still an interesting idea, if you ask the author)</li>
          <li>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.</li>
          <li>Added a mechanism for returning the server assigned etag value in
get-config and get-data.</li>
          <li>Added section describing how the NETCONF discard-changes,
copy-config, delete-config and commit operations work with respect to
etags.</li>
          <li>Added IANA Considerations section.</li>
          <li>Removed all comments about open questions.</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="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="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>
        <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>
        <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="RFC7232">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP/1.1 conditional requests, including metadata header fields for indicating state changes, request header fields for making preconditions on such state, and rules for constructing the responses to a conditional request when one or more preconditions evaluate to false.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7232"/>
          <seriesInfo name="DOI" value="10.17487/RFC7232"/>
        </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>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author wishes to thank Benoit 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:
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
kuAjleE6lsriSdnYr5mlU131vtPQtP5rm/iKUKLRmKQxcHUfFFxA9JmV6Ovi
YuPNu1pEpKqJWIPKyKktpwFLNCk1bEb/toyOcjv5gJfVAZHYEtVXsJgsNtjQ
bCmKFZqVXOXgi3aH/arxi8tQsc3uPgMhxAvM297+Nc06nsrO+BrE5CDCK57T
Fc4kfQwjI6jlZ8xXyqryfWz1klLyu5QvI12Fy5jQFXcFk6nuE3WaURXcKeVk
dMgql7FOHYr1SWvHIIsAhg5gWRDUyDKbpiaPMAmxefS+KYhCiSQ8AjCyq4GM
FAw2XbSKaQMZjp5R3AsFI9GXFG6D+L6ZoYKTzDnsyHWMvYhoaIdPjtZOSyrz
A6p/H/Z5DPRfQiKs3uRFjFO9rnyB4R+dQ5t0PEYQBvFdXxrZudF91iI7vu5z
MeFZU/dhAhuOugJMF817ge6z6vUbBWbnI4DpRgtZa8E3Wkhj1o8gnGhsXkPx
0LwmL7HNFsjjegHGSSnqQvAkUQlb5+BN+Xn/4IUUnyNxol13r1MEiMmZcKai
gPpK8Csmgw2FA2b+FqN+hYahZiD3lKbmoEBalxH1oM9eDXTjHJ80F4HOHm33
xPNxND0Oro4ajsLVVo6vbQyfMf/856Mkq0ZwkNKQonryz3/umT0CTuePLgQQ
5fa0XuoK88IYa7IfC5S7aqh6GQQUNehyKv26sqsqnGqINwU1eu+YFdVTte86
tp53m5rnWMAW9j4qZgtXBs8DSviD9y6WQVSvHLqk4LnIbl+ifl1h12rlxoM4
7pgCpcnLkhjXUyWhfLyxS8jgbAOYF+VnbF5GKYKVTXEpCYPi3ATBql5FPzzy
dALsvL3xJcv0zjvwIcoK+9E8J0k1q42PqpizuVA4o6tSZtrXyNC+Nvk8Zn9r
0QRKq6SHqTFUX8OWA5zrwhgGnUZwi3tVsyIbXRwIUeg22iqtgbdVXzOcG8Ca
kw9j323cWUR43Ew04Q4UkhGScJFoD8KaT9s3WHrTJq3DWpK0GpXZERfArTh4
2/y4rAQqFlF1P4XFU20Eb6VlRyJ06A7ezKsTUMaOcJ6ZEJJ932nOCqR7FhMJ
jiZZdTKovLcwSpqUvUX4tZoIClcRtTmg/7xR2NpAePZpz2eUn2yytB4PQBPC
sUgtHKBTczCDcdiPy9WKva7pDq9Mo9NQEjXIkVtSkWsLpGBxYqHSmqTjeT5i
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
QBnEiSdpwvV0PK2SurRojqrTJHnVSUHKpPbwojTLiHOuGiF5n9zBee/fQMtc
ZsC+yOuxXEOIlno+bockYLJqurZZfImI2Dkdvd093Xq6735VzacaTRomdTTu
SOYlVMaVFpKelelpVsyryOmrEpO6QhGWS2ZICY4urQTf+8KVYD7cx+pSb1PK
1yVVPlvSBpj6D8fv0zyaYcpjxO3RuaGObU1otFEZlvNBymNbB3afGua53xxR
i5pgG82lHtTHF5oZLnC2BaOvpTwueTO6cbZ9huJh16l8LGfbklP5tCL/zaHK
5tILbuMV1bjrHOqDO1s3p/opNbkuRo357lLTSCV428AmqP/EsY55kQ/Ccgl9
v/dNnqbS2NT2LaWSCjElF6kQ1y5jIUWUuLuH7ekhSkiqHYz9PLOPqFvc/yJ1
i1Civ4T43roxaeu2rGDCy2nDUuogrHi1lmIf7bjsy697i/DdDncYSje+yWNd
t1xwR1zVeamsH1NDba7i0yg8Igs2XBYSEwUTTFwfgYYfJGMGRcWoJvqYirSm
cQnXtcRydsHDlG//PRVbXkj3JlyDWyEbDYYXCsj3v0AB2b9ma0qtzfvxaeXR
DvUqROg1Wd01mQOjwzKr1wFpcV7vNe5Pn1UnXG3LK32JgsbbbVvFk1Abdvlp
jEQPGG38en7XQFuLa6FZk/C4dXjrm0Xxfc305DYtS/mE//OjGnjioKCKeU/o
M5ZpGFRpDc95P/HDrRn3bM2+J1iID/BoxRM8hs/RvgyjV5uzXfjQ1diZ9V3f
W+7HviQrWy67/srS6wr5dYUEu0SGvR6Ldhj66LZ36ZeVOYnOivkk8amTJUvE
IZcWNzMx1T/2q+Yxu4wrqQdQXWxvevCbs1Ose+ij+/17Dx4gi2lT/H0q0Ikm
UCDuXiUadT34IWe2KZHN4HC92bVC58XQefibQ+fXscYRzJeb04Kfl5O4DgLX
eLOLvLUeiT5N9M4Konejqts/101nuLGwftG40HUqN+kMX9yRfiz76jXCZK5u
Xr2Jk/kY1lURQrUXCvejkNpKyTJPKbbtM1o/ig/JNdiLo4MXz6WWcVH2YbBp
wV2RUet+QFantw/RQoRcZX8HozQuFuxwP11infGqA96IdT5sRpNsB/7dyHU3
RGJdua6JMpcQ7Nqv3kh2vytsWM0y2Npqq+53W179jqzO7irdtInYb1P4DXY7
wAg/akJYhSzGYBQOxvdRj8Z4wi3gNPwGKxDy+BR7Uy3y0UlZ5Nm/sENAXTX6
kNh2F9q6Fe3B1DBF2i55nE6LNholXcp1YNHIw44B4BM4NSxpiL0OZkVVZdJt
k8IUsS8VtYliTpV9shq+W4Fj8DKV1P33Lse0/DeX252vYG5+FFjICA9/b+bn
drmJj+EajbCwt/aDeNzjS9TwBFzAkpex82uaLvGW813Gipkn0u2hEXob6Yqo
i0z6CwYBc3lSF0MnTSxcl47oGL3qNdzo+fGJc0/aapwYUpdUBgOVa+p+sl5M
3XaH0PYbGzmxJfzVjZzLZOGrmDi3P4+6o5/exkkgvxF87Hc3gs+ldGUheUmW
BNkHjrQtI4CGWy86OgbaCkKBZI6s0ovdh2FLiipudW4zGuo0pw6GNYVXREvD
K/qsDHvdoMr0Z9cSzJFbprBLpRQhFtemCC1MuXYtpjUd4JcUR/yXGxSSkMO2
pRK04cZQWF7uiSqgwDXdl8FTIEBYbj4YU3dO+7AVLvjvCpsXZvXiCf2pT9lv
/UexK5XF6Lbwgv+zvJ2VdzXar9rnsW6ef6tW1Ljr7W/3fvLu29qjrpofrxXv
wV8F3I97D7d31pusPUTX4+sASw9Dv2H2LUjRGaLyNo2JaKLFjO5fZ8+wFyne
9RhTSqSlZezzfr8ZWMsPbKQFHmZMcS+zqtGGybaY85K71hAMdv5NBIOANd8U
c5Pv/t3Eg67T2dnZfth9Oh1RqlcU2na2b4S2jye0NVQpsRVlQFipw3E1goUM
1GKzIb0qljXMMyCZubjXFuHdZPlJBscGHl6EH3bjY18JvuvHGhInmCezaGP7
/qZGHm7c27T6LnapT0fcPsp4XMBas4hT2Xo4tk8fKoBVWmtDFDFd+XHwLOqJ
Hr0GB/jsKnt+BA6wjNB/dRUa/9VK8v7VjfvjMyAhN4T9czyVaxH271O/A26j
4ypcO8p4QMLP5kYhf9LMyAA46mw0n8Rlq7EUuw0otweVfBw2Okphn+kJEmfy
HRhPx+fQTelkKw2RYO5G59Z4XFNSODZnHWJzK2rleoSpQzyM63Jr1QTtaz0q
SqHXWMfBT+pYEhY67HTvY7sndFYAu5mVwKdGdTPxg4PlcT8m3E+rEa2/HfJz
jAgKskwjbCqu7UKrGpQgbBpOWk4V+4citSd0McZCtMdOGO1129XONq5kFdra
vJjXRpvbCpMXY0gme9NVRu1VRmkMh8uZ39yq1u8TVZ3gMhG3KPd+KB4xnJ2D
eUXUaNbM4GSz9KxlHsq8ls0YNJGbVk/34r1LI5ea/nO6suP5RNGJe8Lz5EYm
rhgLXVNy68RQWabZzFwal9kCBGuUzQgEBamud0kJ4Yl7abkt5/JGnEe8u4/l
9EGvCI+3tPyDxtAQlRRfYmBns87A9WWvq4HUg+gn9VIA8v9j/9WfB2/m1Ykn
aHdiv7SZJhTGBnrwH2yn5g0gTZXJV8cNpeMc6G+s97rZ7FywXmdir4ctskDY
70NYN9tC23sNf5p4VPnxy+HxI1gIUNisOhn4uwkEVjvZNdpM+wNetr908G4L
6wcw2iVWyK/YseW2+U15TQjWtZp025crK4kk1Z72jWf5wJ+jY9qB32C6sYaG
mHQ9EclaQjvWFSzCLbLIRfm8vYw6wSk0fc5RhHRKJrn4hUe3u1ERr7F3E5y7
0dcNkdJLOJ6+p5kp3VfLQ06zLrXyX1KqdRFSXo4NNBDzUXoK1OkwA7ne1ovb
Pdy6t7e1tbezO9y+958ANPsIvtDuN31J1bN1M7LkyYOHcH6J/O31rmZJxcrC
rn+1Jy7T30C1nmC0rH52P6PpIZC2yRYBj+B/t8WZ77+B1F65/xMOLnh0233j
P8cBFx/XmRMqDOFNkmlvh3Eg9F3LDyB6fCsC42OtbLktgNfYzGG/3VghQ36V
pwPvb7ePg/mvN9Sa7wIlamAQa1ItbANMaqE5UQnvfja9oO3wLqrFCKKmq2gV
UA9bFy43RUl9YrF8WzQpYM7SNnG1skAX6ZHS0Fr8qlH2qkWTWmz+/pWl00e8
uX9rlg5UY3tre9sjXb8Rk1+PV47jSXUZZtlxwq3Ix1cvn+6jsoe9h1nbc841
VRAzrR1GKnyVckDTXQwX/PDh7XcHD7d3d8/PSf0f8Uis9aruD1rnUVqfpeK5
t6Q4nrCVOa+BNaeJccCzOuFRXaZarayHD5ZjqrjOpgDfItHox9z366t4yiMK
7jbuAGMZZRQiAY7gwC+hrG5LtVfzSd2shRJGZG1f/U4K+Nav/DlN4oG8FF6Y
y2LrBbfNn+gy927pIHoFpTILXBIPLRoFW4RbwjOKKo1QSVDfirIeFGV2nOXL
5U9//ktKoqtefbRCKs+W61oOSB5eWwE8G++5r2VZTcGb1HdcUXir3745kA7d
FJ4T+/cQMD0BeQijejoV9Ssr5s0rwC4OO3G1xsCr0JqhWZRrvMxY4L+2Hjp/
BGRui7dOuLWnGYEKU8+rtqxLxh0gV05QQvhZ0umTzQ2+H5sB/Yw2+FJs9u0A
No5S6956dFxfG1rZqjF/Q/K2cneXzO1J3IhHsM1OkVuv8u0G3jtcf5zWJ1u3
0xxNuklbUG6LyY/gpsjjT4hBPrrtfeOJmE3xVRLwVg0YFeUeo9PjHnycpDHa
NHtqXOucpnvYi6hRt5i8u7W1u1JIvmCMUERfdp47q89zhIXFrnecSWoFkHWP
1HvlSTaL7IAEdv/HFSd8JZhfqJhcAuZNdQWUFUcRu2yPh1qrzRrHQT55++wd
l+Dd4Fa3f3n3+hUKSNO43hQiflLXM/P94eGb29vD7Whnayt6/b/MUzi2vejw
ZN6Pdnajv8Q5/LD9EP5n7+69vTtb0Z9fHpp3ZCHZU6lpIFGVBwUSh3pwuJjB
EPFsNhGRnjeEcsN//FyBwmA+gFjWJNl7xbyezetetBd9YAuHt233bSSvOhjt
uY/+Y/Cg0kr8utckpT1H8HpCw+i5gHw6KunTTo+o+qPgEeIQP3qI8cH7LI/o
gra9d+lHOyz9LBSx+RBfBHpiTXrYHIEQL4SUD9iu8exQOC3Ry9BQfN6Ywidn
15gJKWZj9fDun9Z6uTmlTsqUWQg0I4b3tRLrxsvnK3e79m3vwWxInf3hg8FW
YMvOamxhensNZPGo41URxjsIfzSCsUeMV6POpYBJ/hgfmPazht3yN/i/5+Zc
9FcyrkQvi2Q+ARET9dlvUY+b0hfs5EXhB4iolDEncvk/EdIZI0+1lknAIUqk
qiUQ1W/gO7SSVTOkO7SUW5cSGG/hCLMyHWe/tKf8xsCP2RS1mOBHOSd5LR99
Q7vvfpag23whqTpfod1VcClH9bxMB+kvdfhi9cvy1zAAvAofx+/tC0V5HOfZ
v2JrUOo9f3b4na0jv/EKCHJRvg/zLDejv8F3yN3+jL0hegQQivkdcWxG729/
jv6WHu3Bx0fI7aq922T5q8t49D4th7i+IUx9++xYXQFayw/efJFV9R4aPPmX
P+nTTww/sj+vT0DAg0/IJl9keXI0iZMm3Xk0jUH3KvZ+nvADfxpl1agYAkI/
4QV7d4UXrZs+9BLBnj+N4jNU8u21Z3MHWmKGsp6DYrYoyRa4MdqM0LAfERAP
yzmVa2U/LLxf4dtcx5K7FIqdOaYNVWoUGRVJOoRtTiYRDUtF3JHVJzrjW6BQ
FTvpcZE4xZzFD+YA9M1RlsflgmQPTdIqROOVGAU2mYqw0Kfil2kpYQyzeVnN
YyxeWHBAYDU/+pkbaPAYVDkzG6XUEQBeqzTqGzNgc7bovE1PMwzg+PbdUzgn
frZKJX4HFgZLgjW/ExvV7nCkIHDwu1VFL9Jj0KLeYNldvOCVwmAC684plIAe
f1qM5ihNyO8bing1DpOmDulk1RQ8v6kgPWxZp+BvIlhKeQA6Mdwt+O3tdwfR
3+FfY6Kzs7NhOR4NkH0UJU2FU9yG7/DpzW9g7xKGCQNkdZVOxhYU0Xg+wUJr
uFU0ywKrcEtLo/fpIoKLmFTRrZc/vDu81ef/Rq9e0+e3z/73D8/fPnuKn999
v//ihf3AQ8hj775//cOLp+6Te/3g9cuXz1495RHg2yj4ige59XL/H7cYGW69
fnP4/PWr/Re3rE0uEfCTKY4aKzLrAapTe7jOt+6IkCT69uBNtL0bbSA8dra3
H27yxwfb93c3yR7Sdzna9KdFvQXKuSA04CgxAG4Uz7I6xmzEuKIYmTzC0BlR
l/nCo1uAjheu6B1sqLa1LZSxSQqQDOZZnVE7GX6p9w39AiSURWN9TnFhr0k2
Xqboz8iqKdMLpi09S3jHIDcANW/0LW0tJ+qx0F+52DAO9gCIC2ISHlTzGVF+
TGrllbk4n6muBIiKjoYBEgCuwn8xkjfDJbWHkDcyBTTG9+R5Mc9HajaPeIGy
x6HbNfAuuHq4LxvLNaBYro6N041EnYF2jdNRMBjMVskmKKd/NCGEo1wVO7kf
bwZ8gOgSVX7hBDUNKKP7TfNLdEemnj87L2z4b5Spb5/lwJAwFq2i9hocrwYX
WQbB24+KH24Hp2QDdxVtUC8iwC5A62ReUthceppOihnOuKk2HvmPHhnOisGA
aB/PSrZyzyspRuDg5IAi73OhgaUrb8z2TNwIQOZg8D0hQZa2l06erDy5tB26
FJ7vN/bJ4VAnVKHRYQcKK0k6Zsu+Cjn4ZYTMDqCkE4KCCYsAHBn+IRr+oect
RNAWlwkrADRGVfSbxoz6+i14d/iHW1d9Hd79P//n0tOftzBd4fBDnv3XPI2e
wRWvF4NGmB6opSgF8PWPtY72SF/2oryGKJFI8CIWiBDYuWrxiERynvo6CcpA
PJNijtGZ/zUvMFAKUPYIBLYKCMJJA00Ow0Co6NYfkXF8dYu5w+NbnJcqaA7k
I8brZ7EJnmaGG8Yh6v3We8JZDZGFbhQdz0F4BwRMOfmV8iZqrPYE+6SxCj/f
dGjn+6o9XwcxAUERhaHUn9HW6Jc4164AUCw9wM5rXwotSUA5TZfmbbh+1IvU
FQDxRogpYNNb85LdPb7G7mLGBYI37oOqnUjjtGTOiycOgHD23lRLjTjtSEKU
ZQk6t651wFfC+z3P8SLoPaKvSDFDQA9g7EGdTS0RoZ/THKQNKa/i7h9+G/0x
UJhDntKGkCIbgSLEtkvjW8/RufNwTV9dak0XnNp1sPJj4OWFmLkcDo8/Nhyu
ir+rMLhj+Utot+L6i7bItJps+/RaJ7sSTfWEK2rUSKQezTf2LwY4lXB28dfB
VTsqCvg5112390fyMMO/QkGcAtu7XfZW8qIzG03miQvNkG4Qe040daHmtjhB
WDkJj9S9L+isB3Te2FmXLA2yyXjQKWx/sx4Iok8Dg3CtHwMOHWj5Z8UBa1yz
gjzGMpGSFs+PUW4khQy+0UnK2UhoosRVheuhVG6ORliKgZzD3oWHzpoYIiIL
fmviYUf/D4lEsaJ6B6KETChcw1qY0uBin2qxH/c02ceDQr07V6nYLgPVMR0p
qSlBGTQZofvAZbrodj7a87JO8c8sxxkZtEDPq5AqfbNc7/ZKhIR75C15iqqf
5+rM8p2L49SJX2ldzayWziUlFUMMAct//loQo6PsWFz1y561Mvs3uKMKhazS
aYVrPd59S0TTp6eDbCS0KzQ7mkqQjOQZ2SEoXrxaViXWVraxORyYj8SORG+M
kdYVdCkjmlBzVJTtsjWSExasQm55m3gLyeZojjMdv7UPruJTuZpj4UhoVKHq
OyKNwkLmaEbwRsBfWEgN6vfwwJxkZeUboohBLRRPPCNqh0lz2HBsYM3WpROO
Ok/Tp3rWxkJDCyqmbMbiw4jt9M52xIAI9V+35vPOtXdwlE6essaiu0i1hivi
onwFzbJtzSnydqMbvWjpqzjSxTxpNVe63nZDGeW6+/acgf9jPuyJqwKdHYNp
XL4HOf8xe56N9wvX82mZl/7kTLhDVBR75+RP3LfX2to1fbeilyl2sWPRBSB/
GhejG3+ls3GwmLX8jcsiuBtuwXyFyfrBvTsP96J3fow7XE+6q6+CoPDlrkUL
GudZnK2ccXc7nLGyUz51oa0rnabW4bvKObt0BVcx09/4R6/mH6Vjxat24yS9
cZJGN07S36WTlBMUf0MnqapLvdtVvtedTYq/kOLUW75MQlsZi+VokP8rTwkI
k72Ie8N5lDYNkL2LM4zSVwseOe/Q12btrZpeDl9iUD8tSmUgUueWlPrzFbzz
5qY7soJ+lR07Q2XHFq+9qyDPvvnF73Rbi9leO4sxzMWWlMfbveg/fFkcnvFD
aS+xeywaVmFRB1sEHq+RZzVnXVoGcDr6WlsNzXfffETp3cmPf3JU5hJyfJgG
t4Yo74cyfiJp3p9itUDvP9kOJWyu1A40mq6SrjGrb09gklXMnVU2fRnn8THr
3FbQttrcfglKG+YYoYa5gZDdvBHHvzhx3L8xNxL5jUQe3Ujkv0uJ/M5g6+5n
IpEDP9oTRkWfLy+SdksvNh6jsIUWIie/VHJG6iS4nszW3AO7yfyvB5rb1RTa
8BkvUep2199OqqM/OU/p1xTvnH9mWlT1AEM5cvUwtaIt0zBuwTlhPEcIXd6j
NHB7eG8BHdZISzH2S80WP1ZFaD3sxA3BT3klBTQaB1/AtUe8dmdTvpzk+nGt
z4GU9id3LZ0Ii8xhjlXyURKpgHcKM+akQY8+V6qSMGUJSVICMlUuj1MiR996
2OGj9dVxoJynBKH66XQfQhry+SlQ4eCz45wjSNFnPJI2EKcZxvWwBDV1QqOW
da1sZ0UVPX4EMnJvZ3f7JzxNm/mI3z7Y2t36aUg8YFKcYd0VfWcSLzgul9Fq
RM5GpEEkX9KvzvsFq0iweeNiUBcDGwHdfg2Ge8ffvTtJga5uvHv3/aYubydc
iF2nXQnmYr670qSHL97xdnd37/005NPtlEGjfQIyfoklfjALKoVlvto/eMnr
fHAHwThDaSERzxlG+Mg1R6kJhBg+KTpQr3ioQtY/A7geTCKoHI46EdOEm/qQ
OID8Jz4FqZMKcnYNYktFe9IkAkkCrrSsRwOhZ3Oy0riSeR5Kk3xVklSSF6Fv
s88xzISpfQovAzSmGNTAxyHFU5uXJDAC/P3lC+ei4iWfpDFcQrg1wGNTasHG
sS3YygLX4e4oe2hjPm68wSgBo+8002qbeGiN8zQGv+xzhRU8yvPzvp6WVHUy
0m4FieMJSgEITIx5nccTrGySpDNMeaX+CdLajSgrFnwFneAYnhkb0YZbdBm3
qGnw8gutMoAwnleNUoYEB1PvOcybB5E6BAsHIbG27ULYMwJymhhCK8qE5oqS
Max4NIorgv5kwWN7HMsWa6LY9GQOYoj0luh016O7nCHERBHbbFkhFjlP+BYM
yiHuWR1xzz6FPKshy2uKwrpZZnUO/7IohFsJ8F0MJUwywajL3PpHpeJNpTPL
tLAgitSTFy1hKdOjBa6dAsJ4StwaDphOKt73NE6ouJWUbC8u3LyQdPT68/QE
dcEB3ihh7dfR93F1MsA6IAknQexPjgtA8JMpcCXNMeDhLMkjHKIbf1IUFa3H
/RjjgnVEKtMT64hRcarBccFqEeIgmaZczN6hhUC/sTe8BbaqUB2GTDROGhdG
RNNQQn5MR4J1eRHLsKJuOcGofOm2CGDLpulSvCCyRfQVax7ZCTq2Q/U+iyO6
hEtxCJexvXNndxjtU8HiOBoDcQuDrLQTAJwb9zKm6bXgmIev8TFG7XdOadyU
mc4YPefXqPYwXz0Pks3QEh9+ArJ+hPUIVXTDVXn6fvC6HomxEGP+QAiMaj4W
baINYUngFG5IhgVYOW1GKTB1epZ4h74028xqQKwJVj32iLIjKNiNaLxYvSsq
02C8/n99a0sgdo7GA6TLKF0D49dyuhxd0yKicJd+yDWeJ+DyxhbVptyqJh30
VBv/LOJOZIi0/6glhZIqxBQBdl3ANjBIGq/kQnBCMz1MiIgbGKZBiCX3aZMR
pUyn1KdnrvtR9ppVBqXhRr9RogdHKScszSbFgqquIHVAIop4QUG9SgYAVvuI
r8r1XY4UI4Mtb30BRpgWRkSXwAizFCOiy2CEWYUR0fP9V/stWR9lBRGrDuJZ
fJRNcKE/vH2FgqIvw9jYYRqGJL7jrKqFhroabyM3iovHwgGxqiE+eqtb+Hyj
gtyGrGezsaDqluEpy8WeMWgceJYM9yKphUGWAonXYgDgE/l8eiSiB3VWl4ME
lE255Jpxc+xFpJl530TP7Qb2oqapXatWuf3aAtHmrZoy9pxBS+vjkUENpb+3
spklgG7DeQxKH73pvAA/vH1eKeHrYXlEuDoKJAKG/taatcdy4J17Dx6cn3PR
F9A+Ybz2TpeUwTaRDoa2zAO2Ve+RFvP82bs/o30IJtyLXt3eD2pSwm2hZaMx
K9gNW+VWLaHbr/HZLMT5jD6fJflmgE+xKr/CudTNiF7h75ehHyg8iS2YxrYo
jaMaf9Re5GM4ofC9rZ2t8/MA2zmyx1oXepZwDD8e4WBn3F7bvmP9at2/WeBd
Hss1S5gVKITjH6NXeKjfHewxkVm+qsFitmph/PNV1xYg/rVW2UDX5ettPOhW
zqbW69yRizcgtWIOvN5YIA5wZWh6iZEMfRWbdDtexj8Xts0GYvdg64EICoOt
+8b8Ad3J+GqZpWO4CqDIe4qjr0ZjUxC2jfzV5ki/whxpM0WXGOXNsmw2z0kk
8jXwmmo3VqjtZ/mcDAeobZiNqhjX5JObz45LUO9ABgYADTfdylgjmJAZQxSN
I7hUnJYHq4FJZ3iZ77DBDrOPrUPCiMzLGXBeU9a41veGbiaSHY/nWYIx3SLc
qbSLZiIsx5WogihtXAGW/0ppjJfIsVXpFL2JKRcrgZIEiCaQu9sPAzcUiL9G
ZZOGKQz9p9Vw2VHet0d5D5dwIGJ3b1rAcRS5BOLAI2Uao22lhzDqsb2s8QPI
SNP5pM4wvX1SWHvSW6JBidu/RJYckTAIimJVw06VbppV1RFENgaJPEPDHCIY
eXlgtveqc/7BTgjQgJ/m0yqbsL9zPqHqtZguSE4EsojZ3G3VHtSBhrYZpPAp
euaBtHJVa27c47IIbYuKqRjm0R1Hi6wlRF/MENavMCdvJ/b9xiWoUK8lKclq
Fls/FnC7BCcs0IqEwq/qpmU1bF49ELUnce7ZLRCdarYmMBpRQ3WEOOlPhrsp
gZDeE98nlRLWQTNEH9CiGEfFGYuujO+LMwrCSmPpbKwu1p535XJbMBnNNaDI
T8gVbtXIRv4B1hzO2azjNUki05gkayQFEYg8Zbs66S8VEZMOZCQf4zEZJGPC
LPJxhEWRGYCK8H/7M8gJLyoNY7fWVqxiDsTDC1eQZQGVGR4Po3XjGZbdv3v2
/t0lEoB2STjF43l8jPpYvUDTSTVLJxPKcM0TmZ7wFjTTElB9qgnW+fvKkHRy
mqVnZO14m1YncExv45NpzBEBL9HxXsxHcRJnJUEArhJftoAqvQOqFGpcCrhl
W7lrt7JL42JHK+qY7WR+1NKtrxRhmyp6wghh6PuyWXbtLHdwlh8oDizx9NRA
SfRpMxpgyY1OBtdT9rfb1SwnkXfsjDv+jHpKUUWoPVl49J7PCBGO8NxW0c6Z
RZiQFrLHwVr+CjUUamwWjsFYrOTVeY+M8x6p8tm3HoY+lgPZFOv1qMClwWMg
Bvepbib/7IFomrH9fAWI/HNV1wSnKrhTti8sBemOBem2m72YiX8hMIMGSInW
3XRGJkbbZAC9uGw8sObRowIkYuo9lI7H2cjmn5NQAVhwVFSpV6wH6K2pajQr
iR02bjNoPMt/pWXRF2M4+46dgGKsgcW3fmTONipBJJWNIlHtYmieB23p5PCp
9Ax55IXUibASRwFrNm2ih0YVy1ddDzppC4cVr8sp+j158cyIDK7KRSpYLeZE
QJBkeObokICN2wpJQHhPucwOGclS45+ch1euLJGroxMWsFGwVu5IGAKF0RJE
Z65MEFmsXcWdhjTpbGzEAcsUoKS45TmosAiDmA8XUleIGAvbuaRgkPLZtymi
d8LTa8LYEvd4Q4IpTPu58BEfm0s2XOJ/gDqgVZqFwgpPqIcv95beqm17q7Z8
1uauaEOakgJHsZwe580B4eTMe+xUl3upaMx0T9NFy3PlAXxGd59wjdZi3OQi
RKsB0unnXMhX7PKWmuECbKFKCvehBxwdoweAlsHs3y5Y01VRm4QEpKnws/E8
lba/AS7lF/aWBtIlUGUUC7PjnDyi6Cw0REeQDuOuhr5WoUIRrs4XxiXIRFcj
TSEoSNC1ddDuEM75Sz4bNEVaMxqr8FS8XmuXmw641wW5ZxL0dLExgBdAtAZk
Qtg2Hi2xGTONf8mm86nsiIx/3qbQSBCNSCJYWMnYZj57oKQSIkIkEMp6LlxG
C2+YfYRKNG8wavoOdA4MUNexkf6RmxetBouP+E5ecqa2iowYpp1/oKzJP6hl
21MoMaOZiabzwKoXirOGKb6M6XxFMYq2doT/jihltgM1uXsB7igkXAxYS6Oc
sYlaeOIgbAVnPwHnlMOChBrNTkpSCa3sQWujy1d64UFddWuAIL1P05kSct6a
nCQ1x1Iwox7fOURl+KaQlzpmczm/P55TQTr/ktDGkQkuIoYw3afRhL+aoG97
LsngNjleWKRxYQ2SzDzOSrgW5K4V/RHeO07zFDQA7yLjAyxtxabC6Iyk+Q7q
hi5ZIczqb0g52HeKwD+lmBKrlzM9REQQaGelTwWWUOmkjMf1IOQIju8OgH1s
bYXyppJxiqwtjmG9cUk56ifFmUgIMZUjypOJu5P22BzF6bNcJJgSE/ZvuL7j
/Qg/49MsMZ6BLIV+mQ2vDETfVTjYHEbPRUNkYih1c4hHaavenrG9eofde0Hz
SzFbuHbqyBs8Bd+bfBhqK7p9VSAprBTAyLiCuxxozAdIgKgYHXNRGfo9Sccx
SNOqxTuMVTaFsQEX6hQxqbaDCQoLVuHV/Mx2n6vK0fFhpyrBCOoVdqDuxtKm
xyaBU3RrbjzQ7Pnv0Bz2WZD34mxS2dBCGhGhY/xHxEfHkRRhcQZUzEUu9mIz
iBfZEYoR9zFGiwZXbeAgJLrrxKjhVdryu4IK+quVBCcEYRSDWCS+qBJXLh2z
xqCT/ctQhENGijC2cAM5LE2wgB4N/DTDyK6kobFwhQ6nz3CLkLH+3bzqgpRS
K0NrbhEB4QCvaEP+e29TDVa9A61rAdjvRfuivZ8FhHW1oJWVQV31LQoSijZw
55va69o9BvT4GBENw/RsPQ6qn/VSB3YPc3AXgsRYzswxVlu7W+fnfYNCsoa/
ACaA5pTTfSXAOSQfz/MRQwCvS7hSlVLEpeyKBNgYOm0ORxvWNL+48sNyGmEH
mlHGfppwdpbh8IoA/NGGXgcBdH0rZplQ4y6IKSHPJ/aIhsW6PTrcz4CSoVqA
a+y5sp9q0+hRWORCCoueRaivARb3GupKr0HXCApWm6S8LF8xqwvsxU4wOeii
8WpjoDOrCiqWg4pXVs+ZfPUpzBSjNYJiLzZQtpISWhJalgNXCkua0hxGhSFs
DFaybDRw2p1PeYGDlqBn2XAu2u8zZaMSkumKxsZH6OQb1R6aMn0lbBZFUzos
RWMUl5MsPkZXCRvRSe3X0TFLUZ3zNAoDiIZqdA7AXARrs+SAaZHnxdvmvxZ2
lHSKGwVDzCsOW8BdYrOQrGZ6BWjy9zegXllkQwmIozI5UoOMRSCjLyleZqvg
MgVoVPL0zcJPrTCpRtyMWjRaESvhJZN3MJnbjiZatM8I5eKRrV5i7U8btFIy
qfhL3RS2EIpSL9ka78I7fF1pxJHr1K8eNSHr0MgmYg43iF5S5s2KNxLkbm0o
ZIW3zQ7YmnzEOlaGly6uwvErG46CBlfQBUtJ0QBdarLcFNjQsJV/E0PEvgEw
ANXNxO6Y5J6qAuUervEZfCLljnR6TXwGVHD+HZ/HtaQmqyY4aZmgF7MYjNYz
v4ISC76sP+eCYFbuxZ8C6waaoI5DlR/f6Gv6oRR77Hu2PtAmLuWwZCEA7pYX
a6MVdNtDrQpUaVg4fCe8v0Dculs+iyvsqAdhSySA7+MSaGT2rzS5bRWqOPl5
TuYJZ8HlMr5MBVDMuL9zZ4doIWUnAccM3E/EQBAp0Gs5Z8OqZw12hC8IJjUb
8QQR81giu6n2NEW8cdcevMOktiZpjCHL0aKYA+V6z/eLMgY3G/xEvS3uXO0F
BXnelcomik7h2lNSb4ytOERRkeSh9XmB8jkMUqaekSPWKeYz5FDWoUfGOiZQ
KEhh8mE6HlNJNSnWBZxDo2CzUeq4SChpT4PMKU6gUROLOokrSbzwzgxEG6fj
0DSq5gS+Ab4v4vUl8wKqFycucB9PEbalSeZ946ktffGf+7M0i9RVETlnCXlK
gjolTZJt31tJR6Cbrq6FXdLeSe0FMFXuaAs8PRgMqMA0+vv3R6iQASlky5D5
sMdhImnyWDofnXN6BeOQ1/eX/ErRt2le/H//T414lVWs4/iWYNobW2T6RhM9
XGAdVpcFZJ9TKt7ZCfETdwFO0skMra+6H8N2L3Ji7Zk3cLD72PO0qlAV+Avd
3YM5QBeD9v8X0sK/xXWFWYHw2CL6NktBuoe/3hawP/gR835hVf87m4/h6ICs
4yCYw/0Oy4yn9sG/AtOH3wKXWb/hL8OVfYs7epHNh+b/B3BXtOoj9gEA

-->

</rfc>
