<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' []>
<rfc ipr="trust200902" category="std" docName="draft-lhomme-cellar-ebml-00">
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc private=""?>
<?rfc topblock="yes"?>
<?rfc comments="no"?>
<front>
<title abbrev="EBML">Extensible Binary Meta Language</title>

<author initials="S." surname="Lhomme" fullname="Steve Lhomme">
<organization></organization>
<address>
<postal>
<street></street>
<city></city>
<code></code>
<country></country>
<region></region>
</postal>
<phone></phone>
<email></email>
<uri></uri>
</address>
</author>
<author initials="D." surname="Rice" fullname="Dave Rice">
<organization></organization>
<address>
<postal>
<street></street>
<city></city>
<code></code>
<country></country>
<region></region>
</postal>
<phone></phone>
<email></email>
<uri></uri>
</address>
</author>
<date year="2016" month="July" day="6"/>

<area>art</area>
<workgroup>cellar</workgroup>
<keyword></keyword>


<abstract>
<t>This document defines the Extensible Binary Meta Language (EBML) format as a genearlized file format for any type of data in a hierarchical form. EBML is designed as a binary equivalent to XML and utilizes a storage-efficient approach to building nested Elements with identifiers, lengths, and values. Similar to how an XML Schema defines the structure and semantics of an XML Document, this document defines an EBML Schema to convey the semantics of an EBML Document.
</t>
</abstract>


</front>

<middle>

<section anchor="ebml-specifications" title="EBML specifications">

<section anchor="introduction" title="Introduction">
<t>EBML, short for Extensible Binary Meta Language, specifies a binary and octet (byte) aligned format inspired by the principle of XML.
</t>
<t>The goal of the EBML Specification is to define a generic, binary, space-efficient format that may be utilized to define more complex formats (such as containers for multimedia content) using an EBML Schema. The definition of the EBML format recognizes the idea behind HTML and XML as a good one: separate structure and semantics allowing the same structural layer to be used with multiple, possibly widely differing semantic layers. Except for the EBML Header and a few global elements this specification does not define particular EBML format semantics; however this specification is intended to define how other EBML-based formats may be defined.
</t>
<t>EBML uses a simple approach of building Elements upon three pieces of data (tag, length, and value) as this approach is well known, easy to parse, and allows selective data parsing. The EBML structure additionally allows for hierarchical arrangement to support complex structural formats in an efficient manner.
</t>
</section>

<section anchor="notation-and-conventions" title="Notation and Conventions">
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as described in <xref target="RFC2119"/>(<eref target="https://tools.ietf.org/html/rfc2119"/>).
</t>
</section>

<section anchor="security-considerations" title="Security Considerations">
<t>EBML itself does not offer any kind of security. It has nothing to do with authentication, it does not provide confidentiality, only marginally useful and effective data integrity options (CRC elements).
</t>
<t>EBML does not provide any kind of authorization.
</t>
<t>Even if the semantic layer offers any kind of encryption, EBML itself may leak information at both the semantic layer (as declared via the DocType element) and within the EBML structure (you can derive the presence of EBML elements even with an unknown semantic layer with a heuristic approach; not without errors, of course, but with a certain degree of confidence).
</t>
<t>Attacks on an EBML reader may include:
- Invalid Element IDs that are longer than the limit stated in the EBMLMaxIDLength Element of the EBML Header.
- Invalid Element IDs that are not encoded in the shortest-possible way.
- Invalid Element IDs comprised of reserved values.
- Invalid Element Data Size values that are longer than the limit stated in the EBMLMaxSizeLength Element of the EBML Header.
- Invalid Element Data Size values (e.g. extending the length of the Element beyond the scope of the Parent Element; possibly triggering access-out-of-bounds issues).
- Very high lengths in order to force out-of-memory situations resulting in a denial of service, access-out-of-bounds issues etc.
- Missing Elements that are mandatory and have no declared default value.
- Usage of <spanx style="verb">0x00</spanx> octets in EBML Elements with a string type.
- Usage of invalid UTF-8 encoding in EBML Elements of UTF-8 type (e.g. in order to trigger access-out-of-bounds or buffer overflow issues).
- Usage of invalid data in EBML Elements with a date type.
</t>
</section>

<section anchor="structure" title="Structure">
<t>EBML uses a system of Elements to compose an EBML Document. Elements incorporate three parts: an Element ID, an Element Data Size, and Element Data. The Element Data, which is described by the Element ID, may include either binary data or one or many other Elements.
</t>
</section>

<section anchor="variable-size-integer" title="Variable Size Integer">
<t>The Element ID and Element Data Size are both encoded as a Variable Size Integer, developed according to a UTF-8 like system. The Variable Size Integer is composed of a VINT_WIDTH, VINT_MARKER, and VINT_DATA, in that order. Variable Size Integers shall be referred to as VINT for shorthand.
</t>

<section anchor="vintwidth" title="VINT_WIDTH">
<t>Each Variable Size Integer begins with a VINT_WIDTH which consists of zero or many zero-value bits. The count of consecutive zero-values of the VINT_WIDTH plus one equals the length in octets of the Variable Size Integer. For example, a Variable Size Integer that starts with a VINT_WIDTH which contains zero consecutive zero-value bits is one octet in length and a Variable Size Integer that starts with one consecutive zero-value bit is two octets in length. The VINT_WIDTH MUST only contain zero-value bits or be empty.
</t>
</section>

<section anchor="vintmarker" title="VINT_MARKER">
<t>The VINT_MARKER serves as a separator between the VINT_WIDTH and VINT_DATA. Each Variable Size Integer MUST contain exactly one VINT_MARKER. The VINT_MARKER MUST be one bit in length and contain a bit with a value of one. The first bit with a value of one within the Variable Size Integer is the VINT_MARKER.
</t>
</section>

<section anchor="vintdata" title="VINT_DATA">
<t>The VINT_DATA portion of the Variable Size Integer includes all data that follows (but not including) the VINT_MARKER until end of the Variable Size Integer whose length is derived from the VINT_WIDTH. The bits required for the VINT_WIDTH and the VINT_MARKER combined use one bit per octet of the total length of the Variable Size Integer. Thus a Variable Size Integer of 1 octet length supplies 7 bits for VINT_DATA, a 2 octet length supplies 14 bits for VINT_DATA, and a 3 octet length supplies 21 bits for VINT_DATA. If the number of bits required for VINT_DATA are less than the bit size of VINT_DATA, then VINT_DATA may be zero-padded to the left to a size that fits. The VINT_DATA value MUST be expressed a big-endian unsigned integer.
</t>
</section>

