<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <!--
    RFC 2616 ALPHA - Matches:
      * p
      * O
      * M
      * g
      * Y
  -->
  <define name="RFC3986-ALPHA">
    <data type="string">
      <param name="pattern">([A-Za-z])</param>
    </data>
  </define>
  <!--
    RFC 2616 BIT - Matches:
      * 1
      * 0
  -->
  <define name="RFC3986-BIT">
    <data type="string">
      <param name="pattern">([0-1])</param>
    </data>
  </define>
  <!--
    RFC 2616 CHAR - Matches:
      * 6
      * D
      * P
      * t
      * 5
  -->
  <define name="RFC3986-CHAR">
    <data type="string">
      <param name="pattern">([\t-\r\n -])</param>
    </data>
  </define>
  <!--
    RFC 2616 CR - Matches:
      * [unable to generate good examples]
  -->
  <define name="RFC3986-CR">
    <data type="string">
      <param name="pattern">(\n)</param>
    </data>
  </define>
  <!--
    RFC 2616 CRLF - Matches:
      * [unable to generate good examples]
  -->
  <define name="RFC3986-CRLF">
    <data type="string">
      <param name="pattern">(\n\r)</param>
    </data>
  </define>
  <!--
    RFC 2616 CTL - Matches:
      * [unable to generate good examples]
  -->
  <define name="RFC3986-CTL">
    <data type="string">
      <param name="pattern">([\t-\r\n])</param>
    </data>
  </define>
  <!--
    RFC 2616 DIGIT - Matches:
      * 6
      * 8
      * 4
      * 7
      * 5
  -->
  <define name="RFC3986-DIGIT">
    <data type="string">
      <param name="pattern">([0-9])</param>
    </data>
  </define>
  <!--
    RFC 2616 DQUOTE - Matches:
      * "
  -->
  <define name="RFC3986-DQUOTE">
    <data type="string">
      <param name="pattern">(")</param>
    </data>
  </define>
  <!--
    RFC 2616 HEXDIG - Matches:
      * c
      * b
      * 7
      * d
      * E
  -->
  <define name="RFC3986-HEXDIG">
    <data type="string">
      <param name="pattern">([0-9A-Fa-f])</param>
    </data>
  </define>
  <!--
    RFC 2616 HTAB - Matches:
      * [unable to generate good examples]
  -->
  <define name="RFC3986-HTAB">
    <data type="string">
      <param name="pattern">(\t)</param>
    </data>
  </define>
  <!--
    RFC 2616 LF - Matches:
      * [unable to generate good examples]
  -->
  <define name="RFC3986-LF">
    <data type="string">
      <param name="pattern">(\r)</param>
    </data>
  </define>
  <!--
    RFC 2616 LWSP - Matches:
      *   
      *  
      *    
  -->
  <define name="RFC3986-LWSP">
    <data type="string">
      <param name="pattern">(((\n\r|)[\t ])*)</param>
    </data>
  </define>
  <!--
    RFC 2616 OCTET - Matches:
      * -
      * k
      * }
      * B
      * j
  -->
  <define name="RFC3986-OCTET">
    <data type="string">
      <param name="pattern">([\t-\r\n -ÿ])</param>
    </data>
  </define>
  <!--
    RFC 2616 SP - Matches:
      *  
  -->
  <define name="RFC3986-SP">
    <data type="string">
      <param name="pattern">( )</param>
    </data>
  </define>
  <!--
    RFC 2616 VCHAR - Matches:
      * w
      * M
      * G
      * _
      * i
  -->
  <define name="RFC3986-VCHAR">
    <data type="string">
      <param name="pattern">([!-~])</param>
    </data>
  </define>
  <!--
    RFC 2616 WSP - Matches:
      *  
  -->
  <define name="RFC3986-WSP">
    <data type="string">
      <param name="pattern">([\t ])</param>
    </data>
  </define>
  <!--
    RFC 2616 URI - Matches:
      * L:/R//m?
      * vTVajDKQe:?
      * mV:/?%ccR
      * k:/%2E%0C(?%Df%A1I%43v%E6+%Fc
      * o:?
  -->
  <define name="RFC3986-URI">
    <data type="string">
      <param name="pattern">([A-Za-z][\+\--\.0-9A-Za-z]*:(/((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)?||(//((%[0-9A-Fa-f]{2}|[!$&amp;-\.0-;=A-Z_a-z~])*@)?(\[((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))|[Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)\]|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])|(%[0-9A-Fa-f]{2}|[!$&amp;-\.0-9;=A-Z_a-z~])*)(:[0-9]*)?|(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+)(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)(\?(%[0-9A-Fa-f]{2}|[!$&amp;-;=\?-Z_a-z~])*)?(#(%[0-9A-Fa-f]{2}|[!$&amp;-;=\?-Z_a-z~])*)?)</param>
    </data>
  </define>
  <!--
    RFC 2616 hier-part - Matches:
      * /
      * %1E*@/%A3/%ee
      * NW%b5c%d9%E3~%bf%fFm%e7$~%DC%2a-%30
      * //u@:
      * %C2%92ykV%9es+%CD%0d%183/Q/en
  -->
  <define name="RFC3986-hier-part">
    <data type="string">
      <param name="pattern">((/((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)?||(//((%[0-9A-Fa-f]{2}|[!$&amp;-\.0-;=A-Z_a-z~])*@)?(\[((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))|[Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)\]|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])|(%[0-9A-Fa-f]{2}|[!$&amp;-\.0-9;=A-Z_a-z~])*)(:[0-9]*)?|(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+)(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*))</param>
    </data>
  </define>
  <!--
    RFC 2616 URI-reference - Matches:
      * ?#
      * /
      * sYJd+Lb:/#
      * dK2zLeVnd:/?%c6'%17%99w#%0e
      * ?%e3
  -->
  <define name="RFC3986-URI-reference">
    <data type="string">
      <param name="pattern">(([A-Za-z][\+\--\.0-9A-Za-z]*:(/((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)?||(//((%[0-9A-Fa-f]{2}|[!$&amp;-\.0-;=A-Z_a-z~])*@)?(\[((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))|[Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)\]|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])|(%[0-9A-Fa-f]{2}|[!$&amp;-\.0-9;=A-Z_a-z~])*)(:[0-9]*)?|(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+)(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)|/((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)?||(//((%[0-9A-Fa-f]{2}|[!$&amp;-\.0-;=A-Z_a-z~])*@)?(\[((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))|[Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)\]|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])|(%[0-9A-Fa-f]{2}|[!$&amp;-\.0-9;=A-Z_a-z~])*)(:[0-9]*)?|(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-9;=Z_a-z~])+)(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)(\?(%[0-9A-Fa-f]{2}|[!$&amp;-;=\?-Z_a-z~])*)?(#(%[0-9A-Fa-f]{2}|[!$&amp;-;=\?-Z_a-z~])*)?)</param>
    </data>
  </define>
  <!--
    RFC 2616 absolute-URI - Matches:
      * m74:
      * QgkuIKI.H:/?
      * Bs:/
      * l:/_%ED7%f4%aB5?r%9f
      * M:/%4D?
  -->
  <define name="RFC3986-absolute-URI">
    <data type="string">
      <param name="pattern">([A-Za-z][\+\--\.0-9A-Za-z]*:(/((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)?||(//((%[0-9A-Fa-f]{2}|[!$&amp;-\.0-;=A-Z_a-z~])*@)?(\[((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))|[Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)\]|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])|(%[0-9A-Fa-f]{2}|[!$&amp;-\.0-9;=A-Z_a-z~])*)(:[0-9]*)?|(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+)(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)(\?(%[0-9A-Fa-f]{2}|[!$&amp;-;=\?-Z_a-z~])*)?)</param>
    </data>
  </define>
  <!--
    RFC 2616 relative-ref - Matches:
      * ?%8a%fd#
      * /?p#%Ffz
      * /G%Fd%c6//H/j83LJ%9B?o%Ca*d%BB#%FBw
      * #
      * #%7c
  -->
  <define name="RFC3986-relative-ref">
    <data type="string">
      <param name="pattern">((/((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)?||(//((%[0-9A-Fa-f]{2}|[!$&amp;-\.0-;=A-Z_a-z~])*@)?(\[((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))|[Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)\]|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])|(%[0-9A-Fa-f]{2}|[!$&amp;-\.0-9;=A-Z_a-z~])*)(:[0-9]*)?|(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-9;=Z_a-z~])+)(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)(\?(%[0-9A-Fa-f]{2}|[!$&amp;-;=\?-Z_a-z~])*)?(#(%[0-9A-Fa-f]{2}|[!$&amp;-;=\?-Z_a-z~])*)?)</param>
    </data>
  </define>
  <!--
    RFC 2616 relative-part - Matches:
      * b%1ag!P%17O%24%B9%02%7dsm%1ay/mwx%b1%AEA
      * //6u%3F%fe%97%3bN@%50%2dQX%BA/%dFC%a4-%D5V
      * /
      * //@224.254.250.154/%3B
      * 4a
  -->
  <define name="RFC3986-relative-part">
    <data type="string">
      <param name="pattern">((/((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)?||(//((%[0-9A-Fa-f]{2}|[!$&amp;-\.0-;=A-Z_a-z~])*@)?(\[((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))|[Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)\]|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])|(%[0-9A-Fa-f]{2}|[!$&amp;-\.0-9;=A-Z_a-z~])*)(:[0-9]*)?|(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-9;=Z_a-z~])+)(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*))</param>
    </data>
  </define>
  <!--
    RFC 2616 scheme - Matches:
      * QG
      * A
      * Pds
      * rJlxw
      * w2
  -->
  <define name="RFC3986-scheme">
    <data type="string">
      <param name="pattern">([A-Za-z][\+\--\.0-9A-Za-z]*)</param>
    </data>
  </define>
  <!--
    RFC 2616 authority - Matches:
      * 7b%fB%8e%Fee@[31e:45F:BE95:CC6A:4D:36CF:CC37:fc2]:5560
      * 136.165.254.57
      * 251.126.148.120
      * 121.111.255.106:41
      * H6%e4IO)%D1c@*s
  -->
  <define name="RFC3986-authority">
    <data type="string">
      <param name="pattern">(((%[0-9A-Fa-f]{2}|[!$&amp;-\.0-;=A-Z_a-z~])*@)?(\[((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))|[Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)\]|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])|(%[0-9A-Fa-f]{2}|[!$&amp;-\.0-9;=A-Z_a-z~])*)(:[0-9]*)?)</param>
    </data>
  </define>
  <!--
    RFC 2616 userinfo - Matches:
      * 8
      * C%02
      * r
      * V2%A4%CD_h=KX)
      * u%88
  -->
  <define name="RFC3986-userinfo">
    <data type="string">
      <param name="pattern">((%[0-9A-Fa-f]{2}|[!$&amp;-\.0-;=A-Z_a-z~])*)</param>
    </data>
  </define>
  <!--
    RFC 2616 host - Matches:
      * %8F
      * %ff
      * [v0.g_]
      * [9E2:63cB:8ec:E26::54E1]
      * %C0%2D
  -->
  <define name="RFC3986-host">
    <data type="string">
      <param name="pattern">((\[((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))|[Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)\]|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])|(%[0-9A-Fa-f]{2}|[!$&amp;-\.0-9;=A-Z_a-z~])*))</param>
    </data>
  </define>
  <!--
    RFC 2616 port - Matches:
      * 833
      * 4
      * 250537
      * 250
      * 9
  -->
  <define name="RFC3986-port">
    <data type="string">
      <param name="pattern">([0-9]*)</param>
    </data>
  </define>
  <!--
    RFC 2616 IP-literal - Matches:
      * [a45::]
      * [5C:eA:Ff6D:3:E8BA:e::]
      * [v7b1.p]
      * [::]
      * [c6a:EfEE:af0:DF:7f72:78D8::]
  -->
  <define name="RFC3986-IP-literal">
    <data type="string">
      <param name="pattern">(\[((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))|[Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)\])</param>
    </data>
  </define>
  <!--
    RFC 2616 IPvFuture - Matches:
      * v2B.z
      * vDd.w_t
      * vCF.TQ
      * V6.QN
      * V4a.6t0&j
  -->
  <define name="RFC3986-IPvFuture">
    <data type="string">
      <param name="pattern">([Vv][0-9A-Fa-f]+\.[!$&amp;-\.0-;=A-Z_a-z~]+)</param>
    </data>
  </define>
  <!--
    RFC 2616 IPv6address - Matches:
      * b:3:7:80C:bD:f46A::e5
      * ::B:9
      * 07::92ff
      * 376::
      * ::59:2f03:9Af
  -->
  <define name="RFC3986-IPv6address">
    <data type="string">
      <param name="pattern">(((([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::|(([0-9A-Fa-f]{1,4}:){6}|::([0-9A-Fa-f]{1,4}:){5}|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}|(([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}|(([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))))</param>
    </data>
  </define>
  <!--
    RFC 2616 h16 - Matches:
      * 3
      * B
      * 8CB
      * 0c
      * cF
  -->
  <define name="RFC3986-h16">
    <data type="string">
      <param name="pattern">([0-9A-Fa-f]{1,4})</param>
    </data>
  </define>
  <!--
    RFC 2616 ls32 - Matches:
      * 253.153.72.252
      * 5F2D:B1c4
      * 9.253.110.7
      * 255.60.137.101
      * ec10:BB
  -->
  <define name="RFC3986-ls32">
    <data type="string">
      <param name="pattern">(([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])))</param>
    </data>
  </define>
  <!--
    RFC 2616 IPv4address - Matches:
      * 141.115.252.191
      * 85.254.255.155
      * 104.253.21.250
      * 250.250.253.99
      * 233.255.251.32
  -->
  <define name="RFC3986-IPv4address">
    <data type="string">
      <param name="pattern">(((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9])\.){3}(1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))</param>
    </data>
  </define>
  <!--
    RFC 2616 dec-octet - Matches:
      * 152
      * 119
      * 252
      * 181
      * 122
  -->
  <define name="RFC3986-dec-octet">
    <data type="string">
      <param name="pattern">((1[0-9]{2}|25[0-5]|(2[0-4]||[1-9])[0-9]))</param>
    </data>
  </define>
  <!--
    RFC 2616 reg-name - Matches:
      * oY
      * E%69%91%eB
      * x%Cd%7eN%4D
      * 2%49
      * 0%2E%dB%FB
  -->
  <define name="RFC3986-reg-name">
    <data type="string">
      <param name="pattern">((%[0-9A-Fa-f]{2}|[!$&amp;-\.0-9;=A-Z_a-z~])*)</param>
    </data>
  </define>
  <!--
    RFC 2616 path - Matches:
      * /
      * %cB/p
      * /8R%0aU/a)%d3%Ef%Cc@/%cb/
      * /%e4J~%da$%6F/
      * /N
  -->
  <define name="RFC3986-path">
    <data type="string">
      <param name="pattern">((/((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)?||(|(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-9;=Z_a-z~])+|(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+)(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*))</param>
    </data>
  </define>
  <!--
    RFC 2616 path-abempty - Matches:
      * /%9b%3c%e4%07U%bA%bF%61o%a8%187%Cc7
      * /%3CpS*%30%C1/%01%6D
      * //Y/N/%d1/%9c%e6%f3g=.W%A8%d5%46%C7~/%ac/%cE%9e
      * //%41q/%AFQg/%aA%cb%63%93/V%7e
      * /bf//%a6//h//%D0
  -->
  <define name="RFC3986-path-abempty">
    <data type="string">
      <param name="pattern">((/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)</param>
    </data>
  </define>
  <!--
    RFC 2616 path-absolute - Matches:
      * /
      * /E%64/,
      * /%E8%11%1fC~%AA/M/%dE/%75%00%a8
      * /G%F7Af%c0X%F5%CC/xH
      * /4y/v%ae%f7//7Y%e3%BAZ%3ed%b2%bF%2A%2BdXh)/j%B7%Fc%D4%E6+
  -->
  <define name="RFC3986-path-absolute">
    <data type="string">
      <param name="pattern">(/((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)?)</param>
    </data>
  </define>
  <!--
    RFC 2616 path-noscheme - Matches:
      * %79/%f1%f6
      * %03N
      * 0%3Ea%AD7%9a%B3wmcE%B7/%ce/%adxfRr%fe.%64/H3/
      * %0EDr/
      * %F4D%Fe%5A/-)%aFP/%Cc/%a3t//U%3B%Be,/z//%B7%AdmN%7a/%1a
  -->
  <define name="RFC3986-path-noscheme">
    <data type="string">
      <param name="pattern">((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-9;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)</param>
    </data>
  </define>
  <!--
    RFC 2616 path-rootless - Matches:
      * %aa//%9A%F4o%2c%ff3G%38
      * %Db%5f%B4/bK%58%FF/%77
      * P%2a9/t%Bch%Cb%cdzn
      * g%aF/%01L~%eAC;%7Ds+%73
      * v/*jq//k/%7b%c9%6C%A1%Ee&0
  -->
  <define name="RFC3986-path-rootless">
    <data type="string">
      <param name="pattern">((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+(/(%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)*)</param>
    </data>
  </define>
  <!--
    RFC 2616 path-empty - Matches:
      * [unable to generate good examples]
  -->
  <define name="RFC3986-path-empty">
    <data type="string">
      <param name="pattern">()</param>
    </data>
  </define>
  <!--
    RFC 2616 segment - Matches:
      * %05%64%4c~WA
      * %25S
      * 0
      * %2At%EF
      * %53
  -->
  <define name="RFC3986-segment">
    <data type="string">
      <param name="pattern">((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])*)</param>
    </data>
  </define>
  <!--
    RFC 2616 segment-nz - Matches:
      * Uh;
      * %A2X
      * %BA'
      * YAu%3f3ly%f6
      * %6B%AD
  -->
  <define name="RFC3986-segment-nz">
    <data type="string">
      <param name="pattern">((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~])+)</param>
    </data>
  </define>
  <!--
    RFC 2616 segment-nz-nc - Matches:
      * %8a%9A;
      * ~%B5%2Ab%AA%cF%3A%C1G%E5VH%8faS
      * p%cck%b0%49
      * h%d7
      * y%1c%57%12%5D
  -->
  <define name="RFC3986-segment-nz-nc">
    <data type="string">
      <param name="pattern">((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-9;=Z_a-z~])+)</param>
    </data>
  </define>
  <!--
    RFC 2616 pchar - Matches:
      * %8f
      * %06
      * (
      * t
      * !
  -->
  <define name="RFC3986-pchar">
    <data type="string">
      <param name="pattern">((%[0-9A-Fa-f]{2}|[ -!$&amp;-\.0-;=Z_a-z~]))</param>
    </data>
  </define>
  <!--
    RFC 2616 query - Matches:
      * %DB,kT%3e%ce_+Y%4a%33UUt%8c
      * +%ecn@16MX
      * u%AD%76
      * @
      * %dC%B3%EC%8F
  -->
  <define name="RFC3986-query">
    <data type="string">
      <param name="pattern">((%[0-9A-Fa-f]{2}|[!$&amp;-;=\?-Z_a-z~])*)</param>
    </data>
  </define>
  <!--
    RFC 2616 fragment - Matches:
      * h%DA
      * @%ba
      * _%7a%A3%5B=%EF'D
      * i
      * c/
  -->
  <define name="RFC3986-fragment">
    <data type="string">
      <param name="pattern">((%[0-9A-Fa-f]{2}|[!$&amp;-;=\?-Z_a-z~])*)</param>
    </data>
  </define>
  <!--
    RFC 2616 pct-encoded - Matches:
      * %93
      * %b5
      * %FE
      * %7b
      * %6D
  -->
  <define name="RFC3986-pct-encoded">
    <data type="string">
      <param name="pattern">(%[0-9A-Fa-f]{2})</param>
    </data>
  </define>
  <!--
    RFC 2616 unreserved - Matches:
      * b
      * X
      * N
      * G
      * f
  -->
  <define name="RFC3986-unreserved">
    <data type="string">
      <param name="pattern">([\--\.0-9A-Z_a-z~])</param>
    </data>
  </define>
  <!--
    RFC 2616 reserved - Matches:
      * =
      * &
      * #
      * *
      * +
  -->
  <define name="RFC3986-reserved">
    <data type="string">
      <param name="pattern">([!#-$&amp;-,/:-;=\?-@\[\]])</param>
    </data>
  </define>
  <!--
    RFC 2616 gen-delims - Matches:
      * ?
      * :
      * ]
      * #
      * @
  -->
  <define name="RFC3986-gen-delims">
    <data type="string">
      <param name="pattern">([#/:\?-@\[\]])</param>
    </data>
  </define>
  <!--
    RFC 2616 sub-delims - Matches:
      * $
      * =
      * &
      * ,
      * +
  -->
  <define name="RFC3986-sub-delims">
    <data type="string">
      <param name="pattern">([!$&amp;-,;=])</param>
    </data>
  </define>
</grammar>
