<?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"?>
<?rfc toc="yes"?>
<?rfc compact="no"?>
<?rfc subcompact="no"?>
<?rfc iprnotified="no"?>
<?rfc strict="yes"?>
<?rfc-ext allow-markup-in-artwork="yes" ?>
<?rfc-ext include-index="no" ?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" docName="draft-ietf-netconf-list-pagination-rc-10" category="std" consensus="true" ipr="trust200902" updates="8040" tocInclude="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="RESTCONF Pagination Support">
        RESTCONF Extensions to Support List Pagination
    </title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-list-pagination-rc-10"/>
    <author fullname="Kent Watsen" initials="K." surname="Watsen">
      <organization>Watsen Networks</organization>
      <address>
        <email>kent+ietf@watsen.net</email>
      </address>
    </author>
    <author fullname="Qin Wu" initials="Q." surname="Wu">
      <organization>Huawei Technologies</organization>
      <address>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <author fullname="Per Andersson" initials="P." surname="Andersson">
      <organization>Ionio Systems</organization>
      <address>
        <email>per.ietf@ionio.se</email>
      </address>
    </author>
    <author fullname="Olof Hagsand" initials="O." surname="Hagsand">
      <organization>SUNET</organization>
      <address>
        <email>olof@hagsand.se</email>
      </address>
    </author>
    <author fullname="Hongwei Li" initials="H." surname="Li">
      <organization>Hewlett Packard Enterprise</organization>
      <address>
        <email>flycoolman@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>OPS Area</area>
    <workgroup>NETCONF Working Group</workgroup>
    <abstract>
      <t>This document defines a mapping of the list pagination mechanism
        defined in <xref target="I-D.ietf-netconf-list-pagination"/>
        to RESTCONF <xref target="RFC8040"/>.</t>
      <t>This document updates RFC 8040, to declare "list" and "leaf-list" as
        valid resource targets for the RESTCONF GET
        operation, to define GET query parameters necessary
        for list pagination, and to define a media-type for
        XML-based lists.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>This document defines a mapping of the list pagination mechanism
        defined in <xref target="I-D.ietf-netconf-list-pagination"/>
        to RESTCONF <xref target="RFC8040"/>.</t>
      <t>This document updates RFC 8040, as described in <xref target="updates"/>.</t>
      <t>Declaring "list" and "leaf-list" as valid resource targets
        for the GET operation is necessary for list pagination.</t>
      <section>
        <name>Terminology</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>
      </section>
      <section>
        <name>Conventions</name>
        <t>Various examples in this document use "BASE64VALUE=" as a
          placeholder value for binary data that has been base64
          encoded (per <xref section="9.8" target="RFC7950"/>).  This
          placeholder value is used because real base64 encoded structures
          are often many lines long and hence distracting to the example
          being presented.</t>
      </section>
    </section>
    <!-- intro -->

    <section anchor="updates">
      <name>Updates to RFC 8040</name>
      <section>
        <name>Resource Targets</name>
        <t>This document extends <xref section="3.5" target="RFC8040"/>
          to add "list" and "leaf-list" nodes (not just their entries)
          as valid data resources for the "GET" operation.</t>
      </section>
      <section>
        <name>Media Type</name>
        <t>This document extends <xref section="3.2" target="RFC8040"/>
          to add a new media type, "application/yang-data+xml-list", to
          encode "list" and "leaf-list" nodes in XML.</t>
        <t>The "application/yang-data+xml-list" media-type defines a
          pseudo top-level element called "xml-list" that is used to
          wrap the response set, thus ensuring that a single top-level
          element is returned for the XML encoding, as required by <xref section="4.3" target="RFC8040"/>.</t>
        <t>For JSON, the existing "application/yang-data+json" media type is
          sufficient, as the JSON format has built-in support for encoding
          arrays.</t>
        <t>The "application/yang-data+xml-list" media type is registered
          in <xref target="media-type"/>.</t>
      </section>
      <section>
        <name>Query Parameters</name>
        <t>This document extends <xref section="4.8" target="RFC8040"/>
          to add new query parameters "limit", "offset", "cursor", "direction",
          "sort-by", "locale", "where", and "sublist-limit".</t>
        <t>These eight query parameters correspond to those defined in
          Sections 3.1 and 3.2 in <xref target="I-D.ietf-netconf-list-pagination"/>.</t>
        <t>Note that complex pagination with combination of query parameters may
          cause performance strain on constrained devices due to intensive
          processing on both the server and the client.</t>
        <artwork><![CDATA[
+---------------+---------+-----------------------------------------+
| Name          | Methods | Description                             |
+---------------+---------+-----------------------------------------+
| limit         | GET,    | Limits the number of entries returned.  |
|               | HEAD    | If not specified, the number of entries |
|               |         | that may be returned is unbounded.      |
|               |         |                                         |
| offset        | GET,    | Indicates the number of entries in the  |
|               | HEAD    | result set that should be skipped over  |
|               |         | when preparing the response.  If not    |
|               |         | specified, then no entries in the       |
|               |         | result set are skipped.                 |
|               |         |                                         |
| cursor        | GET,    | Indicates where to start the working    |
|               | HEAD    | result set, the previous entries are    |
|               |         | skipped over.  If not specified, then   |
|               |         | no entries in the result set are        |
|               |         | skipped over.                           |
|               |         |                                         |
| direction     | GET,    | Indicates the direction that the result |
|               | HEAD    | set is to be traversed.  If not         |
|               |         | specified, then the result set is       |
|               |         | traversed in the "forwards" direction.  |
|               |         |                                         |
| sort-by       | GET,    | Indicates the node name that the result |
|               | HEAD    | set should be sorted by.  If not        |
|               |         | specified, then the result set's        |
|               |         | default order is used, per YANG's       |
|               |         | "ordered-by" statement.                 |
|               |         |                                         |
| locale        | GET,    | Specifies the locale the server should  |
|               | HEAD    | use when collating the result set. If   |
|               |         | not specified, the server chooses what  |
|               |         | locale is used for collation.           |
|               |         |                                         |
| where         | GET,    | Specifies a filter expression that      |
|               | HEAD    | result set entries must match.  If      |
|               |         | not specified, then no entries are      |
|               |         | filtered from the result set.           |
|               |         |                                         |
| sublist-limit | GET,    | Limits the number of entries returned   |
|               | HEAD    | returned for descendent lists and       |
|               |         | leaf-lists. If not specified, the       |
|               |         | number of entries that may be returned  |
|               |         | is unbounded.                           |
+---------------+---------+-----------------------------------------+
]]></artwork>
        <t>For all of the query parameters, the query parameter is only
          allowed for the GET and HEAD methods on "list" and "leaf-list"
          data resources. A "400 Bad Request" status-line MUST be returned
          if used with any other method or resource type. The error-tag
          value "operation-not-supported" is used in this case.</t>
        <t>Per the conformance defined in <xref section="3.1" target="I-D.ietf-netconf-list-pagination"/>,
          all of these parameters MUST be supported for all "config true" lists
          and leaf-lists, and SHOULD be supported for "config false" lists and
          leaf-lists. A server MAY disable the support for some or all
          "config false" lists, as described in <xref section="3.3" target="I-D.ietf-netconf-list-pagination"/>.</t>
        <section>
          <name>The "limit" Query Parameter</name>
          <t>The "limit" query parameter corresponds to the "limit"
            parameter defined in <xref section="3.1.7" target="I-D.ietf-netconf-list-pagination"/>.</t>
          <t>If the limit value is invalid, i.e. not an unsigned 32-bit integer
            greater than or equal to 1 or the string "unbounded", then a
            "400 Bad Request" status-line MUST be returned with the error-type
            value "application" and error-tag value "invalid-value".</t>
        </section>
        <section>
          <name>The "offset" Query Parameter</name>
          <t>The "offset" query parameter corresponds to the "offset"
            parameter defined in <xref section="3.1.5" target="I-D.ietf-netconf-list-pagination"/>.</t>
          <t>If the offset value is invalid, a "400 Bad Request" status-line
            MUST be returned with the error-type value "application" and
            error-tag value "invalid-value".</t>
          <t>If the offset value exceeds the number of entries in the
            working result set, then a "416 Range Not Satisfiable"
            status-line MUST be returned with the error-type value
            "application", error-tag value "invalid-value", and SHOULD also
            include the "offset-out-of-range" identity as the error-app-tag
            value.</t>
        </section>
        <section>
          <name>The "cursor" Query Parameter</name>
          <t>The "cursor" query parameter corresponds to the "cursor"
            parameter defined in <xref section="3.1.6" target="I-D.ietf-netconf-list-pagination"/>. As described in
            <xref section="3.1.5" target="I-D.ietf-netconf-list-pagination"/>
            the server does not keep any stateful information about the "next"
            and "previous" cursor or the current page. Due to their ephemeral
            nature, cursor values are never cached.</t>
          <t>If the cursor value is unknown, i.e. the key does not exist,
            a "404 Not Found" status-line MUST be returned with the error-type
            value "application" and error-tag value "invalid-value", and SHOULD
            also include the "cursor-not-found" identity as the error-app-tag
            value.</t>
          <t>If the "cursor" query parameter is not supported on the target
            node, then a "501 Not Implemented" status-line MUST be returned
            with error-type value "application" and error-tag value
            "operation-not-supported".</t>
        </section>
        <section>
          <name>The "direction" Query Parameter</name>
          <t>The "direction" query parameter corresponds to the "direction"
            parameter defined in <xref section="3.1.4" target="I-D.ietf-netconf-list-pagination"/>.</t>
          <t>If the direction value is invalid, then a "400 Bad Request"
            status-line MUST be returned with the error-type value
            "application" and error-tag value "invalid-value".</t>
        </section>
        <section>
          <name>The "sort-by" Query Parameter</name>
          <t>The "sort-by" query parameter corresponds to the "sort-by"
            parameter defined in <xref section="3.1.2" target="I-D.ietf-netconf-list-pagination"/>.</t>
          <t>If the specified node identifier is invalid, then a "400 Bad
            Request" status-line MUST be returned with the error-type value
            "application" and error-tag value "invalid-value".</t>
        </section>
        <section>
          <name>The "locale" Query Parameter</name>
          <t>The "locale" query parameter corresponds to the
            "locale" parameter defined in <xref section="3.1.3" target="I-D.ietf-netconf-list-pagination"/>.</t>
          <t>If the specified node identifier is invalid, i.e. the locale is
            unknown to the server, then a "501 Not Implemented" status-line
            MUST be returned with the error-type value "application" and
            error-tag value "invalid-value", and SHOULD also include the
            "locale-unavailable" identity as the error-app-tag value.</t>
          <t>If "locale" is supplied but not "sort-by", a "400 Bad Request"
            status-line MUST be returned with the error-type "application" and
            error-tag value "invalid-value".</t>
        </section>
        <section>
          <name>The "where" Query Parameter</name>
          <t>The "where" query parameter corresponds to the "where"
            parameter defined in <xref section="3.1.1" target="I-D.ietf-netconf-list-pagination"/>.</t>
          <t>Prefixes in the XPath expression MUST be YANG module names.</t>
          <t>If the specified XPath expression is invalid, then a "400 Bad
            Request" status-line MUST be returned with the error-type value
            "application" and error-tag value "invalid-value".</t>
        </section>
        <section>
          <name>The "sublist-limit" Query Parameter</name>
          <t>The "sublist-limit" query parameter corresponds to the
            "sublist-limit" parameter defined in <xref section="3.2.1" target="I-D.ietf-netconf-list-pagination"/>.</t>
          <t>If the sublist-limit value is invalid, then a "400 Bad Request"
            status-line MUST be returned with the error-type value
            "application" and error-tag value "invalid-value".</t>
        </section>
      </section>
    </section>
    <!-- Updates to RFC 8040 -->


    <section>
      <name>IANA Considerations</name>
      <section>
        <name>The "RESTCONF Capability URNs" Registry</name>
        <t>This document registers six capabilities in the RESTCONF
          Capability URNs <xref target="RFC8040"/> maintained at
          <eref target="https://www.iana.org/assignments/restconf-capability-urns/restconf-capability-urns.xhtml"/>.
          Following the instructions defined in <xref section="11.4" target="RFC8040"/>,
          the below registrations are requested:</t>
        <t>All registrations are to use this document (RFC XXXX)
          for the "Reference" value.</t>
        <artwork><![CDATA[
Index          Capability Identifier
--------------------------------------------------------------------
:limit         urn:ietf:params:restconf:capability:limit:1.0
:offset        urn:ietf:params:restconf:capability:offset:1.0
:cursor        urn:ietf:params:restconf:capability:cursor:1.0
:direction     urn:ietf:params:restconf:capability:direction:1.0
:sort-by       urn:ietf:params:restconf:capability:sort-by:1.0
:locale        urn:ietf:params:restconf:capability:locale:1.0
:where         urn:ietf:params:restconf:capability:where:1.0
:sublist-limit urn:ietf:params:restconf:capability:sublist-limit:1.0
]]></artwork>
      </section>
      <section>
        <name>The "Media Types" Registry</name>
        <t>This document registers one media type in the "application"
          subregistry of the Media Types registry <xref target="RFC6838"/>
          <xref target="RFC4855"/> maintained at <eref target="https://www.iana.org/assignments/media-types/media-types.xhtml#application"/>.
            Following the format defined in <xref target="RFC4855"/>, the below
            registration is requested:</t>
        <section anchor="media-type">
          <name>Media Type "application/yang-data+xml-list"</name>
          <artwork><![CDATA[Type name: application

   Subtype name: yang-data+xml-list

   Required parameters: None

   Optional parameters: None

   Encoding considerations: 8-bit
      Each conceptual YANG data node is encoded according to the
      XML Encoding Rules and Canonical Format for the specific
      YANG data node type defined in [RFC7950]. 

   Security considerations: Security considerations related
      to the generation and consumption of RESTCONF messages
      are discussed in Section 12 of RFC 8040.  Additional
      security considerations are specific to the semantics
      of particular YANG data models.  Each YANG module is
      expected to specify security considerations for the
      YANG data defined in that module.

   Interoperability considerations: RFC XXXX specifies the
      format of conforming messages and the interpretation
      thereof.

   Published specification: RFC XXXX

   Applications that use this media type: Instance document data
      parsers used within a protocol or automation tool that
      utilize the YANG Patch data structure.

   Fragment identifier considerations: Fragment identifiers for
      this type are not defined.  All YANG data nodes are
      accessible as resources using the path in the request URI.

   Additional information:

      Deprecated alias names for this type: N/A
      Magic number(s): N/A
      File extension(s): None
      Macintosh file type code(s): "TEXT"

   Person & email address to contact for further information:
      See the Authors' Addresses section of RFC XXXX.

   Intended usage: COMMON

   Restrictions on usage: N/A

   Author: See the Authors' Addresses section of RFC XXXX.

   Change controller: Internet Engineering Task Force
      (mailto:iesg@ietf.org).

   Provisional registration? (standards tree only): no
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>This document introduces protocol operations for paging
        through data already provided by the RESTCONF protocol, and
        hence does not introduce any new security considerations.</t>
      <t>This document does not define a YANG module and hence there
        are no data modeling considerations beyond those discussed in
        <xref target="I-D.ietf-netconf-list-pagination"/>.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <!-- Terms -->
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8040.xml"/>
        <!-- RESTCONF -->
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <!-- Terms new -->
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-list-pagination.xml"/>
      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4855.xml"/>
        <!-- ??? -->
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6838.xml"/>
        <!-- ??? -->
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7950.xml"/>
        <!-- ??? -->
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-restconf-collection.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.zheng-netconf-fragmentation.xml"/>
      </references>
    </references>
    <section>
      <name>Example YANG Module</name>
      <t>The examples within this document use the "example-social" YANG
        module defined in <xref section="A.1" target="I-D.ietf-netconf-list-pagination"/>.</t>
    </section>
    <section>
      <name>Example Data Set</name>
      <t>The Example Data Set used by the examples is defined in
        <xref section="A.2" target="I-D.ietf-netconf-list-pagination"/>.</t>
    </section>
    <section>
      <name>Example Queries</name>
      <section>
        <name>List pagination with all query parameters</name>
        <t>This example mimics that <xref section="A.3.9" target="I-D.ietf-netconf-list-pagination"/>.
           This example is presented twice, once using XML and again using JSON.</t>
        <t>XML:
        </t>
        <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

GET /restconf/ds/ietf-datastores:operational/example-social:members/\
member?where=//stats//joined[starts-with(timestamp,'2020')]&sort-by=\
timestamp&direction=backwards&offset=2&limit=2&sublist-limit=1 HTTP/\
1.1
Host: example.com
Accept: application/yang-data+xml-list
]]></artwork>
        <t>Response from the RESTCONF server:
        </t>
        <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