<section anchor="vint-examples" title="VINT Examples">
<t>This table shows examples of Variable Size Integers at widths of 1 to 5 octets. The Representation column depicts a binary expression of Variable Size Integers where VINT_WIDTH is depicted by '0', the VINT_MARKER as '1', and the VINT_DATA as 'x'.
</t>
<texttable>
<ttcol align="center">Octet Width</ttcol>
<ttcol align="center">Size</ttcol>
<ttcol align="left">Representation</ttcol>

<c>1</c><c>2^7</c><c>1xxx xxxx</c>
<c>2</c><c>2^14</c><c>01xx xxxx xxxx xxxx</c>
<c>3</c><c>2^21</c><c>001x xxxx xxxx xxxx xxxx xxxx</c>
<c>4</c><c>2^28</c><c>0001 xxxx xxxx xxxx xxxx xxxx xxxx xxxx</c>
<c>5</c><c>2^35</c><c>0000 1xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx</c>
</texttable>
<t>Note that data encoded as a Variable Size Integer may be rendered at octet widths larger than needed to store the data. In this table a binary value of 0b10 is shown encoded as different Variable Size Integers with widths from one octet to four octet. All four encoded examples have identical semantic meaning though the VINT_WIDTH and the padding of the VINT_DATA vary.
</t>
<texttable>
<ttcol align="center">Binary Value</ttcol>
<ttcol align="center">Octet Width</ttcol>
<ttcol align="left">As Represented in Variable Size Integer</ttcol>

<c>10</c><c>1</c><c>1000 0010</c>
<c>10</c><c>2</c><c>0100 0000 0000 0010</c>
<c>10</c><c>3</c><c>0010 0000 0000 0000 0000 0010</c>
<c>10</c><c>4</c><c>0001 0000 0000 0000 0000 0000 0000 0010</c>
</texttable>
</section>
</section>

<section anchor="element-id" title="Element ID">
<t>The Element ID MUST be encoded as a Variable Size Integer. By default, EBML Element IDs may be encoded in lengths from one octet to four octets, although Element IDs of greater lengths may be used if the octet length of the EBML Document's longest Element ID is declared in the EBMLMaxIDLength Element of the EBML Header. The VINT_DATA component of the Element ID MUST NOT be set to either all zero values or all one values. The VINT_DATA component of the Element ID MUST be encoded at the shortest valid length. For example, an Element ID with binary encoding of 1011 1111 is valid, whereas an Element ID with binary encoding of 0100 0000 0011 1111 stores a semantically equal VINT_DATA but is invalid because a shorter VINT encoding is possible. The following table details this specific example further:
</t>
<texttable>
<ttcol align="right">VINT_WIDTH</ttcol>
<ttcol align="right">VINT_MARKER</ttcol>
<ttcol align="right">VINT_DATA</ttcol>
<ttcol align="left">Element ID Status</ttcol>

<c></c><c>1</c><c>0111111</c><c>Valid</c>
<c>0</c><c>1</c><c>00000000111111</c><c>Invalid</c>
</texttable>
<t>The octet length of an Element ID determines its EBML Class.
</t>
<texttable>
<ttcol align="center">EBML Class</ttcol>
<ttcol align="center">Octet Length</ttcol>
<ttcol align="left">Number of Possible Element IDs</ttcol>

<c>Class A</c><c>1</c><c>2^7  - 2        =         126</c>
<c>Class B</c><c>2</c><c>2^14 - 2^7  - 1 =      16,255</c>
<c>Class C</c><c>3</c><c>2^21 - 2^14 - 1 =   2,080,767</c>
<c>Class D</c><c>4</c><c>2^28 - 2^21 - 1 = 266,388,303</c>
</texttable>
</section>

<section anchor="element-data-size" title="Element Data Size">
<t>The Element Data Size expresses the length in octets of Element Data. The Element Data Size itself MUST be encoded as a Variable Size Integer. By default, EBML Element Data Sizes can be encoded in lengths from one octet to eight octets, although Element Data Sizes of greater lengths MAY be used if the octet length of the EBML Document's longest Element Data Size is declared in the EBMLMaxSizeLength Element of the EBML Header. Unlike the VINT_DATA of the Element ID, the VINT_DATA component of the Element Data Size is not required to be encoded at the shortest valid length. For example, an Element Data Size with binary encoding of 1011 1111 or a binary encoding of 0100 0000 0011 1111 are both valid Element Data Sizes and both store a semantically equal value.
</t>
<t>Although an Element ID with all VINT_DATA bits set to zero is invalid, an Element Data Size with all VINT_DATA bits set to zero is allowed for EBML Data Types which do not mandate a non-zero length. An Element Data Size with all VINT_DATA bits set to zero indicates that the Element Data of the Element is zero octets in length. Such an Element is referred to as an Empty Element. If an Empty Element has a <spanx style="verb">default</spanx> value declared then that default value MUST be interpreted as the value of the Empty Element. If an Empty Element has no <spanx style="verb">default</spanx> value declared then the semantic meaning of Empty Element is defined as part of the definition of the EBML Element Types.
</t>
<t>An Element Data Size with all VINT_DATA bits set to one is reserved as an indicator that the size of the Element is unknown. The only reserved value for the VINT_DATA of Element Data Size is all bits set to one. This rule allows for an Element to be written and read before the size of the Element is known; however unknown Element Data Size values SHOULD NOT be used unnecessarily. An Element with an unknown Element Data Size MUST be a Master-element in that it contains other EBML Elements as sub-elements. Master-elements MAY only use an unknown size if the <spanx style="verb">unknownsizeallowed</spanx> attribute of the EBML Schema is set to true. The end of a Master-element with unknown size is determined by the beginning of the next element that is not a valid sub-element of that Master-element. An Element with an unknown Element Data Size is referred to as an <spanx style="verb">Unknown-Sized Element</spanx>.
</t>
<t>For Element Data Sizes encoded at octet lengths from one to eight, this table depicts the range of possible values that can be encoded as an Element Data Size. An Element Data Size with an octet length of 8 is able to express a size of 2^56-2 or 72,057,594,037,927,934 octets (or about 72 petabytes). The maximum possible value that can be stored as Element Data Size is referred to as <spanx style="verb">VINTMAX</spanx>.
</t>
<texttable>
<ttcol align="center">Octet Length</ttcol>
<ttcol align="center">Possible Value Range</ttcol>

