<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-dispatch-mime-protobuf-04" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>Media Type Registration for Protocol Buffers</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-dispatch-mime-protobuf-04"/>
    <author initials="M." surname="Kucherawy" fullname="Murray S. Kucherawy" role="editor">
      <organization/>
      <address>
        <email>superuser@gmail.com</email>
      </address>
    </author>
    <author initials="W." surname="Kumari" fullname="Warren Kumari">
      <organization>Google</organization>
      <address>
        <email>warren@kumari.net</email>
      </address>
    </author>
    <author initials="R." surname="Sloan" fullname="Rob Sloan">
      <organization>Google</organization>
      <address>
        <email>rmsj@google.com</email>
      </address>
    </author>
    <date year="2025" month="November" day="03"/>
    <area>ART</area>
    <workgroup>DISPATCH</workgroup>
    <keyword>MIME</keyword>
    <keyword>protobuf</keyword>
    <keyword>media type</keyword>
    <keyword>application</keyword>
    <abstract>
      <?line 120?>

<t>This document registers media types for Protocol Buffers, a common extensible mechanism for serializing structured data.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://github.com/wkumari/draft-murray-dispatch-mime-protobuf"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-dispatch-mime-protobuf/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        DISPATCH Working Group mailing list (<eref target="mailto:dispatch@ietf.org"/>),
        which is archived at <eref target="https://www.ietf.org/mailman/listinfo/dispatch"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dispatch/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com//wkumari/draft-murray-dispatch-mime-protobuf"/>.</t>
    </note>
  </front>
  <middle>
    <?line 124?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Protocol Buffers ("protobufs") were introduced in 2008 as a free, open source, platform-independent mechanism for transport and storage of structured data: their use has become