HTTP/1.1 200 OK
Date: Thu, 26 Jan 2017 20:56:30 GMT
Server: example-server
Last-Modified: Thu, 26 Jan 2017 20:55:30 GMT
Content-Type: application/yang-data+xml-list

<xml-list>
  <member
    xmlns="https://example.com/ns/example-social"
    xmlns:lp="urn:ietf:params:xml:ns:yang:ietf-list-pagination"
    lp:remaining="1" lp:locale="en_US">
    <member-id>eric</member-id>
    <email-address>eric@example.com</email-address>
    <password>$0$1543</password>
    <avatar>BASE64VALUE=</avatar>
    <tagline>Go to bed with dreams; wake up with purpose.</tagline>
    <following>alice</following>
    <posts>
      <post>
        <timestamp>2020-09-17T18:02:04Z</timestamp>
        <title>Son, brother, husband, father</title>
        <body>What's your story?</body>
      </post>
    </posts>
    <favorites>
      <bits lp:remaining="2" lp:locale="en_US">two</bits>
    </favorites>
    <stats>
      <joined>2020-09-17T19:38:32Z</joined>
      <membership-level>pro</membership-level>
      <last-activity>2020-09-17T18:02:04Z</last-activity>
    </stats>
  </member>
  <member
    xmlns="https://example.com/ns/example-social"
    xmlns:lp="urn:ietf:params:xml:ns:yang:ietf-list-pagination"
    lp:remaining="1" lp:locale="en_US">
    <member-id>bob</member-id>
    <email-address>bob@example.com</email-address>
    <password>$0$1543</password>
    <avatar>BASE64VALUE=</avatar>
    <tagline>Here and now, like never before.</tagline>
    <posts>
      <post lp:remaining="2" lp:locale="en_US">
        <timestamp>2020-08-14T03:32:25Z</timestamp>
        <body>Just got in.</body>
      </post>
    </posts>
    <favorites>
      <decimal64-numbers lp:remaining="1" lp:locale="en_US">3.14159<\