<c>1</c><c>0 to  2^7-2</c>
<c>2</c><c>0 to 2^14-2</c>
<c>3</c><c>0 to 2^21-2</c>
<c>4</c><c>0 to 2^28-2</c>
<c>5</c><c>0 to 2^35-2</c>
<c>6</c><c>0 to 2^42-2</c>
<c>7</c><c>0 to 2^49-2</c>
<c>8</c><c>0 to 2^56-2</c>
</texttable>
<t>If the length of Element Data equals 2^(n*7)-1 then the octet length of the Element Data Size MUST be at least n+1. This rule prevents an Element Data Size from being expressed as a reserved value. For example, an Element with an octet length of 127 MUST NOT be encoded in an Element Data Size encoding with a one octet length. The following table clarifies this rule by showing a valid and invalid expression of an Element Data Size with a VINT_DATA of 127 (which is equal to 2^(1*7)-1).
</t>
<texttable>
<ttcol align="right">VINT_WIDTH</ttcol>
<ttcol align="right">VINT_MARKER</ttcol>
<ttcol align="right">VINT_DATA</ttcol>
<ttcol align="center">Element Data Size Status</ttcol>

<c></c><c>1</c><c>1111111</c><c>Reserved (meaning Unknown)</c>
<c>0</c><c>1</c><c>00000001111111</c><c>Valid (meaning 127 octets)</c>
</texttable>
</section>

<section anchor="ebml-element-types" title="EBML Element Types">
<t>Each defined EBML Element MUST have a declared Element Type. The Element Type defines a concept for storing data that may be constrained by length, endianness, and purpose.
</t>
<texttable>
<ttcol align="left">Element Data Type</ttcol>
<ttcol align="left">Signed Integer</ttcol>

<c>Endianness</c><c>Big-endian</c>
<c>Length</c><c>A Signed Integer Element MUST declare a length that is no greater than 8 octets. An Signed Integer Element with a zero-octet length represents an integer value of zero.</c>
<c>Definition</c><c>A Signed Integer stores an integer (meaning that it can be written without a fractional component) which may be negative, positive, or zero. Because EBML limits Signed Integers to 8 octets in length a Signed Element may store a number from −9,223,372,036,854,775,808 to +9,223,372,036,854,775,807.</c>
</texttable>
<texttable>
<ttcol align="left">Element Data Type</ttcol>
<ttcol align="left">Unsigned Integer</ttcol>

<c>Endianness</c><c>Big-endian</c>
<c>Length</c><c>A Unsigned Integer Element MUST declare a length that is no greater than 8 octets. An Unsigned Integer Element with a zero-octet length represents an integer value of zero.</c>
<c>Definition</c><c>An Unsigned Integer stores an integer (meaning that it can be written without a fractional component) which may be positive or zero. Because EBML limits Unsigned Integers to 8 octets in length an unsigned Element may store a number from 0 to 18,446,744,073,709,551,615.</c>
</texttable>
<texttable>
<ttcol align="left">Element Data Type</ttcol>
<ttcol align="left">Float</ttcol>

<c>Endianness</c><c>Big-endian</c>
<c>Length</c><c>A Float Element MUST declare of length of either 0 octets (0 bit), 4 octets (32 bit) or 8 octets (64 bit). A Float Element with a zero-octet length represents a numerical value of zero.</c>
<c>Definition</c><c>A Float Elements stores a floating-point number as defined in IEEE 754.</c>
</texttable>
<texttable>
<ttcol align="left">Element Data Type</ttcol>
<ttcol align="left">String</ttcol>

<c>Endianness</c><c>None</c>
<c>Length</c><c>A String Element may declare any length from zero to <spanx style="verb">VINTMAX</spanx>.</c>
<c>Definition</c><c>A String Element may either be empty (zero-length) or contain Printable ASCII characters in the range of <spanx style="verb">0x20</spanx> to <spanx style="verb">0x7E</spanx>. Octets with all bits set to zero may follow the string value when needed.</c>
</texttable>
<texttable>
<ttcol align="left">Element Data Type</ttcol>
<ttcol align="left">UTF-8</ttcol>

<c>Endianness</c><c>None</c>
<c>Length</c><c>A UTF-8 Element may declare any length from zero to <spanx style="verb">VINTMAX</spanx>.</c>
<c>Definition</c><c>A UTF-8 Element shall contain only a valid Unicode string as defined in <xref target="RFC2279"/>(<eref target="http://www.faqs.org/rfcs/rfc2279.html"/>). Octets with all bits set to zero may follow the UTF-8 value when needed.</c>
</texttable>
<texttable>
<ttcol align="left">Element Data Type</ttcol>
<ttcol align="left">Date</ttcol>

<c>Endianness</c><c>None</c>
<c>Length</c><c>A Date Element MUST declare a length of either 0 octets or 8 octets. A Date Element with a zero-octet length represents a timestamp of 2001-01-01T00:00:00.000000000 UTC.</c>
<c>Definition</c><c>The Date Element MUST contain a Signed Integer that expresses a point in time referenced in nanoseconds from the precise beginning of the third millennium of the Gregorian Calendar in Coordinated Universal Time (also known as 2001-01-01T00:00:00.000000000 UTC). This provides a possible expression of time from 1708-09-11T00:12:44.854775808 UTC to 2293-04-11T11:47:16.854775807 UTC.</c>
</texttable>
<texttable>
<ttcol align="left">Element Data Type</ttcol>
<ttcol align="left">Master-element</ttcol>