increasingly common and Protobuf implementations exist in many languages (C++, C#, Dart, Go, Java, Kotlin, Objective-C, Python, JavaScript, Ruby, Swift, and perhaps others). See <xref target="Protobuf"/> for more information.</t>
      <t>Protobuf consists of an interface definition language ("IDL"), wire encoding formats, and language-specific implementations (typically involving a generated API) so that clients and servers can be easily deployed using a common schema. Protobuf supports multiple wire formats for interchange: <xref target="Binary"/>, which is optimized for wire efficiency, and <xref target="ProtoJSON"/>, which maps the Protobuf schema onto a JSON structure.</t>
      <t>Serialized objects are occasionally transported within media that make use of media types (see <xref target="RFC2045"/> et seq) to identify payloads. Accordingly,
current and historical media types used for this purpose would benefit from registration. This document requests those registrations of IANA.</t>
    </section>
    <section anchor="key-words">
      <name>Key Words</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document
are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
    </section>
    <section anchor="description">
      <name>Payload Description</name>
      <t>These media types are used in the transport of serialized objects only.  The IDL and object definitions, if transported, would be used with any appropriate text media type.
In the three figures below, only the third of these would ever be used with these media types (a JSON example is depicted).</t>
      <t>An example use of the IDL to specify a "Person" object:</t>
      <artwork><![CDATA[
edition = "2023";

message Person {
  string name = 1;
  int32 id = 2;
  string email = 3;
}
]]></artwork>
      <t>An example of python code that uses code generated from the IDL definition above to create an instance of a "Person" object:</t>
      <sourcecode type="python"><![CDATA[
person = Person()
person.id = 1234
person.name = "John Doe"
person.email = "jdoe@example.com"
]]></sourcecode>
      <t>An example of the above instance expressed in JSON:</t>
      <artwork><![CDATA[
{
  "name": "John Doe",
  "id": 1234,
  "email": "jdoe@example.com"
}
]]></artwork>
    </section>
    <section anchor="encoding">
      <name>Encoding Considerations</name>
      <t>Protobuf supports only the <xref target="Binary"/> and <xref target="ProtoJSON"/> formats for interchange, both of which are platform-independent.
For binary forms that need to transit non-binary transports, a base64 encoding (e.g., <xref target="RFC4648"/>) is recommended.</t>
      <t>The media type includes an optional "encoding" parameter indicating which encoding format is to be used with that particular payload.  This is included for future extensibility. Valid values for this parameter are "binary" and "json", and other values MUST be treated as an error.  See <xref target="iana"/> for the defaults for each of the two registered media types. Using "binary" for the JSON type or "json" for the binary type MUST be treated as an error.</t>
    </section>
    <section anchor="versions">
      <name>Versions</name>
      <t><xref target="Proto2"/> was the first public version of the Protobuf schema language, and <xref target="Proto3"/> and <xref target="Edition2023"/> came later, with the last of these being current at the time of writing. Future editions of the IDL are expected.</t>
      <t>These versions refer to evolutions of the schema of the IDL, not the wire format. Accordingly, a serialized object generated by any of these is compatible with any other. The media type registrations in <xref target="iana"/> include support for versioning of the wire format, should it ever change, but do not refer to the IDL, which can evolve independently.</t>
      <t>Note that there may be semantic changes implicit in the IDL version which can affect the interpretation of otherwise compatible bits on the wire. For example, in Proto2, unknown values of an enumeration were interpreted as invalid, whereas in Proto3 they are retained.</t>
      <t>Clients MUST reject payloads with an unsupported version number.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>The payload for these media types contain no directly executable code. While it is common for a protobuf definition to be used as input to a code generator which then produces something executable, that applies to the schema language, not serializations.</t>
      <t>Protobuf provides no security, privacy, integrity, or compression services: clients or servers for which this is a concern should avail themselves of solutions that provide such capabilities (e.g. <xref target="RFC8446"/>). Implementations should be careful when processing Protobuf like any binary format: a malformed request to a protobuf server could be crafted to, for example, allocate a very large amount of memory, potentially impacting other operations on that server.</t>
      <t>Protobuf supports embedded content in <tt>string</tt> or <tt>bytes</tt> fields: in both cases, applications should ensure that the format of the content is precisely as expected. Note that UTF-8 validation of <tt>string</tt> fields is optional (see <xref target="ProtoFeatures"/>) and a manual well-formedness check may be necessary. Further, handling Unicode text generally can be quite complex with problems discussed, for example, in <xref target="UniChars"/> and <xref target="RFC8264"/>; so it is best to rely on well-supported internationalization libraries whenever possible.</t>
      <t>In order to safely use Protobuf serializations on the web, it is important to ensure that they are not interpreted as another document type, such as JavaScript: we recommend base64-encoding binary Protobuf responses whenever possible to prevent parsing as active content. Servers should generally follow the advice of <xref target="RFC9205"/> to prevent content sniffing for all binary formats.</t>
      <t>Further, when using JSON serializations it is important that it is clear to browsers that the content is pure JSON, so that they can inhibit Cross-Site Script Inclusion or side-channel attacks using techniques such as Cross-Origin Read Blocking (<xref target="CORB"/>). Per <xref target="RFC6839"/>, pure JSON content is indicated by a <tt>+json</tt> subtype suffix (see also <xref target="MIMESNIFF"/>); so when serializing Protobuf content to JSON, users MUST use the <tt>application/protobuf+json</tt> media type. When using JSON, <tt>charset</tt> can prevent certain encoding confusion attacks so users should specify it for all JSON encodings.</t>
      <t>In the <xref target="Any"/> type there is technically a link, which was intended to be dereferenced to obtain schemas for a given type; however this is not supported by widely used Protobuf implementations.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>As per the process defined in <xref target="RFC6838"/>, this document requests the registration of <tt>application/protobuf</tt> and <tt>application/protobuf+json</tt> as media types for Protobuf, and the notation of <tt>application/x-protobuf</tt>, <tt>application/x-protobuffer</tt>, and <tt>application/x-protobuf+json</tt> as deprecated aliases:</t>
      <section anchor="registration-for-the-applicationprotobuf-media-type">
        <name>Registration for the "application/protobuf" Media Type</name>
        <t>Type name: application</t>
        <t>Subtype name: protobuf</t>
        <t>Required parameters: none</t>
        <t>Optional parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>encoding</tt>, which indicates the type of Protobuf encoding and is "binary" by default for <tt>application/protobuf</tt>, indicating the <xref target="Binary"/> format. At the time of writing, no other encoding can be used for <tt>application/protobuf</tt> so this parameter is for extensibility.</t>
          </li>
          <li>
            <t><tt>version</tt>, which indicates the version of the wire encoding specification (not the schema language), with default <tt>1</tt>. At the time of writing, no protobuf wire encodings are versioned so this parameter is for extensibility. Unversioned wire encodings should be treated as having version <tt>1</tt>.</t>
          </li>
        </ul>
        <t>Encoding considerations: binary</t>
        <t>Security considerations: see <xref target="security"/></t>
        <t>Interoperability considerations: The Protobuf specification includes versioning provisions to ensure backward compatibility when encountering payloads with unknown properties.</t>
        <t>Published specification: <xref target="Protobuf"/></t>
        <t>Applications that use this media type: Any application with a need to exchange or store structured objects across platforms or implementations.</t>
        <t>Fragment identifier considerations: None.</t>
        <t>Additional information:</t>
        <ul spacing="normal">
          <li>
            <t>Deprecated alias names for this type: <tt>application/x-protobuf</tt>, <tt>application/x-protobuffer</tt></t>
          </li>
          <li>
            <t>Magic number(s):</t>
          </li>
          <li>
            <t>File extension(s):</t>
          </li>
          <li>
            <t>Macintosh file type code(s):</t>
          </li>
        </ul>
        <t>Person &amp; email address to contact for further information: Protobuf &lt;protobuf-team@google.com&gt;</t>
        <t>Intended usage: COMMON</t>
        <t>Restrictions on usage: None</t>
        <t>Author: Rob Sloan &lt;rmsj@google.com&gt;</t>
        <t>Change controller: Protobuf &lt;protobuf-team@google.com&gt;</t>
        <t>Provisional registration? (standards tree only): No</t>
      </section>
      <section anchor="registration-for-applicationprotobufjson-media-type">
        <name>Registration for "application/protobuf+json" Media Type</name>
        <t>Type name: application</t>
        <t>Subtype name: protobuf+json</t>
        <t>Required parameters: <tt>charset</tt>, which must be set to <tt>utf-8</tt> (case-insensitive)</t>
        <t>Optional parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>encoding</tt>, which indicates the type of Protobuf encoding and is <tt>json</tt> by default for <tt>application/protobuf+json</tt>, indicating the <xref target="ProtoJSON"/> format. At the time of writing, no other encoding can be used for <tt>application/protobuf+json</tt> so this parameter is for extensibility.</t>
          </li>
          <li>
            <t><tt>version</tt>, which indicates the version of the wire encoding specification (not the schema language), with default <tt>1</tt>. At the time of writing, no protobuf wire encodings are versioned so this parameter is for extensibility. Unversioned wire encodings should be treated as having version <tt>1</tt>.</t>
          </li>
        </ul>
        <t>Encoding considerations: Same as encoding considerations of <tt>application/json</tt> as specified in <xref target="RFC8259"/>, Section 11.</t>
        <t>Security considerations: see <xref target="security"/></t>
        <t>Interoperability considerations: The Protobuf specification includes versioning provisions to ensure backward compatibility when encountering payloads with unknown properties.</t>
        <t>Published specification: <xref target="Protobuf"/></t>
        <t>Applications that use this media type: Any application with a need to exchange or store structured objects across platforms or implementations.</t>
        <t>Fragment identifier considerations: None.</t>
        <t>Additional information:</t>
        <artwork><![CDATA[
 Deprecated alias names for this type: x-protobuf+json
 Magic number(s):
 File extension(s):
 Macintosh file type code(s):
]]></artwork>
        <t>Person &amp; email address to contact for further information: Protobuf &lt;protobuf-team@google.com&gt;</t>
        <t>Intended usage: COMMON</t>
        <t>Restrictions on usage: None</t>
        <t>Author: Rob Sloan &lt;rmsj@google.com&gt;</t>
        <t>Change controller: Protobuf &lt;protobuf-team@google.com&gt;</t>
        <t>Provisional registration? (standards tree only): No</t>
      </section>
    </section>
    <section anchor="contact">
      <name>Contact</name>
      <t>Please contact protobuf-team@google.com for requests to adjust this specification. Issues may be raised at https://github.com/protocolbuffers/protobuf.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2045">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This initial document specifies the various headers used to describe the structure of MIME messages. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2045"/>
          <seriesInfo name="DOI" value="10.17487/RFC2045"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC6839">
          <front>
            <title>Additional Media Type Structured Syntax Suffixes</title>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>A content media type name sometimes includes partitioned meta- information distinguished by a structured syntax to permit noting an attribute of the media as a suffix to the name. This document defines several structured syntax suffixes for use with media type registrations. In particular, it defines and registers the "+json", "+ber", "+der", "+fastinfoset", "+wbxml" and "+zip" structured syntax suffixes, and provides a media type structured syntax suffix registration form for the "+xml" structured syntax suffix. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6839"/>
          <seriesInfo name="DOI" value="10.17487/RFC6839"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="Protobuf" target="https://protobuf.dev/">
          <front>
            <title>Protocol Buffers</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9205">
          <front>
            <title>Building Protocols with HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>Applications often use HTTP as a substrate to create HTTP-based APIs. This document specifies best practices for writing specifications that use HTTP to define new application protocols. It is written primarily to guide IETF efforts to define application protocols using HTTP for deployment on the Internet but might be applicable in other situations.</t>
              <t>This document obsoletes RFC 3205.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="56"/>
          <seriesInfo name="RFC" value="9205"/>
          <seriesInfo name="DOI" value="10.17487/RFC9205"/>
        </reference>
        <reference anchor="RFC8264">
          <front>
            <title>PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="M. Blanchet" initials="M." surname="Blanchet"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>Application protocols using Unicode code points in protocol strings need to properly handle such strings in order to enforce internationalization rules for strings placed in various protocol slots (such as addresses and identifiers) and to perform valid comparison operations (e.g., for purposes of authentication or authorization). This document defines a framework enabling application protocols to perform the preparation, enforcement, and comparison of internationalized strings ("PRECIS") in a way that depends on the properties of Unicode code points and thus is more agile with respect to versions of Unicode. As a result, this framework provides a more sustainable approach to the handling of internationalized strings than the previous framework, known as Stringprep (RFC 3454). This document obsoletes RFC 7564.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8264"/>
          <seriesInfo name="DOI" value="10.17487/RFC8264"/>
        </reference>
        <reference anchor="CORB" target="https://www.chromium.org/Home/chromium-security/corb-for-developers">
          <front>
            <title>Cross-Origin Read Blocking for Web Developers</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MIMESNIFF" target="https://mimesniff.spec.whatwg.org/#mime-type-groups">
          <front>
            <title>MIME Sniffing: Living Standard</title>
            <author>
              <organization>WHATWG</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Any" target="https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/any.proto">
          <front>
            <title>any.proto Schema Definition</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Binary" target="https://protobuf.dev/programming-guides/encoding">
          <front>
            <title>Protobuf Binary Wire Encoding Spec</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ProtoJSON" target="https://protobuf.dev/programming-guides/json">
          <front>
            <title>Protobuf JSON Wire Encoding Spec</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Proto2" target="https://protobuf.dev/reference/protobuf/proto2-spec">
          <front>
            <title>Proto2 Schema Language Specification</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Proto3" target="https://protobuf.dev/reference/protobuf/proto3-spec">
          <front>
            <title>Proto3 Schema Language Specification</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Edition2023" target="https://protobuf.dev/reference/protobuf/edition-2023-spec">
          <front>
            <title>Proto Edition 2023 Schema Language Specification</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ProtoFeatures" target="https://protobuf.dev/editions/features/">
          <front>
            <title>Protobuf Feature Settings for Editions</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="UniChars" target="https://datatracker.ietf.org/doc/draft-bray-unichars/">
          <front>
            <title>Unicode Character Repertoire Subsets</title>
            <author>
              <organization>IETF</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 304?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Orie Steele provided valuable feedback to this work.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1ba28bR5b93r+iQAMLaUJStqTxOvRmN7JsxUqsx5ryGAvM
BxW7i2RZzW6mqlo0x1B++55769FNSgoSI9kPiwSDidiPqvs899xbncFgkDnt
SjUSvTNVaCmu1ksl3quZts5Ip+tKTGsjLk3t6rwuxatmOlXG9rJcOjWrzXok
dDWts6yo80ousE5h5NQNtHLTQaHtUrp8PljohRosaY1JMx08PcxsM1loa7G8
w34jcfrm6kSIJ0KWtoYouirUUuH/Ktfrix4Ec7XRsqQfp0ev8C/I1Dt9f3XS
y55UzWKizEg8fSoGA+Hm2gr8z82hxsmx8Hf7oqodX2PxwtUh/skKKDLK8rqy
qrKNHQlnGpXdjsRBJo2SI3H0/ipb1eZmZupmORKvT8eXR1fHb7MbtcblYpSJ
gTg7PXtD/4460t8LtifpR7/kclnqnC2a3aqqwZ5CbC8phDfHR2ynq5n4ge7j
6kLqEpYN5vyejDuszQx3pMnnIzF3bmlHe3ur1WoYb+7RSwtZ7ZVwJfloL75P
G2s3byYjsbe6aRbS6D3vtUVjjFw/4je8VsJW1rX7+WWGeb34XQtlsnHz2pDl
sKiuYPSzofipyefKyNUa13wonfEqYrx5T3lr2GapTGOV+X5GF0gI3DQ1xbIP
mM7yH2kJki+t/VEao6r2Kiw2Ej/U9axU7R4rfuh7r9qwUq6z5PuhGJe1rNKK
7+tJuvLgamZhP30/44ssbZZVtVkgJG45GBCt+08P/z5CGlA4Ud7hphWyKoSq
8rpARNjw3LNn39JzP6m1oBi0nKQwBkSj+wj/WpxWBQUcZfPPjTZqgWwS79St
KsMqz18cvODdUqAKu1S5noY49VubLhbAhbkqGqPaJViQowIWxwOyFB0YGSOV
coenCzFeV05+FmPAh/4c337x7N8P6e1FLU1Uy985fH7Iol0hY19Jq5497/O/
D/b7LBT9/fxQvJZOijebtnmx//dv46s/yls5zo1eOnEx+aRyJ85r5zXZ+XF8
cb7rVzitnEIeyWqmxAlbHUtdhmgl1yAvpZkpRH4vhn4M5mGhbvd6/pkApPfB
MqP823T1i8PD51HMKyMru6wN3CPXyoixyhuj3VrsXL0b77bg+w8sRrI/Gx74
Rb7df8rx8qrRJZkgPWrFCqkp3l5dXUarPGdTX75/c3w6xrXji/evvGopGfkf
jtzjuakXullsqHVsamsHF0bPKMiUhBfKOmecouj7qCbiNUVXvWSdu1br4lMe
1maMelsv1F68MrBB7728NpMBFh0UacEMC1JajM9PT04eFfzj26Orjz9siM25
NK40Aq/CE+/0LUk8dggjaYqH5SS4svTKkBJiuJpLt5qxwE8YyShXBgzeLNdR
tX5UossWPVuZZLUecgCJMXBtIWE4SMcZ9LBAHaBdBhdPfHClQNyblPWEQL/a
sybf8zjT3k1bksCvdCXN75Q5Xgwvi4+AlJR7Ygw7PSz6RqLgx8zIxQKvDGaN
LpTdi9CWxZyjxPxK0ejVP0ywTxalOgq1/xUS7UfvvgOyNBLgMu7C62+Qyii4
GAbq+JH/2B9QXCbhDr5CuIM/TbiDJNwbXxT2n+5/jYTxdUHv/xnSKr/+gNbf
NOiJklS27FeGYXgdOO4cFSbGx6DNI8i4IWsQzO5Ngxx7JNmHSh/PpXlcKCLR
GwLhDWSBEvSazFHjANvAUldThoybiVXuEXFAiiVqfn4DkpwIJSh+oHcTIncN
Vid5INwAxFtOiCXkLsuuiILj4YYZh+cPQKoOIbYPNhUo7QIIt4DL1WcHNq4n
pcJbVJm1XfA74HvoA/S/KLVtSy9I3qGXY6GLAqwre0Jl3dQFHqEg+vJE08+7
LNveVuz0ovVtb1esECZCh1extKYAfPpCSNAhMTVKoflAbyJs3ZgcP5YgxVTc
B52mZUtol+o7cRcLakoRXE+3NRhRh6I9kZtjv4mCORTIQ45GxELlch0NRAul
eNOLZcn0LtA29RkWJ8FB/9cg7T5loOjxN9/0xfGTPmiPcX0Q1D5TpL74qXal
rvqBJYGlDI774nKNEKv6HRbVF++bybovxis9dZ6JIZ7mcmlFDdGN3QUpVkp8
+RJlu7tjCyxqNmogQXU1DG4g6an1gryWDCIrMr0yU5mjVUtFMekAX52+ftfb
7YPfYMVYOyJX9iLFhweRzd4z0A6CENBRwp66uq1LpgRSzFSFJsPBG0eXp7vw
MPwhnchLjVc9G0b83VLM5JB0AgHgFiwCx5f1Gu811q8UvGQZtIatp9C0UBwg
F5rSaQjl9YhUn0ylWzI6giF9tb27g8Zz5Bu1tvXS6YX+F7aj570hwG5ySJmv
vQmCA6getq8uyE/UA7fieFBFF15DaK6eKSThonFINuxUc2DABtisznNpmexD
9RTbeIg4J0Wdz3My3ULeKA5n+Lab/juWoyS0PAgS5WDan3epb9GUQXq6Fku5
RjtV2KE4ysEIC06AfgaOaCjHSE8gDU0G4MqN5bGjNw5PA5aNWdaQYVU3ZQGv
VYgrh1SuFxvNzVBsA9fPjaK4RBbg7e6jHKunR+dHQ8IZ6sI+UhdG0KfETWrK
emcfxlc0s6B/i/ML/vv9m//+cPr+zWv6e/z26N279Ed8Yvz24sO71+1f7ZvH
F2dnb85f+5dxVWxdOjv6n54PgN7F5dXpxfnRux7hgOsqRmMNsvNE+VhbGkXO
A96A9SDNJx70Xh1fimeHwUlozOAk/puaNvy9mqvKb1VXCAP/E8G1pkmHkhTH
AgGCRFlqJ0tKTSvsvF5VAkCh2HCX3sFgv5bhxeN00f66Y4tateFcEp8dzIqp
DroSot4PWZJvKLjRAnZ4kX0z2AIMxNPTbiz3U7T4vbidIjSFdqZeYhM01g5l
qiPaMDsNEs1RJsRUz6h2Y4myXvW9mfxdbQqS1bFqfh/0OWZzM3dP8Z2Qouqz
JDwjKADwaBT2Yhf2PKrSnZBxLqgMZ3sohPigKcAvUKZghFGW/fLLL1mgHOI7
0SM61HuZZWiBLEGuf158AVFA/BO+0bwDTz57ybMQd7CPnMXv/ZftIzzywLWD
l9kdb9AVD6ItubYIpieMFBDZ+p8tCnOKRiU61UBO6lsOYaqL8ANXDYuOLue1
H9Ex7JktvT7fBcV2dsOVISvxbP/gMF4IevZ+rOeVeF2rXrwRtet9Kmr1fVCL
urPeQ7qSBl7kJKX6jKyzIYh9w8NvkpF7tG1v1Nm2T1d1gWskHf9iCeih+xIE
ez9pe6BjqrCFitj15Umsm3edMpxKUwrUtvjcrymPlay+mIAJkNa+5lCyPsSQ
htkJXpz4VpJuWh8GlYJN4FlORaB0BX4enkrZyURx4idAiQHsqOFs2PcQRdOj
u7tdShBDFGpBexZDD89tRkHuvGwKgpSKiyrPr3pxyR4KEFpCRbxZ+1kabeT1
2mIePHGutxMY17GE03lTAhBDOWMo8jPqsL8vVdOGe4bIfHWpHWDrHwCzQtzK
sgmk2Ve0JBjZt+cN1PPAT21rKALMyeLLXIMmBJdKBryH2sqY2kAkz9q0rGRg
bDwrV1MJnuI3VjKfx2h2qzrxeizVAamh+MAUKMkU12LkYqvT6J6FTPeig+nu
r4lJQR1mYBTFt+FPRHGIzX0qTNKTnKk2IMHLZlKCAIZHo/zbBCgyxg3ydJDi
vtPH4lpOqECTcNNPSI3f1rWYPlFkg0RU/MkDSBvDwcpoCqShOAkeD91eF7El
RwIw28W4xapRX8G9LMWbAndtNl6OjC4t1Z58dJjmJqNCNt0rmx0Unqy58CXl
NOH0YolsmDB/DYWRg20otlJskzUB7FKQheCPuMPBEDQk4wUNOkL3iT5QrQQs
cLlMiNOglNesZ7JM0t6nK9F1MhZjcAIh8IIsO69dKEGkAISXa4o/CzOChuZh
F8s9BDi2i7SD3BTDqt1EoqXMvb0TufIDZyjEJlpp2LBjwIlmzE3aDmkEHctH
n3bzod0XTXVTEX8KCe3bJVWB1IXpfGxdu5wO/Q1BCBlCUReZFjwIbM2Qk5zU
FUfaceh1OA2N4lCIPDz6GoIEp2GLaIJwokYpmsbX9+pOHPB6XhcXjjiwRXfQ
F5JY8KsoYJcc7oJZsIKTZDfiCkPxca6JCbkQlYtwXinTSVyXN3QQmg2xROBw
59PlHdRSsTshER940BgA1BWdOHU3s44MfR83fLSnbAy7e5hCgRkTzJui2/5i
h1uaN5Ke0T59XNW3kro5cufMX4NkFDdEHEgbakU1RBulBtXPR7g/nXbU8MWG
tAT1MFVMI3T1IDGQeGEVEoMDyiY88dXLy4Yc5fBeSi5LpCuX29AQHB4+R7Ud
itOtLjvsA5PniLJpU3KX4M+QrE3HFWSEUt8oRpEOI5BuBKEXsqQfqoj9mPdY
cq9XGLrFrWhAxRyi78tWTCQ0IzUfh0mKWRqLGJBbuaibyvn2dFEbsjzwAInv
hwPI0pyrvi+ldBIRG8DKm8jvP3yISClkREHlnSKZCgGC+drz42vy1fVk7ZS9
RqVSZWHpIN2TJ3TXijhOe2KcbElH1KaFq8g+AlimfcAQkDAAGuggbVtJRAt2
H65OBi8EY0PCpySclyjOGpgWhY59YzxKHIsqJHmpavDQSpXlwLurgouBnSq/
iYhaKXI7vEuVz5A9+wLYWpRk3ziq5JbKZyI5IIxZfm6086BZqs8ehhAAyEDQ
xkLbvCEqveVvrjVxZppKeTgKu7t7SeMdjxuTEFWGzMUwCi1ahGNAraS3Q8hg
BOzESEOZQDHN5WhZW55YIhbQB6K6+kpk5ZTWpZbsshO0HTRI6K8m/SASAg+b
owBxld90usdsApUtqJeVj9I0wSAc7fvkxe12jDfCVi0zDlR6kChtyMEkLTy9
pM8jHtCVxIMAt7QbSKmffkESniHGeKSZoEelEMWtf6c1snLlO6SC0IzCkL1E
R5vwWmf9GN02nOV5oC/LTcwgbE3hxXjjZ3J+uLVp93u2JguHWlLSDIMKhqlX
lmRPOdfNMvILrdxPw0J2UM4d6Rws3gl/bDqmAA5H0afEfDwdBWADXwfEMSpV
gik6md/YILJT+bzSBHrJh79yBrvz5Qud6TISo7P1VqTzeRoAJkG70oemJlA8
cf0NsfJr7DXx3wLwWb1PfPouByumA1jswgnEBu7O5LtTXd4HJvQGatiKzCso
F8iS1x2ISycgQYrOWAVFfsONfXHNBw/KXbOlU4Aow4QhBTJkmHpDR8NCZC9H
iMQ4FtEuRZMfscRvCnwy+274qKJWmG3jqSI1fewjP0pGzdfVTaScK6YYjlvP
wDyACPEUii/VE5bXEwYbiMsMmVPxLi/FvF5xusUazkwiARO8tkL0eHB5/DiA
ORkNK+/zMabiWXZkaYzPWobi7FmTH0/EQHpBgeQeG5FuUn2uJg9595px+Ncc
Lx85KMITvj2jvaraPbzP5/SV0XX/sTtwwXX/vhztA60kaBWAk74RLTXV5RGs
+eT+B3IkVO8hrXqdD2LAeil4/OdC3Q/CsnHIOX+r/VAqfLpTtB0/eEJVV1jq
Ilbmzq0s+5u4jrF7nY4MQp57N/kefNqGS0oXsgi8m1r3yTpOAFjFh/3Z785G
tqZGqdl8sAEmYhx4VZuxvt6n+f0jMcRguzEH0WFIsTE9IWuE/uQRY2zNBTYP
lTY+hhI7sY/e4ve7YQoQTXX97PpXNU7MdWMzP9YO4kD536gheFP7ztaCLf3u
zFLmks+6ot4kbJa96QBmByBGobLSQVDo6LYf8KQwtXV3hJYQlnmyF/HeK1cb
85cNE6d5XGcOwC2IH3u0VGgCMF9JU6Q+2m/F1YgM0JAQ/PZG6xob6CULSH0M
8XaaENm5KjaFGW0cYgIju2w8Tqy9j1q4GtGnQN3MDi1zGmuqz+EzM6r8jg5F
O0fA6Ywtpyqfxqbc193H9BMjZwzC4bxMcxe0aetzxAWdDLRf53XOYBktXm8B
HCNQZ9LotfoqiMXqZ3Km8zAa2LG7I1w6oX49BHFdhYtnMkeprO0cnUcZIIra
Ab6dhQOIfwuHCrIoqAXm+T+NCHIX5qdM+jY0bAPtn/+RPj92Si46n2H+8z99
0HKdbujEYyToUO3inOCXOqI8sfRw+5wB+Mh/gdF+94lNtj7xpLWPvcNJVAO2
S18q/0apLmPow2/d4vpf4GTh8zVLua14ZL9Lcj1cnB4sTN/4GezXV6dv/AdS
D5aoRNDS2XODHovHakwJrxs3Hby4FjvU6w40f3utqWfY/RML27Uv67+lrHkG
8EBtu38E8oeXt0jD/6px/yc1bkzjfBqSPPzAPYaZuGEwXYck06fHRJLHyn9z
9OzZ8K/a+f+1dvJ3d7+tfG51Fv7Ve7WRrz5QHsPTf1XIP6pCUh/s+EvFy1JJ
q5KRHtuKrdf2ujUM/InqGbt4I/KH4tRaGtiEmaeRmk8b3O/5kjt8yEiJStIe
5ZR5pSo4ZG32ZeSDRhXf9aaytKqHFLswmv57C6VKFaf2/tiYz0qmSCFazh9R
QGj675mG2f8C46p4O/41AAA=

-->

</rfc>