/decimal64-numbers>
    </favorites>
    <stats>
      <joined>2020-08-14T03:30:00Z</joined>
      <membership-level>standard</membership-level>
      <last-activity>2020-08-14T03:34:30Z</last-activity>
    </stats>
  </member>
</xml-list>
]]></artwork>
        <t>JSON:
        </t>
        <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

GET /restconf/ds/ietf-datastores:running/example-social:members/memb\
er?where=//stats//joined[starts-with(timestamp,'2020')]&sort-by=time\
stamp&direction=backwards&offset=2&limit=2&sublist-limit=1 HTTP/1.1
Host: example.com
Accept: application/yang-data+json
]]></artwork>
        <t>Response from the RESTCONF server:
        </t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 26 Jan 2017 20:56:30 GMT
Server: example-server
Last-Modified: Thu, 26 Jan 2017 20:55:30 GMT
Content-Type: application/yang-data+json

{
  "example-social:member": [
    {
      "@": {
        "ietf-list-pagination:remaining": 1,
        "ietf-list-pagination:locale": "en_US"
      },
      "member-id": "eric",
      "email-address": "eric@example.com",
      "password": "$0$1543",
      "avatar": "BASE64VALUE=",
      "tagline": "Go to bed with dreams; wake up with purpose.",
      "following": ["alice"],
      "posts": {
        "post": [
          {
            "@": {
              "ietf-list-pagination:remaining": 2,
              "ietf-list-pagination:locale": "en_US"
            },
            "timestamp": "2020-09-17T18:02:04Z",
            "title": "Son, brother, husband, father",
            "body": "What's your story?"
          }
        ]
      },
      "favorites": {
        "bits": ["two"],
        "@example-social:bits": [
          {
            "ietf-list-pagination:remaining": 2,
            "ietf-list-pagination:locale": "en_US"
          }
        ]
      },
      "stats": {
        "joined": "2020-09-17T19:38:32Z",
        "membership-level": "pro",
        "last-activity": "2020-09-17T18:02:04Z"
      }
    },
    {
      "member-id": "bob",
      "email-address": "bob@example.com",
      "password": "$0$1543",
      "avatar": "BASE64VALUE=",
      "tagline": "Here and now, like never before.",
      "posts": {
        "post": [
          {
            "@": {
              "ietf-list-pagination:remaining": 2,
              "ietf-list-pagination:locale": "en_US"
            },
            "timestamp": "2020-08-14T03:32:25Z",
            "body": "Just got in."
          }
        ]
      },
      "favorites": {
        "decimal64-numbers": ["3.14159"],
        "@example-social:decimal64-numbers": [
          {
            "ietf-list-pagination:remaining": 1,
            "ietf-list-pagination:locale": "en_US"
          }
        ]
      },
      "stats": {
        "joined": "2020-08-14T03:30:00Z",
        "membership-level": "standard",
        "last-activity": "2020-08-14T03:34:30Z"
      }
    }
  ]
}
]]></artwork>
      </section>
    </section>
    <!-- Example Queries -->

    <!--
    <section title="Contributors" numbered="no">
      <figure>
        <artwork>David Cornejo
dcornejo@gmail.com</artwork>
      </figure>
    </section>
    -->
    <section numbered="false">
      <name>Acknowledgements</name>
      <t>This work has benefited from the discussions of RESTCONF resource
      collection over the years, in particular,
      <xref target="I-D.ietf-netconf-restconf-collection"/> which provides
      enhanced filtering features for the retrieval of data nodes with the
      GET method and <xref target="I-D.zheng-netconf-fragmentation"/> which
      document large size data handling challenge. The authors would like to
      thank the following for lively discussions on list (ordered by first
      name): Andy Bierman, Martin Björklund, Robert Varga, and
      Rob Wilton.</t>
    </section>
  </back>
</rfc>