<c>Endianness</c><c>None</c>
<c>Length</c><c>A Master-element may declare any length from zero to <spanx style="verb">VINTMAX</spanx>. The Master-element may also use an unknown length. See the section on Element Data Size for rules that apply to elements of unknown length.</c>
<c>Definition</c><c>The Master-element contains zero, one, or many other elements. Elements contained within a Master-element must be defined for use at levels greater than the level of the Master-element. For instance is a Master-element occurs on level 2 then all contained Elements must be valid at level 3. Element Data stored within Master-elements SHOULD only consist of EBML Elements and SHOULD NOT contain any data that is not part of an EBML Element. When EBML is used in transmission or streaming, data that is not part of an EBML Element is permitted to be present within a Master-element if <spanx style="verb">unknownsizeallowed</spanx> is enabled within that Master-element's definition. In this case, the reader should skip data until a valid Element ID of the same level or the next greater level of the Master-element is found. What Element IDs are considered valid within a Master-element is identified by the EBML Schema for that version of the EBML Document Type. Any data contained with a Master-element that is not part of an Element SHOULD be ignored.</c>
</texttable>
<texttable>
<ttcol align="left">Element Data Type</ttcol>
<ttcol align="left">Binary</ttcol>

<c>Endianness</c><c>None</c>
<c>Length</c><c>A binary element may declare any length from zero to <spanx style="verb">VINTMAX</spanx>.</c>
<c>Definition</c><c>The contents of a Binary element should not be interpreted by the EBML parser.</c>
</texttable>
</section>

<section anchor="ebml-document" title="EBML Document">
<t>An EBML Document is comprised of only two components, an EBML Header and an EBML Body. An EBML Document MUST start with an EBML Header which declares significant characteristics of the entire EBML Body. An EBML Document MAY only consist of EBML Elements and MUST NOT contain any data that is not part of an EBML Element. The initial EBML Element of an EBML Document and the Elements that follow it are considered Level 0 Elements. If an EBML Master-element is considered to be at level N and it contains one or many other EBML Elements then the contained Elements shall be considered at Level N+1. Thus a Level 2 Element would have to be contained by a Master-element (at Level 1) that is contained by another Master-element (at Level 0).
</t>

<section anchor="ebml-header" title="EBML Header">
<t>The EBML Header is a declaration that provides processing instructions and identification of the EBML Body. The EBML Header may be considered as analogous to an XML Declaration. All EBML Documents MUST begin with a valid EBML Header.
</t>
<t>The EBML Header documents the EBML Schema (also known as the EBML DocType) that may be used to semantically interpret the structure and meaning of the EBML Document. Additionally the EBML Header documents the versions of both EBML and the EBML Schema that were used to write the EBML Document and the versions required to read the EBML Document.
</t>
<t>The EBML Header consists of a single Master-element with an Element ID of 'EBML'. The EBML Header MUST ONLY contain EBML Elements that are defined as part of the EBML Specification.
</t>
<t>All EBML Elements within the EBML Header MUST NOT utilize any Element ID with a length greater than 4 octets. All EBML Elements within the EBML Header MUST NOT utilize any Element Data Size with a length greater than 4 octets.
</t>
</section>

<section anchor="ebml-body" title="EBML Body">
<t>All data of an EBML Document following the EBML Header may be considered the EBML Body. The end of the EBML Body, as well as the end of the EBML Document that contains the EBML Body, is considered as whichever comes first: the beginning of a new level 0 EBML Header or the end of the file. The EBML Body MAY only consist of EBML Elements and MUST NOT contain any data that is not part of an EBML Element. Although the EBML specification itself defines precisely what EBML Elements are to be used within the EBML Header, the EBML specification does not name or define what EBML Elements are to be used within the EBML Body. The definition of what EBML Elements are to be used within the EBML Body is defined by an EBML Schema.
</t>
</section>
</section>

<section anchor="ebml-stream" title="EBML Stream">
<t>An EBML Stream is a file that consists of one or many EBML Documents that are concatenated together. An occurrence of a Level 0 EBML Header marks the beginning of an EBML Document.
</t>
</section>

<section anchor="elements-semantic" title="Elements semantic">

<section anchor="ebml-schema" title="EBML Schema">
<t>An EBML Schema is an XML Document that defines the properties, arrangement, and usage of EBML Elements that compose a specific EBML Document Type. The relationship of an EBML Schema to an EBML Document may be considered analogous to the relationship of an <eref target="http://www.w3.org/XML/Schema#dev">XML Schema</eref> to an <eref target="http://www.w3.org/TR/xml/">XML Document</eref>. An EBML Schema MUST be clearly associated with one or many EBML Document Types. An EBML Schema must be expressed as well-formed XML. An EBML Document Type is identified by a unique string stored within the EBML Header element called DocType; for example <spanx style="verb">matroska</spanx> or <spanx style="verb">webm</spanx>.
</t>
<t>As an XML Document, the EBML Schema MUST use <spanx style="verb">&lt;EBMLSchema&gt;</spanx> as the top level element. The <spanx style="verb">&lt;EBMLSchema&gt;</spanx> element MAY contain <spanx style="verb">&lt;element&gt;</spanx> sub-elements. Each <spanx style="verb">&lt;element&gt;</spanx> defines one EBML Element through the use of several attributes which are defined in the section on <xref target="ebml-schema-element-attributes"/>. EBML Schemas MAY contain additional attributes to extend the semantics but MUST NOT conflict is the definitions of the <spanx style="verb">&lt;element&gt;</spanx> attributes defined within this specification.
</t>
<t>Within the EBML Schema each EBML Element is defined to occur at a specific level. For any specificied EBML Element that is not at level 0, the Parent EBML Element refers to the EBML Master-element that that EBML Element is contained within. For any specifiied EBML Master-element the Child EBML Element refers to the EBML Elements that may be immediately contained within that Master-element. For any EBML Element that is not defined at level 0, the Parent EBML Element may be identified by the preceding <spanx style="verb">&lt;element&gt;</spanx> node which has a lower value as the defined <spanx style="verb">level</spanx> attribute. The only exception for this rule are Global EBML Elements which may occur within any Parent EBML Element within the restriction of the Global EBML Element's range declaration.
</t>
<t>An EBML Schema MUST declare exactly one Element at Level 0 (referred to as the Root Element) that MUST occur exactly once within an EBML Document. The Root Element MUST be mandatory (with minOccurs set to 1) and MUST be defined to occur exactly once (maxOccurs set to 1). Note that the EBML and Void Elements may also occur at Level 0 but are not considered to be Root Elements.
</t>
<t>Elements defined to only occur at Level 1 are known as Top-Level Elements.
</t>
<t>The EBML Schema does not itself document the EBML Header, but documents all data of the EBML Document that follows the EBML Header. The EBML Header itself is documented by this specification in the <xref target="ebml-header-elements"/> section. The EBML Schema also does not document Global Elements that are defined by the EBML Specification (namely Void and CRC-32).
</t>

