# Automatically generated, do not edit.

import lxml.etree

## @var left_right
## Parsed RelaxNG left_right schema
left_right = lxml.etree.RelaxNG(lxml.etree.fromstring('''<?xml version="1.0" encoding="UTF-8"?>
<!--
  $Id: left-right-schema.rng 1287 2007-11-14 04:17:16Z sra $
  
  RelaxNG (Compact Syntax) Schema for RPKI left-right protocol.
  
  libxml2 (including xmllint) only groks the XML syntax of RelaxNG, so
  run the compact syntax through trang to get XML syntax.
-->
<grammar ns="http://www.hactrn.net/uris/rpki/left-right-spec/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <!-- Top level PDU -->
  <start>
    <element name="msg">
      <attribute name="version">
        <data type="positiveInteger">
          <param name="maxInclusive">1</param>
        </data>
      </attribute>
      <zeroOrMore>
        <choice>
          <ref name="self_elt"/>
          <ref name="bsc_elt"/>
          <ref name="parent_elt"/>
          <ref name="child_elt"/>
          <ref name="repository_elt"/>
          <ref name="ro_elt"/>
          <ref name="list_resources_elt"/>
          <ref name="report_error_elt"/>
        </choice>
      </zeroOrMore>
    </element>
  </start>
  <!--
    Combinations of action and type attributes used in later definitions.
    The same patterns repeat in most of the elements in this protocol.
  -->
  <define name="ctl_cq">
    <attribute name="action">
      <value>create</value>
    </attribute>
    <attribute name="type">
      <value>query</value>
    </attribute>
  </define>
  <define name="ctl_sq">
    <attribute name="action">
      <value>set</value>
    </attribute>
    <attribute name="type">
      <value>query</value>
    </attribute>
  </define>
  <define name="ctl_gq">
    <attribute name="action">
      <value>get</value>
    </attribute>
    <attribute name="type">
      <value>query</value>
    </attribute>
  </define>
  <define name="ctl_lq">
    <attribute name="action">
      <value>list</value>
    </attribute>
    <attribute name="type">
      <value>query</value>
    </attribute>
  </define>
  <define name="ctl_dq">
    <attribute name="action">
      <value>destroy</value>
    </attribute>
    <attribute name="type">
      <value>query</value>
    </attribute>
  </define>
  <define name="ctl_cr">
    <attribute name="action">
      <value>create</value>
    </attribute>
    <attribute name="type">
      <value>reply</value>
    </attribute>
  </define>
  <define name="ctl_sr">
    <attribute name="action">
      <value>set</value>
    </attribute>
    <attribute name="type">
      <value>reply</value>
    </attribute>
  </define>
  <define name="ctl_gr">
    <attribute name="action">
      <value>get</value>
    </attribute>
    <attribute name="type">
      <value>reply</value>
    </attribute>
  </define>
  <define name="ctl_lr">
    <attribute name="action">
      <value>list</value>
    </attribute>
    <attribute name="type">
      <value>reply</value>
    </attribute>
  </define>
  <define name="ctl_dr">
    <attribute name="action">
      <value>destroy</value>
    </attribute>
    <attribute name="type">
      <value>reply</value>
    </attribute>
  </define>
  <!-- Base64 encoded DER stuff -->
  <define name="base64">
    <data type="base64Binary">
      <param name="maxLength">512000</param>
    </data>
  </define>
  <!-- How we wrap trust anchor elements -->
  <define name="cms_ta">
    <element name="cms_ta">
      <ref name="base64"/>
    </element>
  </define>
  <define name="https_ta">
    <element name="https_ta">
      <ref name="base64"/>
    </element>
  </define>
  <!-- Base definition for all fields that are really just SQL primary indices -->
  <define name="sql_id">
    <data type="token">
      <param name="maxLength">1024</param>
    </data>
  </define>
  <!-- <self/> element -->
  <define name="self_bool">
    <optional>
      <attribute name="rekey">
        <value>yes</value>
      </attribute>
    </optional>
    <optional>
      <attribute name="reissue">
        <value>yes</value>
      </attribute>
    </optional>
    <optional>
      <attribute name="revoke">
        <value>yes</value>
      </attribute>
    </optional>
    <optional>
      <attribute name="run_now">
        <value>yes</value>
      </attribute>
    </optional>
    <optional>
      <attribute name="publish_world_now">
        <value>yes</value>
      </attribute>
    </optional>
    <optional>
      <attribute name="clear_extension_preferences">
        <value>yes</value>
      </attribute>
    </optional>
  </define>
  <define name="self_payload">
    <optional>
      <attribute name="use_hsm">
        <choice>
          <value>yes</value>
          <value>no</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="crl_interval">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
    <zeroOrMore>
      <element name="extension_preference">
        <attribute name="name">
          <data type="token">
            <param name="maxLength">1024</param>
          </data>
        </attribute>
        <data type="string">
          <param name="maxLength">512000</param>
        </data>
      </element>
    </zeroOrMore>
  </define>
  <define name="self_id">
    <attribute name="self_id">
      <ref name="sql_id"/>
    </attribute>
  </define>
  <define name="self_elt" combine="choice">
    <element name="self">
      <ref name="ctl_cq"/>
      <ref name="self_bool"/>
      <ref name="self_payload"/>
    </element>
  </define>
  <define name="self_elt" combine="choice">
    <element name="self">
      <ref name="ctl_cr"/>
      <ref name="self_id"/>
    </element>
  </define>
  <define name="self_elt" combine="choice">
    <element name="self">
      <ref name="ctl_sq"/>
      <ref name="self_id"/>
      <ref name="self_bool"/>
      <ref name="self_payload"/>
    </element>
  </define>
  <define name="self_elt" combine="choice">
    <element name="self">
      <ref name="ctl_sr"/>
      <ref name="self_id"/>
    </element>
  </define>
  <define name="self_elt" combine="choice">
    <element name="self">
      <ref name="ctl_gq"/>
      <ref name="self_id"/>
    </element>
  </define>
  <define name="self_elt" combine="choice">
    <element name="self">
      <ref name="ctl_gr"/>
      <ref name="self_id"/>
      <ref name="self_payload"/>
    </element>
  </define>
  <define name="self_elt" combine="choice">
    <element name="self">
      <ref name="ctl_lq"/>
    </element>
  </define>
  <define name="self_elt" combine="choice">
    <element name="self">
      <ref name="ctl_lr"/>
      <ref name="self_id"/>
      <ref name="self_payload"/>
    </element>
  </define>
  <define name="self_elt" combine="choice">
    <element name="self">
      <ref name="ctl_dq"/>
      <ref name="self_id"/>
    </element>
  </define>
  <define name="self_elt" combine="choice">
    <element name="self">
      <ref name="ctl_dr"/>
      <ref name="self_id"/>
    </element>
  </define>
  <!-- <bsc/> element.  Key parameters hardwired for now. -->
  <define name="bsc_bool">
    <optional>
      <attribute name="generate_keypair">
        <value>yes</value>
      </attribute>
      <optional>
        <attribute name="key_type">
          <value>rsa</value>
        </attribute>
      </optional>
      <optional>
        <attribute name="hash_alg">
          <value>sha256</value>
        </attribute>
      </optional>
      <optional>
        <attribute name="key_length">
          <value>2048</value>
        </attribute>
      </optional>
    </optional>
    <optional>
      <attribute name="clear_signing_certs">
        <value>yes</value>
      </attribute>
    </optional>
  </define>
  <define name="bsc_id">
    <attribute name="bsc_id">
      <ref name="sql_id"/>
    </attribute>
  </define>
  <define name="bsc_payload">
    <zeroOrMore>
      <element name="signing_cert">
        <ref name="base64"/>
      </element>
    </zeroOrMore>
    <optional>
      <element name="public_key">
        <ref name="base64"/>
      </element>
    </optional>
  </define>
  <define name="bsc_pkcs10">
    <optional>
      <element name="pkcs10_cert_request">
        <ref name="base64"/>
      </element>
    </optional>
  </define>
  <define name="bsc_elt" combine="choice">
    <element name="bsc">
      <ref name="ctl_cq"/>
      <ref name="self_id"/>
      <ref name="bsc_bool"/>
      <ref name="bsc_payload"/>
    </element>
  </define>
  <define name="bsc_elt" combine="choice">
    <element name="bsc">
      <ref name="ctl_cr"/>
      <ref name="self_id"/>
      <ref name="bsc_id"/>
      <ref name="bsc_pkcs10"/>
    </element>
  </define>
  <define name="bsc_elt" combine="choice">
    <element name="bsc">
      <ref name="ctl_sq"/>
      <ref name="self_id"/>
      <ref name="bsc_id"/>
      <ref name="bsc_bool"/>
      <ref name="bsc_payload"/>
    </element>
  </define>
  <define name="bsc_elt" combine="choice">
    <element name="bsc">
      <ref name="ctl_sr"/>
      <ref name="self_id"/>
      <ref name="bsc_id"/>
      <ref name="bsc_pkcs10"/>
    </element>
  </define>
  <define name="bsc_elt" combine="choice">
    <element name="bsc">
      <ref name="ctl_gq"/>
      <ref name="self_id"/>
      <ref name="bsc_id"/>
    </element>
  </define>
  <define name="bsc_elt" combine="choice">
    <element name="bsc">
      <ref name="ctl_gr"/>
      <ref name="self_id"/>
      <ref name="bsc_id"/>
      <ref name="bsc_payload"/>
    </element>
  </define>
  <define name="bsc_elt" combine="choice">
    <element name="bsc">
      <ref name="ctl_lq"/>
      <ref name="self_id"/>
    </element>
  </define>
  <define name="bsc_elt" combine="choice">
    <element name="bsc">
      <ref name="ctl_lr"/>
      <ref name="self_id"/>
      <ref name="bsc_id"/>
      <ref name="bsc_payload"/>
    </element>
  </define>
  <define name="bsc_elt" combine="choice">
    <element name="bsc">
      <ref name="ctl_dq"/>
      <ref name="self_id"/>
      <ref name="bsc_id"/>
    </element>
  </define>
  <define name="bsc_elt" combine="choice">
    <element name="bsc">
      <ref name="ctl_dr"/>
      <ref name="self_id"/>
      <ref name="bsc_id"/>
    </element>
  </define>
  <!-- <parent/> element -->
  <define name="parent_id">
    <attribute name="parent_id">
      <ref name="sql_id"/>
    </attribute>
  </define>
  <define name="parent_bool">
    <optional>
      <attribute name="rekey">
        <value>yes</value>
      </attribute>
    </optional>
    <optional>
      <attribute name="reissue">
        <value>yes</value>
      </attribute>
    </optional>
    <optional>
      <attribute name="revoke">
        <value>yes</value>
      </attribute>
    </optional>
  </define>
  <define name="parent_payload">
    <optional>
      <attribute name="peer_contact_uri">
        <data type="anyURI">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <attribute name="sia_base">
        <data type="anyURI">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <attribute name="bsc_id">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <attribute name="repository_id">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <ref name="cms_ta"/>
    </optional>
    <optional>
      <ref name="https_ta"/>
    </optional>
  </define>
  <define name="parent_elt" combine="choice">
    <element name="parent">
      <ref name="ctl_cq"/>
      <ref name="self_id"/>
      <ref name="parent_bool"/>
      <ref name="parent_payload"/>
    </element>
  </define>
  <define name="parent_elt" combine="choice">
    <element name="parent">
      <ref name="ctl_cr"/>
      <ref name="self_id"/>
      <ref name="parent_id"/>
    </element>
  </define>
  <define name="parent_elt" combine="choice">
    <element name="parent">
      <ref name="ctl_sq"/>
      <ref name="self_id"/>
      <ref name="parent_id"/>
      <ref name="parent_bool"/>
      <ref name="parent_payload"/>
    </element>
  </define>
  <define name="parent_elt" combine="choice">
    <element name="parent">
      <ref name="ctl_sr"/>
      <ref name="self_id"/>
      <ref name="parent_id"/>
    </element>
  </define>
  <define name="parent_elt" combine="choice">
    <element name="parent">
      <ref name="ctl_gq"/>
      <ref name="self_id"/>
      <ref name="parent_id"/>
    </element>
  </define>
  <define name="parent_elt" combine="choice">
    <element name="parent">
      <ref name="ctl_gr"/>
      <ref name="self_id"/>
      <ref name="parent_id"/>
      <ref name="parent_payload"/>
    </element>
  </define>
  <define name="parent_elt" combine="choice">
    <element name="parent">
      <ref name="ctl_lq"/>
      <ref name="self_id"/>
    </element>
  </define>
  <define name="parent_elt" combine="choice">
    <element name="parent">
      <ref name="ctl_lr"/>
      <ref name="self_id"/>
      <ref name="parent_id"/>
      <ref name="parent_payload"/>
    </element>
  </define>
  <define name="parent_elt" combine="choice">
    <element name="parent">
      <ref name="ctl_dq"/>
      <ref name="self_id"/>
      <ref name="parent_id"/>
    </element>
  </define>
  <define name="parent_elt" combine="choice">
    <element name="parent">
      <ref name="ctl_dr"/>
      <ref name="self_id"/>
      <ref name="parent_id"/>
    </element>
  </define>
  <!-- <child/> element -->
  <define name="child_id">
    <attribute name="child_id">
      <ref name="sql_id"/>
    </attribute>
  </define>
  <define name="child_bool">
    <optional>
      <attribute name="reissue">
        <value>yes</value>
      </attribute>
    </optional>
  </define>
  <define name="child_payload">
    <optional>
      <attribute name="bsc_id">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <ref name="cms_ta"/>
    </optional>
  </define>
  <define name="child_elt" combine="choice">
    <element name="child">
      <ref name="ctl_cq"/>
      <ref name="self_id"/>
      <ref name="child_bool"/>
      <ref name="child_payload"/>
    </element>
  </define>
  <define name="child_elt" combine="choice">
    <element name="child">
      <ref name="ctl_cr"/>
      <ref name="self_id"/>
      <ref name="child_id"/>
    </element>
  </define>
  <define name="child_elt" combine="choice">
    <element name="child">
      <ref name="ctl_sq"/>
      <ref name="self_id"/>
      <ref name="child_id"/>
      <ref name="child_bool"/>
      <ref name="child_payload"/>
    </element>
  </define>
  <define name="child_elt" combine="choice">
    <element name="child">
      <ref name="ctl_sr"/>
      <ref name="self_id"/>
      <ref name="child_id"/>
    </element>
  </define>
  <define name="child_elt" combine="choice">
    <element name="child">
      <ref name="ctl_gq"/>
      <ref name="self_id"/>
      <ref name="child_id"/>
    </element>
  </define>
  <define name="child_elt" combine="choice">
    <element name="child">
      <ref name="ctl_gr"/>
      <ref name="self_id"/>
      <ref name="child_id"/>
      <ref name="child_payload"/>
    </element>
  </define>
  <define name="child_elt" combine="choice">
    <element name="child">
      <ref name="ctl_lq"/>
      <ref name="self_id"/>
    </element>
  </define>
  <define name="child_elt" combine="choice">
    <element name="child">
      <ref name="ctl_lr"/>
      <ref name="self_id"/>
      <ref name="child_id"/>
      <ref name="child_payload"/>
    </element>
  </define>
  <define name="child_elt" combine="choice">
    <element name="child">
      <ref name="ctl_dq"/>
      <ref name="self_id"/>
      <ref name="child_id"/>
    </element>
  </define>
  <define name="child_elt" combine="choice">
    <element name="child">
      <ref name="ctl_dr"/>
      <ref name="self_id"/>
      <ref name="child_id"/>
    </element>
  </define>
  <!-- <repository/> element -->
  <define name="repository_id">
    <attribute name="repository_id">
      <ref name="sql_id"/>
    </attribute>
  </define>
  <define name="repository_payload">
    <optional>
      <attribute name="peer_contact_uri">
        <data type="anyURI">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <attribute name="bsc_id">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <ref name="cms_ta"/>
    </optional>
    <optional>
      <ref name="https_ta"/>
    </optional>
  </define>
  <define name="repository_elt" combine="choice">
    <element name="repository">
      <ref name="ctl_cq"/>
      <ref name="self_id"/>
      <ref name="repository_payload"/>
    </element>
  </define>
  <define name="repository_elt" combine="choice">
    <element name="repository">
      <ref name="ctl_cr"/>
      <ref name="self_id"/>
      <ref name="repository_id"/>
    </element>
  </define>
  <define name="repository_elt" combine="choice">
    <element name="repository">
      <ref name="ctl_sq"/>
      <ref name="self_id"/>
      <ref name="repository_id"/>
      <ref name="repository_payload"/>
    </element>
  </define>
  <define name="repository_elt" combine="choice">
    <element name="repository">
      <ref name="ctl_sr"/>
      <ref name="self_id"/>
      <ref name="repository_id"/>
    </element>
  </define>
  <define name="repository_elt" combine="choice">
    <element name="repository">
      <ref name="ctl_gq"/>
      <ref name="self_id"/>
      <ref name="repository_id"/>
    </element>
  </define>
  <define name="repository_elt" combine="choice">
    <element name="repository">
      <ref name="ctl_gr"/>
      <ref name="self_id"/>
      <ref name="repository_id"/>
      <ref name="repository_payload"/>
    </element>
  </define>
  <define name="repository_elt" combine="choice">
    <element name="repository">
      <ref name="ctl_lq"/>
      <ref name="self_id"/>
    </element>
  </define>
  <define name="repository_elt" combine="choice">
    <element name="repository">
      <ref name="ctl_lr"/>
      <ref name="self_id"/>
      <ref name="repository_id"/>
      <ref name="repository_payload"/>
    </element>
  </define>
  <define name="repository_elt" combine="choice">
    <element name="repository">
      <ref name="ctl_dq"/>
      <ref name="self_id"/>
      <ref name="repository_id"/>
    </element>
  </define>
  <define name="repository_elt" combine="choice">
    <element name="repository">
      <ref name="ctl_dr"/>
      <ref name="self_id"/>
      <ref name="repository_id"/>
    </element>
  </define>
  <!-- <route_origin/> element -->
  <define name="ro_id">
    <attribute name="route_origin_id">
      <ref name="sql_id"/>
    </attribute>
  </define>
  <define name="ro_bool">
    <optional>
      <attribute name="suppress_publication">
        <value>yes</value>
      </attribute>
    </optional>
  </define>
  <define name="ro_payload">
    <optional>
      <attribute name="as_number">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <attribute name="ipv4">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <attribute name="ipv6">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </optional>
  </define>
  <define name="ro_elt" combine="choice">
    <element name="route_origin">
      <ref name="ctl_cq"/>
      <ref name="self_id"/>
      <ref name="ro_bool"/>
      <ref name="ro_payload"/>
    </element>
  </define>
  <define name="ro_elt" combine="choice">
    <element name="route_origin">
      <ref name="ctl_cr"/>
      <ref name="self_id"/>
      <ref name="ro_id"/>
    </element>
  </define>
  <define name="ro_elt" combine="choice">
    <element name="route_origin">
      <ref name="ctl_sq"/>
      <ref name="self_id"/>
      <ref name="ro_id"/>
      <ref name="ro_bool"/>
      <ref name="ro_payload"/>
    </element>
  </define>
  <define name="ro_elt" combine="choice">
    <element name="route_origin">
      <ref name="ctl_sr"/>
      <ref name="self_id"/>
      <ref name="ro_id"/>
    </element>
  </define>
  <define name="ro_elt" combine="choice">
    <element name="route_origin">
      <ref name="ctl_gq"/>
      <ref name="self_id"/>
      <ref name="ro_id"/>
    </element>
  </define>
  <define name="ro_elt" combine="choice">
    <element name="route_origin">
      <ref name="ctl_gr"/>
      <ref name="self_id"/>
      <ref name="ro_id"/>
      <ref name="ro_payload"/>
    </element>
  </define>
  <define name="ro_elt" combine="choice">
    <element name="route_origin">
      <ref name="ctl_lq"/>
      <ref name="self_id"/>
    </element>
  </define>
  <define name="ro_elt" combine="choice">
    <element name="route_origin">
      <ref name="ctl_lr"/>
      <ref name="self_id"/>
      <ref name="ro_id"/>
      <ref name="ro_payload"/>
    </element>
  </define>
  <define name="ro_elt" combine="choice">
    <element name="route_origin">
      <ref name="ctl_dq"/>
      <ref name="self_id"/>
      <ref name="ro_id"/>
    </element>
  </define>
  <define name="ro_elt" combine="choice">
    <element name="route_origin">
      <ref name="ctl_dr"/>
      <ref name="self_id"/>
      <ref name="ro_id"/>
    </element>
  </define>
  <!-- <list_resources/> element -->
  <define name="list_resources_elt">
    <element name="list_resources">
      <choice>
        <group>
          <attribute name="type">
            <value>query</value>
          </attribute>
          <ref name="self_id"/>
          <ref name="child_id"/>
        </group>
        <group>
          <attribute name="type">
            <value>reply</value>
          </attribute>
          <ref name="self_id"/>
          <ref name="child_id"/>
          <attribute name="valid_until">
            <data type="token">
              <param name="maxLength">1024</param>
            </data>
          </attribute>
          <optional>
            <attribute name="subject_name">
              <data type="token">
                <param name="maxLength">1024</param>
              </data>
            </attribute>
          </optional>
          <optional>
            <attribute name="as">
              <data type="token">
                <param name="maxLength">1024</param>
              </data>
            </attribute>
          </optional>
          <optional>
            <attribute name="ipv4">
              <data type="token">
                <param name="maxLength">1024</param>
              </data>
            </attribute>
          </optional>
          <optional>
            <attribute name="ipv6">
              <data type="token">
                <param name="maxLength">1024</param>
              </data>
            </attribute>
          </optional>
        </group>
      </choice>
    </element>
  </define>
  <!-- <report_error/> element -->
  <define name="report_error_elt">
    <element name="report_error">
      <ref name="self_id"/>
      <attribute name="error_code">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
      <optional>
        <data type="string">
          <param name="maxLength">512000</param>
        </data>
      </optional>
    </element>
  </define>
</grammar>
'''))

