<?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.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-murray-dispatch-mime-protobuf-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title>Media Type Registration for Protocol Buffers</title>
    <seriesInfo name="Internet-Draft" value="draft-murray-dispatch-mime-protobuf-00"/>
    <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="April" day="25"/>
    <area>ART</area>
    <workgroup>DISPATCH</workgroup>
    <keyword>MIME</keyword>
    <keyword>protobuf</keyword>
    <keyword>media type</keyword>
    <keyword>application</keyword>
    <abstract>
      <?line 113?>

<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-murray-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 117?>

<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, 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="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"/> for interchange, both of which are platform-independent.
For binary forms that need to transit non-binary transports, a base64 Content-Transfer-Encoding (xref to <xref target="RFC4648"/>) is recommended.</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, but 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>In order to safely use Protobuf serializations on the web, it is important to ensure that they cannot be interpreted as another document type, such as JavaScript. For this reason, we recommend that binary protobuf serializations be wrapped in a Base64 <tt>Content-Transfer-Encoding</tt> according to <xref target="RFC2045"/>. 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 can be 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> MIME type. Further, <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>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. Clients MUST reject JSON encodings without the <tt>+json</tt> subtype suffix and MUST reject unknown encodings. 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 encoding specification. Clients MUST reject unknown version settings. At the time of writing, no protobuf encodings are versioned so this parameter is for extensibility.</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>
        <artwork><![CDATA[
 Deprecated alias names for this type: `application/x-protobuf`, `application/x-protobuffer`
 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 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. Clients MUST reject binary encodings with <tt>+json</tt> and MUST reject unknown encodings. 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 encoding specification. Clients MUST reject unknown version settings. At the time of writing, no protobuf encodings are versioned so this parameter is for extensibility.</t>
          </li>
        </ul>
        <t>Encoding considerations: Same as encoding considerations of <tt>application/json</tt> as specified in <xref target="RFC7159"/>, 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="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</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 second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC2077">
          <front>
            <title>The Model Primary Content Type for Multipurpose Internet Mail Extensions</title>
            <author fullname="S. Nelson" initials="S." surname="Nelson"/>
            <author fullname="C. Parks" initials="C." surname="Parks"/>
            <author>
              <organization>Mitra</organization>
            </author>
            <date month="January" year="1997"/>
            <abstract>
              <t>The purpose of this memo is to propose an update to Internet RFC 2045 to include a new primary content-type to be known as "model". [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2077"/>
          <seriesInfo name="DOI" value="10.17487/RFC2077"/>
        </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="RFC6657">
          <front>
            <title>Update to MIME regarding "charset" Parameter Handling in Textual Media Types</title>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="July" year="2012"/>
            <abstract>
              <t>This document changes RFC 2046 rules regarding default "charset" parameter values for "text/*" media types to better align with common usage by existing clients and servers. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6657"/>
          <seriesInfo name="DOI" value="10.17487/RFC6657"/>
        </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="RFC7303">
          <front>
            <title>XML Media Types</title>
            <author fullname="H. Thompson" initials="H." surname="Thompson"/>
            <author fullname="C. Lilley" initials="C." surname="Lilley"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This specification standardizes three media types -- application/xml, application/xml-external-parsed-entity, and application/xml-dtd -- for use in exchanging network entities that are related to the Extensible Markup Language (XML) while defining text/xml and text/ xml-external-parsed-entity as aliases for the respective application/ types. This specification also standardizes the '+xml' suffix for naming media types outside of these five types when those media types represent XML MIME entities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7303"/>
          <seriesInfo name="DOI" value="10.17487/RFC7303"/>
        </reference>
        <reference anchor="RFC8081">
          <front>
            <title>The "font" Top-Level Media Type</title>
            <author fullname="C. Lilley" initials="C." surname="Lilley"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This memo serves to register and document the "font" top-level media type, under which subtypes for representation formats for fonts may be registered. This document also serves as a registration application for a set of intended subtypes, which are representative of some existing subtypes already in use, and currently registered under the "application" tree by their separate registrations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8081"/>
          <seriesInfo name="DOI" value="10.17487/RFC8081"/>
        </reference>
        <reference anchor="RFC9694">
          <front>
            <title>Guidelines for the Definition of New Top-Level Media Types</title>
            <author fullname="M.J. Dürst" initials="M.J." surname="Dürst"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>This document defines best practices for defining new top-level media types. It also introduces a registry for top-level media types, and contains a short history of top-level media types. It updates RFC 6838.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="9694"/>
          <seriesInfo name="DOI" value="10.17487/RFC9694"/>
        </reference>
        <reference anchor="RFC9695">
          <front>
            <title>The 'haptics' Top-Level Media Type</title>
            <author fullname="Y. K. Muthusamy" initials="Y. K." surname="Muthusamy"/>
            <author fullname="C. Ullrich" initials="C." surname="Ullrich"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>This memo registers and documents the 'haptics' top-level media type, under which subtypes for representation formats for haptics may be registered. This document also serves as a registration for a set of subtypes, which are representative of some existing subtypes already in use.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9695"/>
          <seriesInfo name="DOI" value="10.17487/RFC9695"/>
        </reference>
        <reference anchor="RFC4289">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document specifies IANA registration procedures for MIME external body access types and content-transfer-encodings. 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="13"/>
          <seriesInfo name="RFC" value="4289"/>
          <seriesInfo name="DOI" value="10.17487/RFC4289"/>
        </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="RFC7159">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2014"/>
            <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="RFC" value="7159"/>
          <seriesInfo name="DOI" value="10.17487/RFC7159"/>
        </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="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>
      </references>
    </references>
    <?line 276?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Orie Steele provided valuable feedback to this work.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1abXPbNrb+zl+BkWd27K0kv6Vpqmx34zhJ6zZOPJF3sx/2
gyESkpCQBAuAlrUZ97fvcw7AF9lyN829vfdLPZnYIkHgvD/POdRoNEq89rma
iMG5yrQUl+tKiXdqoZ230mtTirmx4sIab1KTi+f1fK6sGySp9Gph7HoidDk3
SZKZtJQF9smsnPtRUVsr16NMu0r6dDkqdKFGFe0yq+ejg4PE1bNCO4cDPE6c
iLOXl6+E2BEydwbC6DJTlcJ/pR8MxQCieWO1zOnD2clz/IJUg7N3l68GyU5Z
FzNlJ+LgQIxGwi+1E/jnl1Dk1akId4eiNJ6vsYDx6hg/SQZVJklqSqdKV7uJ
8LZWyfVEHCfSKjkRJ+8uk5WxHxfW1NVEvDibXpxcnv6QfFRrXM4miRiJ87Pz
l/S70ZH+LtiipB99klWV65RtmlyrssaZQtzdUohgjvc4TpcL8T3dx9VC6hy2
jeZ8ppWfj41d4I606XIilt5XbrK/v1qtxs3NfXqokOV+DmeSl/ab5+lg7Zf1
bCL2Vx/rQlq9/xl+w2M5bOV8d17YZpya4jdtlMjaL40ly2FTXcLo52PxU50u
lZWrNa6FYDrnXcR0854K1nB1pWztlH22oAskBG5aQ9EcAqa3/XvaguRr934v
rVVldxUWm4jvjVnkqjtjxYueBdXGpfK9Ld+NxTQ3smx3fGdm7ZWtu9nCfXi2
4IssbZKUxhYIiWsOBkTr0cGjrydIAwonyjzcdEKWmVBlajJEhGvXPaZ1L9Rc
l5rz1Mx7Adcu++Yb3s5kKhfeVKNcXeOvfmTyusPDb2ndT2otKKQdZz1sC03p
PrLJiLMyo/il8vBzra0qkJziNe0XT3v8+Gs+7e8VpRQ9wmpYtZCWZBeDdCmt
U34gKmlhMq+sWEK7nG7iJK9ufC3z+3o8fnL8hPVobwhXqVTPY0IFG9l+2UKs
pSqrbW8LVvEky9heOKZX8abI+dRjdSam69LLGzFFpdM3zdPfHB8c09P/PH99
X7onB08O6eYrFLNfMfK3j799RMu+rzW8oUsVrMw1acONpVpt3ca1+3CM/CAr
r1P3Kyc+OnrCOp/XuddVbSsDj56VMDsiWZwjJsXLG4+qxybcJW/tiQtpPVSp
UVA3cODijkEfPX7EPrmE/M+lU4ePh/z7+GjI3qC/Hz8SL6SX4uVm9H5z+PW3
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
7cIwGULTF4LHyX8AqgioS0EtAAA=

-->

</rfc>