<section anchor="ebml-schema-element-attributes" title="EBML Schema Element Attributes">
<t>Within an EBML Schema the <spanx style="verb">&lt;EBMLSchema&gt;</spanx> uses the following attributes to define the EBML Schema:
</t>
<texttable>
<ttcol align="left">attribute name</ttcol>
<ttcol align="left">required</ttcol>
<ttcol align="left">definition</ttcol>

<c>docType</c><c>Yes</c><c>The <spanx style="verb">docType</spanx> lists the official name of the EBML Document Type that is defined by the EBML Schema; for example, <spanx style="verb">&lt;EBMLSchema docType="matroska"&gt;</spanx>.</c>
<c>version</c><c>Yes</c><c>The <spanx style="verb">version</spanx> lists an incremental non-negative integer that specifies the version of the docType documented by the EBML Schema. Unlike XML Schemas, an EBML Schema documents all versions of a docType's definition rather than using separate EBML Schemas for each version of a docType. Elements may be introduced and deprecated by using the <spanx style="verb">minver</spanx> and <spanx style="verb">maxver</spanx> attributes of .</c>
</texttable>
<t>Within an EBML Schema the <spanx style="verb">&lt;element&gt;</spanx> uses the following attributes to define an EBML Element.
</t>
<texttable>
<ttcol align="left">attribute name</ttcol>
<ttcol align="left">required</ttcol>
<ttcol align="left">definition</ttcol>

<c>name</c><c>Yes</c><c>The official human-readable name of the EBML Element. The value of the name MUST be in the form of an NCName as defined by the <eref target="http://www.w3.org/TR/1999/REC-xml-names-19990114/#ns-decl">XML Schema specification</eref>.</c>
<c>level</c><c>Yes</c><c>The level notes at what hierarchical depth the EBML Element may occur within an EBML Document. The Root Element of an EBML Document is at level 0 and the Elements that it may contain are at level 1. The level MUST be expressed as an integer. Note that Elements defined as <spanx style="verb">global</spanx> and <spanx style="verb">recursive</spanx> MAY occur at a level greater than or equal to the defined <spanx style="verb">level</spanx>.</c>
<c>global</c><c>No</c><c>A boolean to express if an EBML Element MUST occur at its defined level or may occur within any Parent EBML Element. If the <spanx style="verb">global</spanx> attribute is not expressed for that Element then that element is to be considered not global.</c>
<c>id</c><c>Yes</c><c>The Element ID expressed in hexadecimal notation prefixed by a <spanx style="verb">0x</spanx>. To reduce the risk of false positives while parsing EBML Streams, the IDs of the Root Element and Top-Level Elements SHOULD be at least 4 octets in length. Element IDs defined for use at Level 0 or Level 1 MAY use shorter octet lengths to facilitate padding and optimize edits to EBML Documents; for instance, the EBML Void Element uses an Element ID with a one octet length to allow its usage in more writing and editing scenarios.</c>
<c>minOccurs</c><c>No</c><c>An integer to express the minimal number of occurrences that the EBML Element MUST occur within its Parent Element if its Parent Element is used. If the Element has no Parent Level (as is the case with Elements at Level 0), then minOccurs refers to constaints on the Element's occurrence within the EBML Document. If the minOccurs attribute is not expressed for that Element then that Element shall be considered to have a minOccurs value of 0. This value of minOccurs MUST be a positive integer. The semantic meaning of minOccurs within an EBML Schema is considered analogous to the meaning of minOccurs within an <eref target="https://www.w3.org/TR/xmlschema-0/#ref6">XML Schema</eref>. Note that Elements with minOccurs set to &quot;1&quot; that also have a default value declared are not required to be stored but are required to be interpretted, see the <xref target="note-on-the-use-of-default-attributes-to-define-mandatory-ebml-elements"/>.</c>
<c>maxOccurs</c><c>No</c><c>A value to express the maximum number of occurrences that the EBML Element MAY occur within its Parent Element if its Parent Element is used. If the Element has no Parent Level (as is the case with Elements at Level 0), then maxOccurs refers to constaints on the Element's occurrence within the EBML Document. This value may be either a positive integer or the term <spanx style="verb">unbounded</spanx> to indicate there is no maximum number of occurrences or the term <spanx style="verb">identical</spanx> to indicate that the Element is an <xref target="identically-recurring-elements"/>. If the maxOccurs attribute is not expressed for that Element then that Element shall be considered to have a maxOccurs value of 1. The semantic meaning of maxOccurs within an EBML Schema is considered analogous to the meaning of minOccurs within an <eref target="https://www.w3.org/TR/xmlschema-0/#ref6">XML Schema</eref>, with EBML Schema adding the concept of Identically Recurring Elements.</c>
<c>range</c><c>No</c><c>For Elements which are of numerical types (Unsigned Integer, Signed Integer, Float, and Date) a numerical range may be specified. If specified that the value of the EBML Element MUST be within the defined range inclusively. See the <xref target="expression-of-range"/> for rules applied to expression of range values.</c>
<c>default</c><c>No</c><c>A default value may be provided. If an Element is mandatory but not written within its Parent EBML Element, then the parser of the EBML Document MUST insert the defined default value of the Element. EBML Elements that are Master-elements MUST NOT declare a default value.</c>
<c>type</c><c>Yes</c><c>As defined within the <xref target="ebml-element-types"/>, the type MUST be set to one of the following values: 'integer' (signed integer), 'uinteger' (unsigned integer), 'float', 'string', 'date', 'utf-8', 'master', or 'binary'.</c>
<c>unknownsizeallowed</c><c>No</c><c>A boolean to express if an EBML Element MAY be used as an <spanx style="verb">Unknown-Sized Element</spanx> (having all VINT_DATA bits of Element Data Size set to 1). The <spanx style="verb">unknownsizeallowed</spanx> attribute only applies to Master-elements. If the <spanx style="verb">unknownsizeallowed</spanx> attribute is not used it is assumed that the element is not allowed to use an unknown Element Data Size.</c>
<c>recursive</c><c>No</c><c>A boolean to express if an EBML Element MAY be stored recursively. In this case the Element MAY be stored at levels greater that defined in the <spanx style="verb">level</spanx> attribute if the Element is a Child Element of a Parent Element with the same Element ID. The <spanx style="verb">recursive</spanx> attribute only applies to Master-elements. If the <spanx style="verb">recursive</spanx> attribute is not used it is assumed that the element is not allowed to be used recursively.</c>
<c>minver</c><c>No</c><c>The <spanx style="verb">minver</spanx> (minimum version) attribute stores a non-negative integer that represents the first version of the docType to support the element. If the <spanx style="verb">minver</spanx> attribute is not used it is assumed that the element has a minimum version of &quot;1&quot;.</c>
<c>maxver</c><c>No</c><c>The <spanx style="verb">maxver</spanx> (maximum version) attribute stores a non-negative integer that represents the last or most recent version of the docType to support the element. If the <spanx style="verb">maxver</spanx> attribute is not used it is assumed that the element has a maximum version equal to the value stored in the <spanx style="verb">version</spanx> attribute of .</c>
</texttable>
<t>The <spanx style="verb">&lt;element&gt;</spanx> nodes shall contain a description of the meaning and use of the EBML Element stored within one or many <spanx style="verb">&lt;documentation&gt;</spanx> sub-elements. The <spanx style="verb">&lt;documentation&gt;</spanx> sub-element may use a <spanx style="verb">lang</spanx> attribute which may be set to the RFC 5646 value of the language of the element's documentation. The <spanx style="verb">&lt;documentation&gt;</spanx> sub-element may use a <spanx style="verb">type</spanx> attribute to distinguish the meaning of the documentation. Recommended values for the <spanx style="verb">&lt;documentation&gt;</spanx> sub-element's <spanx style="verb">type</spanx> attribute include: <spanx style="verb">definition</spanx>, <spanx style="verb">rationale</spanx>, <spanx style="verb">usage notes</spanx>, and <spanx style="verb">references</spanx>.
</t>
<t>The <spanx style="verb">&lt;element&gt;</spanx> nodes MUST be arranged hierarchically according to the permitted structure of the EBML Document Type. An <spanx style="verb">&lt;element&gt;</spanx> node that defines an EBML Element which is a Child Element of another Parent Element MUST be stored as an immediate sub-element of the <spanx style="verb">&lt;element&gt;</spanx> node that defines the Parent Element. <spanx style="verb">&lt;element&gt;</spanx> nodes that define Level 0 Elements and Global Elements should be sub-elements of <spanx style="verb">&lt;EBMLSchema&gt;</spanx>.
</t>
</section>