## @var up_down
## Parsed RelaxNG up_down schema
up_down = lxml.etree.RelaxNG(lxml.etree.fromstring('''<?xml version="1.0" encoding="UTF-8"?>
<!--
  $Id: up-down-schema.rnc 974 2007-09-16 19:37:23Z sra $
  
  RelaxNG (Compact Syntax) Scheme for up-down protocol, extracted
  from APNIC Wiki.
  
  libxml2 (including xmllint) only groks the XML syntax of RelaxNG,
  so run this through a converter like /usr/ports/textproc/trang to get
  XML syntax:
  
    $ trang up-down-schema.rnc up-down-schema.rng
-->
<grammar ns="http://www.apnic.net/specs/rescerts/up-down/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <element name="message">
      <attribute name="version">
        <data type="positiveInteger">
          <param name="maxInclusive">1</param>
        </data>
      </attribute>
      <attribute name="sender">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
      <attribute name="recipient">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
      <ref name="payload"/>
    </element>
  </start>
  <define name="payload" combine="choice">
    <attribute name="type">
      <value>list</value>
    </attribute>
    <ref name="list_request"/>
  </define>
  <define name="payload" combine="choice">
    <attribute name="type">
      <value>list_response</value>
    </attribute>
    <ref name="list_response"/>
  </define>
  <define name="payload" combine="choice">
    <attribute name="type">
      <value>issue</value>
    </attribute>
    <ref name="issue_request"/>
  </define>
  <define name="payload" combine="choice">
    <attribute name="type">
      <value>issue_response</value>
    </attribute>
    <ref name="issue_response"/>
  </define>
  <define name="payload" combine="choice">
    <attribute name="type">
      <value>revoke</value>
    </attribute>
    <ref name="revoke_request"/>
  </define>
  <define name="payload" combine="choice">
    <attribute name="type">
      <value>revoke_response</value>
    </attribute>
    <ref name="revoke_response"/>
  </define>
  <define name="payload" combine="choice">
    <attribute name="type">
      <value>error_response</value>
    </attribute>
    <ref name="error_response"/>
  </define>
  <define name="list_request">
    <empty/>
  </define>
  <define name="list_response">
    <zeroOrMore>
      <ref name="class"/>
    </zeroOrMore>
  </define>
  <define name="class">
    <element name="class">
      <attribute name="class_name">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
      <attribute name="cert_url">
        <data type="string">
          <param name="maxLength">4096</param>
        </data>
      </attribute>
      <attribute name="resource_set_as">
        <data type="string">
          <param name="maxLength">512000</param>
          <param name="pattern">[\-,0-9]*</param>
        </data>
      </attribute>
      <attribute name="resource_set_ipv4">
        <data type="string">
          <param name="maxLength">512000</param>
          <param name="pattern">[\-,/.0-9]*</param>
        </data>
      </attribute>
      <attribute name="resource_set_ipv6">
        <data type="string">
          <param name="maxLength">512000</param>
          <param name="pattern">[\-,/:0-9a-fA-F]*</param>
        </data>
      </attribute>
      <optional>
        <attribute name="suggested_sia_head">
          <data type="anyURI">
            <param name="maxLength">1024</param>
            <param name="pattern">rsync://.+</param>
          </data>
        </attribute>
      </optional>
      <zeroOrMore>
        <element name="certificate">
          <attribute name="cert_url">
            <data type="string">
              <param name="maxLength">4096</param>
            </data>
          </attribute>
          <optional>
            <attribute name="req_resource_set_as">
              <data type="string">
                <param name="maxLength">512000</param>
                <param name="pattern">[\-,0-9]*</param>
              </data>
            </attribute>
          </optional>
          <optional>
            <attribute name="req_resource_set_ipv4">
              <data type="string">
                <param name="maxLength">512000</param>
                <param name="pattern">[\-,/.0-9]*</param>
              </data>
            </attribute>
          </optional>
          <optional>
            <attribute name="req_resource_set_ipv6">
              <data type="string">
                <param name="maxLength">512000</param>
                <param name="pattern">[\-,/:0-9a-fA-F]*</param>
              </data>
            </attribute>
          </optional>
          <data type="base64Binary">
            <param name="maxLength">512000</param>
          </data>
        </element>
      </zeroOrMore>
      <element name="issuer">
        <data type="base64Binary">
          <param name="maxLength">512000</param>
        </data>
      </element>
    </element>
  </define>
  <define name="issue_request">
    <element name="request">
      <attribute name="class_name">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
      <optional>
        <attribute name="req_resource_set_as">
          <data type="string">
            <param name="maxLength">512000</param>
            <param name="pattern">[\-,0-9]*</param>
          </data>
        </attribute>
      </optional>
      <optional>
        <attribute name="req_resource_set_ipv4">
          <data type="string">
            <param name="maxLength">512000</param>
            <param name="pattern">[\-,/.0-9]*</param>
          </data>
        </attribute>
      </optional>
      <optional>
        <attribute name="req_resource_set_ipv6">
          <data type="string">
            <param name="maxLength">512000</param>
            <param name="pattern">[\-,/:0-9a-fA-F]*</param>
          </data>
        </attribute>
      </optional>
      <data type="base64Binary">
        <param name="maxLength">512000</param>
      </data>
    </element>
  </define>
  <define name="issue_response">
    <ref name="class"/>
  </define>
  <define name="revoke_request">
    <ref name="revocation"/>
  </define>
  <define name="revoke_response">
    <ref name="revocation"/>
  </define>
  <define name="revocation">
    <element name="key">
      <attribute name="class_name">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
      <attribute name="ski">
        <data type="token">
          <param name="maxLength">1024</param>
        </data>
      </attribute>
    </element>
  </define>
  <define name="error_response">
    <element name="status">
      <data type="positiveInteger">
        <param name="maxInclusive">999999999999999</param>
      </data>
    </element>
    <optional>
      <element name="description">
        <attribute name="xml:lang">
          <data type="language"/>
        </attribute>
        <data type="string">
          <param name="maxLength">1024</param>
        </data>
      </element>
    </optional>
  </define>
</grammar>
'''))