<section anchor="ebml-schema-example" title="EBML Schema Example">

<figure align="center"><artwork align="center" type="xml">
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;EBMLSchema docType="files-in-ebml-demo" version="1"&gt;
 &lt;!-- Root Element--&gt;
 &lt;element name="Files" level="0" id="0x1946696C" type="master"&gt;
  &lt;documentation lang="en" type="definition"&gt;Container of data and
  attributes representing one or many files.&lt;/documentation&gt;
  &lt;element name="File" level="1" id="0x6146" type="master" minOccurs="1"
  maxOccurs="unbounded"&gt;
   &lt;documentation lang="en" type="definition"&gt;An attached file.
   &lt;/documentation&gt;
   &lt;element name="FileName" level="2" id="0x614E" type="utf-8"
   minOccurs="1"&gt;
    &lt;documentation lang="en" type="definition"&gt;Filename of the attached
    file.&lt;/documentation&gt;
   &lt;/element&gt;
   &lt;element name="MimeType" level="2" id="0x464D" type="string"
     minOccurs="1"&gt;
    &lt;documentation lang="en" type="definition"&gt;MIME type of the
    file.&lt;/documentation&gt;
   &lt;/element&gt;
   &lt;element name="ModificationTimestamp" level="2" id="0x4654"
     type="date" minOccurs="1"&gt;
    &lt;documentation lang="en" type="definition"&gt;Modification timestamp of
    the file.&lt;/documentation&gt;
   &lt;/element&gt;
   &lt;element name="Data" level="2" id="0x4664" type="binary"
     minOccurs="1"&gt;
    &lt;documentation lang="en" type="definition"&gt;The data of the
    file.&lt;/documentation&gt;
   &lt;/element&gt;
  &lt;/element&gt;
 &lt;/element&gt;
&lt;/EBMLSchema&gt;
</artwork></figure>
</section>

<section anchor="identically-recurring-elements" title="Identically Recurring Elements">
<t>An Identically Recurring Element is an Element that may occur within its Parent Element more than once but that each recurrence within that Parent Element MUST be identical both in storage and semantics. Identically Recurring Elements are permitted to be stored multiple times within the same Parent Element in order to increase data resilience and optimize the use of EBML in transmission. Identically Recurring Elements SHOULD include a CRC-32 Element as a Child Element; this is especially recommended when EBML is used for long-term storage or transmission. If a Parent Element contains more than one copy of an Identically Recurring Element which includes a CRC-32 Child Element then the first instance of the Identically Recurring Element with a valid CRC-32 value should be used for interpretation. If a Parent Element contains more than one copy of an Identically Recurring Element which does not contain a CRC-32 Child Element or if CRC-32 Child Elements are present but none are valid then the first instance of the Identically Recurring Element should be used for interpretation.
</t>
</section>

<section anchor="expression-of-range" title="Expression of range">
<t>The <spanx style="verb">range</spanx> attribute MUST only be used with EBML Elements that are either <spanx style="verb">signed integer</spanx>, <spanx style="verb">unsigned integer</spanx>, or <spanx style="verb">float</spanx>. The <spanx style="verb">range</spanx> attribute does not support date EBML Elements. The <spanx style="verb">range</spanx> expression may contain whitespace for readability but whitespace within a <spanx style="verb">range</spanx> expression MUST NOT convey meaning. The expression of the <spanx style="verb">range</spanx> MUST adhere to one of the following forms:
</t>
<t>
<list style="symbols">
<t><spanx style="verb">x-y</spanx> where x and y are integers or floats and <spanx style="verb">y</spanx> must be greater than <spanx style="verb">x</spanx>, meaning that the value must be greater than or equal to <spanx style="verb">x</spanx> and less than or equal to <spanx style="verb">y</spanx>.</t>
<t><spanx style="verb">&gt;x</spanx> where <spanx style="verb">x</spanx> is an integer or float, meaning that the value MUST be greater than <spanx style="verb">x</spanx>.</t>
<t><spanx style="verb">x</spanx> where <spanx style="verb">x</spanx> is an integer or float, meaning that the value MUST be equal <spanx style="verb">x</spanx>.</t>
</list>
</t>
<t>The <spanx style="verb">range</spanx> may use the prefix <spanx style="verb">not</spanx> to indicate that the expressed range is negated. Please also see the section on <xref target="textual-expression-of-floats"/>.
</t>
</section>

<section anchor="textual-expression-of-floats" title="Textual expression of Floats">
<t>When a float value is represented textually in an EBML Schema, such as within a <spanx style="verb">default</spanx> or <spanx style="verb">range</spanx> value, the float values MUST be expressed as a Hexadecimal Floating-Point Constants as defined in the C11 standard <eref target="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf">ISO/IEC 9899:2011</eref> (see section 6.4.4.2 on Floating Constants). The following table provides examples of expressions of float ranges.
</t>
<texttable>
<ttcol align="left">as decimal</ttcol>
<ttcol align="left">as Hexadecimal Floating-Point Constants</ttcol>

<c>0.0-1.0</c><c><spanx style="verb">0x0p+1-0x1p+0</spanx></c>
<c>1.0-256.0</c><c><spanx style="verb">0x1p+0-0x1p+8</spanx></c>
<c>0.857421875</c><c><spanx style="verb">0x1.b7p-1</spanx></c>
<c>-1.0--0.857421875</c><c><spanx style="verb">-0x1p+0--0x1.b7p-1</spanx></c>
</texttable>
<t>Within an expression of a float range, as in an integer range, the <spanx style="verb">-</spanx> (hyphen) character is the separator between the minimal and maximum value permitted by the range. Note that Hexadecimal Floating-Point Constants also use a <spanx style="verb">-</spanx> (hyphen) when indicating a negative binary power. Within a float range, when a <spanx style="verb">-</spanx> (hyphen) is immediately preceded by a letter <spanx style="verb">p</spanx>, then the <spanx style="verb">-</spanx> (hyphen) is a part of the Hexadecimal Floating-Point Constant which notes negative binary power. Within a float range, when a <spanx style="verb">-</spanx> (hyphen) is not immediately preceded by a letter <spanx style="verb">p</spanx>, then the <spanx style="verb">-</spanx> (hyphen) represents the separator between the minimal and maximum value permitted by the range.
</t>
</section>

<section anchor="note-on-the-use-of-default-attributes-to-define-mandatory-ebml-elements" title="Note on the Use of default attributes to define Mandatory EBML Elements">
<t>If a Mandatory EBML Element has a default value declared by an EBML Schema and the EBML Element's value is equal to the declared default value then that Element is not required to be present within the EBML Document if its Parent EBML Element is present. In this case, the default value of the Mandatory EBML Element may be assumed although the EBML Element is not present within its Parent EBML Element. Also in this case the parser of the EBML Document MUST insert the defined default value of the Element.
</t>
<t>If a Mandatory EBML Element has no default value declared by an EBML Schema and its Parent EBML Element is present than the EBML Element must be present as well. If a Mandatory EBML Element has a default value declared by an EBML Schema and its Parent EBML Element is present and the EBML Element's value is NOT equal to the declared default value then the EBML Element MUST be used.
</t>
<t>This table clarifies if a Mandatory EBML Element MUST be written, according to if the default value is declared, if the value of the EBML Element is equal to the declared default value, and if the Parent EBML Element is used.
</t>
<texttable>
<ttcol align="center">Is the default value declared?</ttcol>
<ttcol align="center">Is the value equal to default?</ttcol>
<ttcol align="center">Is the Parent Element used?</ttcol>
<ttcol align="center">Then is storing the EBML Element required?</ttcol>

<c>Yes</c><c>Yes</c><c>Yes</c><c>No</c>
<c>Yes</c><c>Yes</c><c>No</c><c>No</c>
<c>Yes</c><c>No</c><c>Yes</c><c>Yes</c>
<c>Yes</c><c>No</c><c>No</c><c>No</c>
<c>No</c><c>n/a</c><c>Yes</c><c>Yes</c>
<c>No</c><c>n/a</c><c>No</c><c>No</c>
<c>No</c><c>n/a</c><c>Yes</c><c>Yes</c>
<c>No</c><c>n/a</c><c>No</c><c>No</c>
</texttable>
</section>

<section anchor="note-on-the-use-of-default-attributes-to-define-nonmandatory-ebml-elements" title="Note on the Use of default attributes to define non-Mandatory EBML Elements">
<t>If an EBML Element is not Mandatory, has a defined default value, and is an Empty EBML Element then the EBML Element MUST be interpreted as expressing the default value.
</t>
</section>
</section>

<section anchor="ebml-header-elements" title="EBML Header Elements">
<t>This specification here contains definitions of all EBML Elements of the EBML Header.
</t>
<texttable>
<ttcol align="left">Name</ttcol>
<ttcol align="left">EBML</ttcol>

<c>Level</c><c>0</c>
<c>EBML ID</c><c><spanx style="verb">0x1A45DFA3</spanx></c>
<c>Mandatory</c><c>Yes</c>
<c>Multiple</c><c>No</c>
<c>Range</c><c>-</c>
<c>Default</c><c>-</c>
<c>Type</c><c>Master-element</c>
<c>Description</c><c>Set the EBML characteristics of the data to follow. Each EBML Document has to start with this.</c>
</texttable>
<texttable>
<ttcol align="left">Name</ttcol>
<ttcol align="left">EBMLVersion</ttcol>

<c>Level</c><c>1</c>
<c>EBML ID</c><c><spanx style="verb">0x4286</spanx></c>
<c>Mandatory</c><c>Yes</c>
<c>Multiple</c><c>No</c>
<c>Range</c><c>1</c>
<c>Default</c><c>1</c>
<c>Type</c><c>Unsigned Integer</c>
<c>Description</c><c>The version of EBML parser used to create the EBML Document.</c>
</texttable>
<texttable>
<ttcol align="left">Name</ttcol>
<ttcol align="left">EBMLReadVersion</ttcol>

<c>Level</c><c>1</c>
<c>EBML ID</c><c><spanx style="verb">0x42F7</spanx></c>
<c>Mandatory</c><c>Yes</c>
<c>Multiple</c><c>No</c>
<c>Range</c><c>1</c>
<c>Default</c><c>1</c>
<c>Type</c><c>Unsigned Integer</c>
<c>Description</c><c>The minimum EBML version a parser has to support to read this EBML Document.</c>
</texttable>
<texttable>
<ttcol align="left">Name</ttcol>
<ttcol align="left">EBMLMaxIDLength</ttcol>

<c>Level</c><c>1</c>
<c>EBML ID</c><c><spanx style="verb">0x42F2</spanx></c>
<c>Mandatory</c><c>Yes</c>
<c>Multiple</c><c>No</c>
<c>Range</c><c>&gt;3</c>
<c>Default</c><c>4</c>
<c>Type</c><c>Unsigned Integer</c>
<c>Description</c><c>The EBMLMaxIDLength is the maximum length in octets of the Element IDs to be found within the EBML Body. An EBMLMaxIDLength value of four is recommended, though larger values are allowed.</c>
</texttable>
<texttable>
<ttcol align="left">Name</ttcol>
<ttcol align="left">EBMLMaxSizeLength</ttcol>

<c>Level</c><c>1</c>
<c>EBML ID</c><c><spanx style="verb">0x42F3</spanx></c>
<c>Mandatory</c><c>Yes</c>
<c>Multiple</c><c>No</c>
<c>Range</c><c>&gt;0</c>
<c>Default</c><c>8</c>
<c>Type</c><c>Unsigned Integer</c>
<c>Description</c><c>The EBMLMaxSizeLength is the maximum length in octets of the expression of all Element Data Sizes to be found within the EBML Body. To be clear EBMLMaxSizeLength documents the maximum 'length' of all Element Data Size expressions within the EBML Body and not the maximum 'value' of all Element Data Size expressions within the EBML Body. Elements that have a Element Data Size expression which is larger in octets than what is expressed by EBMLMaxSizeLength SHALL be considered invalid.</c>
</texttable>
<texttable>
<ttcol align="left">Name</ttcol>
<ttcol align="left">DocType</ttcol>

<c>Level</c><c>1</c>
<c>EBML ID</c><c><spanx style="verb">0x4282</spanx></c>
<c>Mandatory</c><c>Yes</c>
<c>Multiple</c><c>No</c>
<c>Range</c><c>-</c>
<c>Default</c><c>matroska</c>
<c>Type</c><c>String</c>
<c>Description</c><c>A string that describes and identifies the content of the EBML Body that follows this EBML Header.</c>
</texttable>
<texttable>
<ttcol align="left">Name</ttcol>
<ttcol align="left">DocTypeVersion</ttcol>

<c>Level</c><c>1</c>
<c>EBML ID</c><c><spanx style="verb">0x4287</spanx></c>
<c>Mandatory</c><c>Yes</c>
<c>Multiple</c><c>No</c>
<c>Range</c><c>-</c>
<c>Default</c><c>1</c>
<c>Type</c><c>Unsigned Integer</c>
<c>Description</c><c>The version of DocType interpreter used to create the EBML Document.</c>
</texttable>
<texttable>
<ttcol align="left">Name</ttcol>
<ttcol align="left">DocTypeReadVersion</ttcol>

<c>Level</c><c>1</c>
<c>EBML ID</c><c><spanx style="verb">0x4285</spanx></c>
<c>Mandatory</c><c>Yes</c>
<c>Multiple</c><c>No</c>
<c>Range</c><c>-</c>
<c>Default</c><c>1</c>
<c>Type</c><c>Unsigned Integer</c>
<c>Description</c><c>The minimum DocType version an interpreter has to support to read this EBML Document.</c>
</texttable>
</section>

<section anchor="global-elements-used-everywhere-in-the-format" title="Global elements (used everywhere in the format)">
<texttable>
<ttcol align="left">Name</ttcol>
<ttcol align="left">CRC-32</ttcol>

<c>Level</c><c>1+</c>
<c>Global</c><c>Yes</c>
<c>EBML ID</c><c><spanx style="verb">0xBF</spanx></c>
<c>Mandatory</c><c>No</c>
<c>Range</c><c>-</c>
<c>Default</c><c>-</c>
<c>Type</c><c>Binary</c>
<c>Description</c><c>The CRC-32 Element contains a 32 bit Cyclic Redundancy Check value of all the Element Data of the Parent Element as stored except for the CRC-32 Element itself. When the CRC-32 Element is present, the CRC-32 Element MUST be the first ordered Element within its Parent Element for easier reading. All Top-Level Elements of an EBML Document SHOULD include a CRC-32 Element as a Child Element. The CRC in use is the IEEE-CRC-32 algorithm as used in the ISO 3309 standard and in section 8.1.1.6.2 of ITU-T recommendation V.42, with initial value of <spanx style="verb">0xFFFFFFFF</spanx>. The CRC value MUST be computed on a little endian bitstream and MUST use little endian storage.</c>
</texttable>
<texttable>
<ttcol align="left">Name</ttcol>
<ttcol align="left">Void</ttcol>

<c>Level</c><c>0+</c>
<c>Global</c><c>Yes</c>
<c>EBML ID</c><c><spanx style="verb">0xEC</spanx></c>
<c>Mandatory</c><c>No</c>
<c>Multiple</c><c>Yes</c>
<c>Range</c><c>-</c>
<c>Default</c><c>-</c>
<c>Type</c><c>Binary</c>
<c>Description</c><c>Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use.</c>
</texttable>
</section>
</section>
</section>

</middle>
<back>
<references title="Normative References">
<?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"?>
</references>
<references title="Informative References">
<?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2279.xml"?>
</references>

</back>
</rfc>
