<?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-mimi-room-policy-03" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="MIMI Room Policy">Room Policy for the More Instant Messaging Interoperability (MIMI) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-room-policy-03"/>
    <author fullname="Rohan Mahy">
      <organization>Rohan Mahy Consulting Services</organization>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="December" day="18"/>
    <area>Applications and Real-Time</area>
    <workgroup>More Instant Messaging Interoperability</workgroup>
    <keyword>room policy</keyword>
    <abstract>
      <?line 34?>

<t>This document describes a set of concrete room policies for the
More Instant Messaging Interoperability (MIMI) Working Group. It describes
several independent properties and policy attributes which can be combined
to model a wide range of chat and multimedia conference types.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-mimi.github.io/mimi-room-policy/draft-ietf-mimi-room-policy.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-mimi-room-policy/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        More Instant Messaging Interoperability Working Group mailing list (<eref target="mailto:mimi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mimi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mimi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-mimi/mimi-room-policy"/>.</t>
    </note>
  </front>
  <middle>
    <?line 41?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The MIMI architecture <xref target="I-D.ietf-mimi-arch"/> describes how each room
has an associated policy. Providers offer a "policy envelope"
of supported and allowed policy settings, from which the creator of a room
selects a specific room policy. The room policy might further allow
individual participants to make specific choices (for example, allowing
but not requiring read-message notifications), while constraining other
choices (for example, prohibiting self-deleting messages). Individual
users can examine the room policy to determine if it is consistent with
policies they accept either before or immediately on joining a room.
<xref section="4.4" sectionFormat="of" target="I-D.ietf-mimi-arch"/></t>
      <t>Making rooms interoperable across existing clients is challenging, as rooms
and clients can support different policies and capabilities across vendors
and providers. Our goal is to balance the policy and authorization goals of
the room with the policy and authorization goals of the end user, so we can support a broad range of vendors and providers.</t>
      <t>Each room is owned by one provider at a time. The owning provider controls the range of acceptable policies. The user responsible for the room can further choose among the acceptable policies. Users (regardless if on other providers) can either accept the policies of the room or not.</t>
      <t>However we want to make it as easy as possible for clients from other providers to comply with the room policy primitives without enumerating specific features or requiring all clients implementations to present an identical user experience. An important aspect of this is the system of configurable Role-based access control with granular capabilities per role (described in <xref target="roles"/>).
Each user in the participant list (defined in <xref target="I-D.ietf-mimi-protocol"/>) has
exactly one role. By virtue of a user's credential, a user might also be
<em>preauthorized</em> with a specific role as described in <xref target="preauth"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

<t><strong>Room ID</strong>:
An identifier which uniquely identifies a room.</t>
      <t><strong>User ID</strong>:
An internal identifier which uniquely identifies a user.</t>
      <t><strong>Nickname</strong>:
The identifier by which a user is referred inside a room. Depending on the context it may be a display name, handle, pseudonym, or temporary identifier. The nickname in one room need not correlate with the nickname for the same user in a different room.</t>
      <t><strong>Client ID</strong>:
An internal identifier which uniquely identifies one client/device instance of one user account.</t>
      <t><strong>Persistent vs. Temporary rooms</strong>:
A temporary room is no longer joinable once the last participant exits whereas a persistent room is not destroyed when the last participant exist. As MLS has no notion of a group with no members, a persistent room could consist of a sequence of distinct MLS groups, zero or one of which would exist at a time.</t>
      <section anchor="moderation-terms">
        <name>Moderation Terms</name>
        <t><strong>Knock</strong>:
To request entry into a room.</t>
        <t><strong>Ban</strong>:
To remove a user from a room such that the user is not allowed to re-enter the room (until and unless the ban has been removed). It is distinct from merely removing a user from a room.</t>
        <t><strong>Kick</strong>:
To temporarily remove a participant's clients from a room. The user is allowed to re-enter the room at any time.</t>
        <t><strong>Voice (noun)</strong>:
The privilege to send messages in a room.</t>
        <t><strong>Revoke Voice</strong>:
To remove the permission to send messages in a room.</t>
        <t><strong>Grant Voice</strong>:
To grant the permission to send messages in a room.</t>
      </section>
    </section>
    <section anchor="roles">
      <name>Role-Based Access Control</name>
      <t>Most instant messaging systems have a concept of room membership being managed by a set of moderators or administrators, or collectively managed by existing members.
In some cases, rooms are completely open to new joiners unless they have been banned in some way.
In an enterprise context, it is also common (but not required) for users from a particular domain, group, or workgroup to be pre-authorized to add themselves to various types of rooms.
All these variations of room access are managed in MIMI using roles, capabilities (<xref target="caps"/>), and preauthorization (<xref target="preauth"/>).</t>
      <t>The Role-Based Access Control component contains a list of all the roles in the room, and the capabilities associated with them.
It contains a <tt>role_index</tt>, which is used to refer to the role elsewhere. (Note that role indexes might not be contiguous.)
The <tt>role_index</tt> zero is reserved to refer to a participant that does not (yet) or no longer appears (or will no longer appear) in the participant list.</t>
      <t>The component also contains a <tt>role_name</tt> (a human-readable text string name for the
role), and a <tt>role_description</tt> (another string, which can have zero length).</t>
      <t>Each Role also can contain constraints on the minimum and maximum number of participants, and the minimum and maximum number of active participants.
If the minimum number is zero, there is no minimum number of participants for that particular role.
If there is no maximum number of participants for a particular role, that parameter is absent.</t>
      <ul empty="true">
        <li>
          <t>If the maximum number of active participants is zero, then no participants are allowed to have clients in the room's MLS group.</t>
        </li>
      </ul>
      <t>The <tt>authorized_role_changes</tt> field is used to provide fine-grained control about which transitions are allowed when adding and removing participants and when moving participants to new roles, including banning/unbanning, and promoting/demoting to or from roles with moderator or administrator privileges.
A more detailed discussion is in the description of the specific capabilities in the next section.</t>
      <ul empty="true">
        <li>
          <t>This design results in each participant only having a single role at a time, with a single list of capabilities and an explicit list of allowed role transitions. It makes the authorization process for a verifier consistent regardless of the complexity of the set of authorization rules.</t>
        </li>
      </ul>
      <t>Some examples are provided in <xref target="role-examples"/>.</t>
      <t>RoleData is the format of the <tt>data</tt> field inside the ComponentData struct for the Role-Based Access Control component in the <tt>app_data_dictionary</tt> GroupContext extension defined in <xref target="I-D.ietf-mls-extensions"/>.</t>
      <sourcecode type="tls-presentation"><![CDATA[
/* See MIMI Capability Types IANA registry */
uint16 CapabilityType;

struct {
   uint32 from_role_index;
   uint32 target_role_indexes<V>;
} SingleSourceRoleChangeTargets;

struct {
  uint32 role_index;
  opaque role_name<V>;
  opaque role_description<V>;
  CapabilityType role_capabilities<V>;
  uint32 minimum_participants_constraint;
  optional uint32 maximum_participants_constraint;
  uint32 minimum_active_participants_constraint;
  optional uint32 maximum_active_participants_constraint;
  SingleSourceRoleChangeTargets authorized_role_changes<V>;
} Role;

struct {
  Role roles<V>;
} RoleData;

RoleData roles_list;
RoleData RoleUpdate;
]]></sourcecode>
      <t>RoleUpdate (which has the same format as RoleData) is the format of the <tt>update</tt> field inside the AppDataUpdate struct in an AppDataUpdate Proposal for the Role-Based Access Control component.
If the contents of the <tt>update</tt> field are valid and if the proposer is authorized to generate such an update, the value of the <tt>update</tt> field completely replaces the value of the <tt>data</tt> field.</t>
      <ul empty="true">
        <li>
          <t>Note that in the MIMI environment, changing the definitions of roles is anticipated to be very rare over the lifetime of a room (for example changing a room which has grown dramatically from cooperatively managed by all participants to explicitly moderated or administered).</t>
        </li>
      </ul>
      <t>Changing Role definitions is sufficiently disruptive, that an update to this component is not valid if it appear in the same commit as any Participant List change.</t>
    </section>
    <section anchor="preauth">
      <name>Preauthorized Users</name>
      <t>Preauthorized users are MIMI users and external senders that have authorization to adopt a role in a room by virtue of certain credential claims or properties, as opposed to being individually enumerated in the participant list.
For example, a room for employee benefits might be available to join with the regular participant role to all full-time employees with a residence in a specific country; while anyone working in the human resources department might be able to join the same room as a moderator.
This data structure is consulted in two situations: for external joins (external commits) and external proposals when the requester does not already appear in the participant list; and separately when an existing participant explicitly tries to change its <em>own</em> role.</t>
      <ul empty="true">
        <li>
          <t>Only consulting Preauthorized users in these cases prevents several attacks. For example, it prevents an explicitly banned user from rejoining a group based on a preauthorization.</t>
        </li>
      </ul>
      <t>PreAuthData is the format of the <tt>data</tt> field inside the ComponentData struct for the Preauthorized Participants component in the <tt>application_data</tt> GroupContext extension.</t>
      <t>The individual <tt>PreAuthRoleEntry</tt> rules in <tt>PreAuthData</tt> are consulted one at a time.
A <tt>PreAuthRoleEntry</tt> matches for a requester when every <tt>Claim.claim_id</tt> has a corresponding claim in the requester's MLS Credential which exactly matches the corresponding <tt>claim_value</tt>.
When the rules in a Preauthorized users struct match multiple roles, the requesting client receives the first role which matches its claims.</t>
      <ul empty="true">
        <li>
          <t><strong>TODO</strong>: refactor Claims</t>
        </li>
      </ul>
      <sourcecode type="tls-presentation"><![CDATA[
struct {
  /* MLS Credential Type of the "claim"  */
  CredentialType credential_type;
  /* the binary representation of an X.509 OID, a JWT claim name  */
  /* string, or the CBOR map claim key in a CWT (an int or tstr)  */
  opaque id<V>;
} ClaimId;

struct {
  ClaimId claim_id;
  opaque claim_value<V>;
} Claim;

struct {
  /* when all claims in the claimset are satisfied, the claimset */
  */ is satisfied */
  Claim claimset<V>;
  Role target_role;
} PreAuthRoleEntry;

struct {
  PreAuthRoleEntry preauthorized_entries<V>;
} PreAuthData;

PreAuthData preauth_list;
PreAuthData PreAuthUpdate;
]]></sourcecode>
      <!--
struct {
  select (Credential.credential_type) {
    case basic:
        struct {}; /* only identity */
    case x509:
        /* ex: subjectAltName (2.5.29.17) = hex 06 03 55 1d 1e */
        opaque oid<V>;
        /* for sequence or set types, the specific item (1-based) */
        /* in the collection. zero means any item in a collection */
        uint8 ordinal;
    case jwt:
        opaque json_path<V>;
    case cwt:
        CborKeyNameOrArrayIndex cbor_path<V>;
  };
} Claim;

struct {
    /* a CBOR CDE encoded integer, tstr, bstr, or tagged version of */
    /* any of those map key types. Ex: -1 = 0x20, "hi" = 0x626869,  */
    /* 1(3600) = 0xC1190E10 */
    opaque cbor_encoded_claim<V>;
    optional uint array_index;
} CborKeyNameOrArrayIndex;
-->

<t>PreAuthUpdate (which has the same format as PreAuthData) is the format of the <tt>update</tt> field inside the AppDataUpdate struct in an AppDataUpdate Proposal for the Preauthorized Participants component.
If the contents of the <tt>update</tt> field are valid and if the proposer is authorized to generate such an update, the value of the <tt>update</tt> field completely replaces the value of the <tt>data</tt> field.</t>
      <ul empty="true">
        <li>
          <t>As with the definition of roles, in MIMI it is not expected that the definition of Preauthorized users would change frequently. Instead the claims in the underlying credentials would be modified without modifying the preauthorization policy.</t>
        </li>
      </ul>
      <t>Changing Preauthorized user definitions is sufficiently disruptive, that an update to this component is not valid if it appears in the same commit as any Participant List change, except for user removals.</t>
      <t>Because the Preauthorized users component usually authorizes non-members, it is also a natural choice for providing concrete authorization for policy enforcing systems incorporated into or which run in coordination with the MIMI Hub provider or specific MLS Distribution Services. For example, a preauthorized role could allow the Hub to remove participants and to ban them, but not to add any users or devices. This unifies the authorization model for members and non-members.</t>
    </section>
    <section anchor="base-room-policy-component-syntax">
      <name>Base Room policy component syntax</name>
      <t>The following format is an MLS component which expresses top-level policy constraints, including global rules related to how membership is interpreted.
The rest of the rules about membership (the bulk) are expressed using roles <xref target="roles"/>, capabilities <xref target="caps"/>, and preauthorization <xref target="preauth"/>.</t>
      <t>Rooms with <tt>fixed_membership</tt> set to true (fixed-membership rooms) have the list of participants specified when they are created.
While clients of existing participants can be added, other users cannot be added, so none of its non-zero, non-banned roles can contain the <tt>canAddParticipant</tt> capability.
Ordinary users cannot leave or be removed, however a user can remove all its clients from the associated MLS group.
The most common case of a fixed-membership room is a 1:1 conversation.
This room membership style is used to implement Direct Message (DM) and Group DM features.
Only a single fixed-membership room can exist for any unique set of participants.</t>
      <t>In rooms with <tt>parent_dependent</tt> set to true (a parent-dependent room), the list of participants of the room <bcp14>MUST</bcp14> be a strict subset of the participants of the parent room.
If a user leaves or is removed from the parent room, that user is automatically removed from any parent-dependent rooms of that parent.
A parent-dependent room is always hosted on the same Hub as the parent room.</t>
      <t>If <tt>parent-dependent</tt> is true, the <tt>parent_room</tt> <bcp14>MUST</bcp14> be set with the room ID of the parent. Otherwise the field is zero-length.</t>
      <ul empty="true">
        <li>
          <t>Note: A room can be both <tt>fixed_membership</tt> and <tt>parent_dependent</tt>, for example, for room used for a multi-media call of clients in a Group DM.</t>
        </li>
      </ul>
      <t>If <tt>multi_device</tt> is true (the default), the MLS group may contain multiple clients per user.
If false only a single client can be an MLS member at one time.
<!--
Multi-device vs. Single-device:
A multi-device room can have multiple simultaneous clients of the same user as participants in the room. A single-device room can have a maximum of one client per user in the room at any moment.
-->
      </t>
      <t>When <tt>max_clients</tt> has a value, the room's associated MLS group <bcp14>MUST NOT</bcp14> have more clients than the provided value.
Likewise when <tt>max_users</tt> has a value, the room <bcp14>MUST NOT</bcp14> have more non-banned entries in the participant list than that value.</t>
      <artwork><![CDATA[
enum {
  false(0),
  true(1)
} bool;

struct {
    bool fixed_membership;
    bool parent_dependant;
    Uri parent_room<V>;
    bool multi_device;
    optional uint32 max_clients;
    optional uint32 max_users;
    bool pseudonyms_allowed;
    bool persistent_room;
    bool discoverable;
    Component policy_component_ids<V>;
} BaseRoomPolicy;

BaseRoomPolicy BaseRoomData;
BaseRoomPolicy BaseRoomUpdate;
]]></artwork>
      <t>If <tt>pseudonyms_allowed</tt> is true, clients in the MLS group are free to use pseudonymous identifiers in their MLS credentials.
Otherwise the policy of the room is that "real" long-term identifiers are required in MLS credentials in the room's corresponding MLS group.</t>
      <t>If <tt>persistent_room</tt> is false, the room will be automatically inaccsessible when the corresponding MLS group is destroyed (when there are no clients in the group).
If <tt>persistent_room</tt> is true, the room policy will remain and a client whose user has appropriate authorization can create a new MLS group for the same room.</t>
      <t>If <tt>discoverable</tt> is true, the room is searchable in some way.
Presumably this means that if <tt>discoverable</tt> is false, the only way to join the room in a client user interface is to be added by an administrator or to use a joining link.</t>
      <t>Finally, the Component IDs of the other policy components that are relevant to this room are listed in the <tt>policy_component_ids</tt> vector, including the <tt>roles_list</tt> (from <xref target="roles"/>) and <tt>preauth_list</tt> components (from <xref target="preauth"/>), if present.
This extensibility mechanism allows for future addition or replacement of new room policies.</t>
    </section>
    <section anchor="other-mimi-policy-components">
      <name>Other MIMI policy components</name>
      <section anchor="status-notification">
        <name>Status Notifications component</name>
        <t>Delivery and Read notifications are a very popular feature of instant messaging systems, but also can leak private information such as the online status of participants.
Such status notifications can also consume a large amount of resources, especially in large rooms.</t>
        <artwork><![CDATA[
enum {
  optional(0),
  required(1),
  forbidden(2)
} Optionality;

struct {
  Optionality delivery_notifications;
  Optionality read_receipts;
} StatusNotificationPolicy;

StatusNotificationPolicy StatusNotificationPolicyData;
StatusNotificationPolicy StatusNotificationPolicyUpdate;
]]></artwork>
        <t>The <tt>delivery_notifications</tt> value can be set to "forbidden", "optional", or "required".
If the value is set to "optional", the client uses its local configuration to determine if it should send delivery notifications in the room.</t>
        <t>The <tt>read_receipts</tt> value can be set to "forbidden", "optional", or "required".
If the value is set to "optional", the client uses its local configuration to determine if it should send read receipts in the room.</t>
        <t>The format for delivery notifications and read receipts is described in <xref target="I-D.mahy-mimi-message-status"/>.</t>
      </section>
      <section anchor="join-link">
        <name>Join Link policies component</name>
        <t>Inside the JoinLinkPolicy are several fields that describe the behavior of new join links.</t>
        <t>If the <tt>on_request</tt> field is true, a maximum of one joining link will be persisted in the room policy; the client will need to fetch a joining link out-of-band or generate a valid one for itself before a new one can be generated.
If present, the URI in <tt>link_requests</tt> can be used by the client to request an invite code.</t>
        <t>If the <tt>on_request</tt> field is false, multiple joining links can be generated and persisted.
If links can be generated for multiple users, <tt>multiuser</tt> is true.
The <tt>expiration</tt> field represents the duration in seconds that a new link can be valid after creation.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  bool on_request;
  Uri join_link;
  bool multiuser;
  uint32 expiration;
} JoinLinkPolicy;

JoinLinkPolicy JoinLinkPolicyData;
JoinLinkPolicy JoinLinkPolicyUpdate;
]]></sourcecode>
        <t>The active join links in a room are persisted separately in a JoinLinks Component.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque join_link;
} JoinLink;

JoinLink JoinLinksData<V>;

struct {
  uint32 removedIndices<V>;
  JoinLink added_links<V>;
} JoinLinksUpdate;
]]></sourcecode>
      </section>
      <section anchor="link-preview">
        <name>Link Preview policy component</name>
        <t>Link preview policy is concerned with the safe rendering of explicit or implicit hyperlinks in the text of an instant message.</t>
        <t>The <tt>autodetect_hyperlinks_in_text</tt> setting indicates if a message composer is expected to detect hyperlinks from text which resembles links (ex: <tt>http://example.com</tt>).
The value of <tt>autodetect_hyperlinks_in_text</tt> <bcp14>MUST NOT</bcp14> be <tt>mandatory</tt>.
The <tt>send_link_previews</tt> setting indicates if the sender of a message including a link preview (a desirable feature, but a malicious sender could generate a preview inconsistent with the actual link content) is mandatory, optional, or forbidden.</t>
        <t>The <tt>automatic_link_previews</tt> setting indicates if the receiver of a message generating link previews (a desirable feature, but a potential privacy concern) is mandatory, optional, or forbidden.
The <tt>link_preview_proxy_use</tt> setting indicates if using a specialized link preview proxy is mandatory, optional, or forbidden when link previews are generated.</t>
        <t>The <tt>link_preview_proxy</tt> setting <bcp14>MUST</bcp14> include the URI of a link preview proxy if <tt>link_preview_proxy_use</tt> is <tt>mandatory</tt> or <tt>optional</tt>.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  Optionality autodetect_hyperlinks_in_text;
  Optionality send_link_previews;
  Optionality automatic_link_previews;
  Optionality link_preview_proxy_use;
  select (link_preview_proxy_use) {
    case mandatory:
      Uri link_preview_proxy<V>;
    case optional:
      Uri link_preview_proxy<V>;
    case forbidden:
      struct {};
  }
} LinkPreviewPolicy;

LinkPreviewPolicy LinkPreviewPolicyData;
LinkPreviewPolicy LinkPreviewPolicyUpdate;
]]></sourcecode>
      </section>
      <section anchor="assets">
        <name>Asset policies component</name>
        <t>Assets refer to attached files, images, audio files, and video files.</t>
        <t>The <tt>asset_upload_location</tt> could be <tt>unspecified</tt>, indicating any location; <tt>localProvider</tt>, indicating that each client uploads assets to its local provider; or <tt>hub</tt>, indicating that all clients upload assets to the hub.
Using <tt>localProvider</tt> is <bcp14>RECOMMENDED</bcp14>.</t>
        <t>The <tt>asset_upload_domains</tt> is a list of <tt>asset_upload_destinations</tt> per <tt>provider</tt> domain name.
If the <tt>asset_upload_location</tt> is <tt>hub</tt>, only one <tt>provider</tt> matching the hub domain is present in <tt>asset_upload_domains</tt>.</t>
        <t>Unless <tt>asset_upload_location</tt> is <tt>unspecified</tt>, the clients verify that assets in the host part of the <tt>url</tt> of any MIMI content <xref target="I-D.ietf-mimi-content"/> ExternalPart corresponds to an entry in <tt>asset_upload_domains</tt>.
If the <tt>asset_upload_location</tt> is <tt>localProvider</tt> the <tt>asset_upload_domains</tt> list is from the <tt>provider</tt> domain name that exactly matches the sender URI domain name.</t>
        <t><tt>download_privacy</tt> describes the mechanisms acceptable for downloading assets.
The <tt>allowed_download_types</tt> and <tt>forbidden_download_types</tt> specify the download mechanisms which are are allowed and forbidden, respectively.
The <tt>default_download_type</tt> is the default or suggested download mechanism.
<tt>direct</tt> refers to client direct download as described in <xref section="5.10.1" sectionFormat="of" target="I-D.ietf-mimi-protocol"/>.
<tt>hubProxy</tt> refers to client download through a proxy on the hub as described in <xref section="5.10.2" sectionFormat="of" target="I-D.ietf-mimi-protocol"/>.
<tt>ohttp</tt> refers to client download through Oblivious HTTP <xref target="RFC9458"/> through the hub as described in <xref section="5.10.3" sectionFormat="of" target="I-D.ietf-mimi-protocol"/>.</t>
        <sourcecode type="tls"><![CDATA[
enum {
  unspecified(0),
  localProvider(1),
  hub(2),
  (255)
} AssetUploadLocation;

struct {
  opaque domain<V>;
} DomainName;

struct {
  DomainName provider;
  DomainName asset_upload_destinations<V>;
} ProviderAssetUploadDomains;

enum {
  direct(0),
  hubProxy(1),
  ohttp(2),
  (255)
} DownloadPrivacyType;

struct {
  DownloadPrivacyType allowed_download_types<V>;
  DownloadPrivacyType forbidden_download_types<V>;
  DownloadPrivacyType default_download_type;
} DownloadPrivacy;

struct {
  AssetUploadLocation asset_upload_location;
  ProviderAssetUploadDomains upload_domains<V>;
  DownloadPrivacy download_privacy;
  uint64 max_image;
  uint64 max_audio;
  uint64 max_video;
  uint64 max_attachment;
  MediaType forbidden_media_types<V>;
  optional<MediaType> permitted_media_types<V>;
} AssetPolicy;

AssetPolicy AssetPolicyData;
AssetPolicy AssetPolicyUpdate;
]]></sourcecode>
        <t>The <tt>max_image</tt>, <tt>max_audio</tt>, <tt>max_video</tt>, and <tt>max_attachment</tt> fields indication the maximum size in bytes of the corresponding assets that will be accepted.
These amounts could be further limited at the client according to local policy or at the upload location based on various forms of authorization and quotas.</t>
        <t>The following paragraph refers to fields that use the <tt>MediaType</tt> struct defined in <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-mls-extensions"/>.
<tt>forbidden_media_types</tt> is a list of media types (type and subtype) that are not allowed at all in the room.
If present, <tt>permitted_media_types</tt> is a list of media types that are permitted.
When it is present, media types <bcp14>MUST</bcp14> be one of the entries in the <tt>permitted_media_types</tt> list, and <bcp14>MUST NOT</bcp14> be in the <tt>forbidden_media_types</tt> list.
If a media type with no parameters (for example, <tt>text/markdown</tt>) is present in one of these lists, that entry matches all media types of that type and subtype that contain additional parameters.</t>
      </section>
      <section anchor="logging">
        <name>Logging policy component</name>
        <t>Some messaging systems (for example in the health care or financial services sectors) often require mandatory logging of calls and messages.
The goal of these policies is to make detection of such policies automatic, to allow clients to make appropriate local policy decisions when such policies exist.</t>
        <t>Inside the LoggingPolicy, the <tt>logging</tt> field can be forbidden, optional, or required.
If <tt>logging</tt> is forbidden then the other fields are empty.
If logging is required, the list of <tt>logging_clients</tt> needs to contain at least one logging URI.
Each provider should have no more than one logging client at a time in a room.
The <tt>machine_readable_policy</tt> and <tt>human_readable_policy</tt> fields optionally contain pointers to the owning provider's machine readable and human readable logging policies, respectively.
If logging is optional and there is at least one <tt>logging_client</tt> then logging is active for the room.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  Optionality logging;
  select (logging) {
    case mandatory:
      Uri logging_clients<V>;
      Uri machine_readable_policy;
      Uri human_readable_policy;
    case optional:
      Uri logging_clients<V>;
      Uri machine_readable_policy;
      Uri human_readable_policy;
    case forbidden:
      struct {};
  }
} LoggingPolicy;

LoggingPolicy LoggingPolicyData;
LoggingPolicy LoggingPolicyUpdate;
]]></sourcecode>
      </section>
      <section anchor="history">
        <name>Chat history policy component</name>
        <t>One of the most requested features of instant messaging systems is that new joiners can view some or all of the message history before joining.
While useful, it has serious implications to the privacy of existing members, and substantially weakens forward secrecy (FS) (See <xref section="8.2.2" sectionFormat="of" target="RFC9750"/>).</t>
        <t>Inside the HistoryPolicy, if <tt>history_sharing</tt> is forbidden, this means that clients (including bots) are expected to not to share chat history with new joiners, in which case <tt>roles_that_can_share</tt> is empty, <tt>automatically_share</tt> is false, and <tt>max_time_period</tt> is zero.
Otherwise <tt>roles_that_can_share</tt> is a list of roles that are authorized to share history (for example, only admins and owners can share). The role index zero (non-participant) and one (banned) cannot be used in the <tt>who_can_share</tt> list, nor can any role where <tt>max_active_participants</tt> is zero.
If <tt>automatically_share</tt> is true, clients can share history with new joiners without user initiation.
The history that is shared is limited to <tt>max_time_period</tt> seconds worth of history.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  Optionality history_sharing;
  select (history_sharing) {
    case mandatory:
      uint32 roles_that_can_share<V>;
      bool automatically_share;
      uint32 max_time_period;
    case optional:
      uint32 roles_that_can_share<V>;
      bool automatically_share;
      uint32 max_time_period;
    case forbidden:
      struct {};
  }
} HistoryPolicy;

HistoryPolicy HistoryPolicyData;
HistoryPolicy HistoryPolicyUpdate;
]]></sourcecode>
      </section>
      <section anchor="bots">
        <name>Chat bot policy component</name>
        <t>There are several types of chat bot in instant messaging systems, some of which only interact with the local client.</t>
        <t>Inside the BotPolicy there is a list of <tt>allowed_bots</tt>, each of which has several fields.
The <tt>name</tt>, <tt>description</tt>, and <tt>homepage</tt> are merely descriptive.</t>
        <t>If <tt>local_client_bot</tt> is true, the bot would not act as a participant; it would have access to the contents of the room only with another client operated by a (presumably human) user.</t>
        <t>The <tt>bot_role_index</tt> indicates the role index in which the bot operates; this controls the capabilities of the bot.
A <tt>bot_role_index</tt> of zero indicates that the bot is not a active participant in the room.
A bot with <tt>local_client_bot</tt> set to true has a <tt>bot_role_index</tt> of 0.</t>
        <t>If <tt>can_target_message_in_group</tt> is true it indicates that the chat bot can send an MLS targeted message (see Section 2.2 of <xref target="I-D.ietf-mls-extensions"/>) or use a different conversation or out-of-band channel to send a message to specific individual users in the room.</t>
        <t>If <tt>per_user_content</tt> is true, the chat bot is allowed to send messages with distinct content to each member.
(For example a poker bot could deal a different hand to each user in a chat).</t>
        <t>Users could set policies to reject or leave groups with bots rights that are inconsistent with the user's privacy goals.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque name<V>;
  opaque description<V>;
  Uri homepage;
  bool local_client_bot;
  uint32 bot_role_index;
  bool can_target_message_in_group;
  bool per_user_content;
} Bot;

struct {
  Bot allowed_bots<V>;
} BotPolicy;

BotPolicy BotPolicyData;
BotPolicy BotPolicyUpdate;
]]></sourcecode>
      </section>
      <section anchor="message-expiration">
        <name>Message expiration policy component</name>
        <t>Many instant messaging systems have an automatically expiring messages feature.</t>
        <t>If expiring messages are required, optional, or forbidden is controlled by the <tt>expiring_messages</tt> field.</t>
        <t>When <tt>expiring_messages</tt> are required or optional, the <tt>min_expiration_duration</tt> indicates the shortest acceptable expiration duration in seconds.
The <tt>max_expiration_duration</tt> indicates the longest acceptable duration in seconds.
The <tt>default_expiration_duration</tt> optionally indicates a preferred duration in seconds.</t>
        <t>When <tt>expiring_messages</tt> is forbidden, both the <tt>min_expiration_duration</tt> and the <tt>max_expiration_duration</tt> are set to zero, and the <tt>default_expiration_duration</tt> is not present.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  Optionality expiring_messages;
  select (expiring_messages) {
    case mandatory:
      uint32 min_expiration_duration;
      uint32 max_expiration_duration;
      optional uint32 default_expiration_duration;
    case optional:
      uint32 min_expiration_duration;
      uint32 max_expiration_duration;
      optional uint32 default_expiration_duration;
    case forbidden:
      struct {};
  }
} MessageExpiration;

MessageExpiration MessageExpirationData;
MessageExpiration MessageExpirationUpdate;
]]></sourcecode>
      </section>
    </section>
    <section anchor="operational">
      <name>Operational policy component</name>
      <t>Section 7 of the <xref target="RFC9750"/> defines a set of operational
policy considerations that influence interoperability of MLS clients. MIMI
explicitly address a handful of the issues in the document by taking a position on ordering (Proposals referenced in a Commit need to be received before the Commit; the Commit entering a new epoch needs to be received before any other messages in that epoch), privacy of handshake messages (handshakes can be a PublicMessage or SemiPrivateMessage), and GroupInfo storage (committers need to provide a valid GroupInfo to the Hub). The rest of these issues are described here. Just because a topic is listed does not mean that a room needs to take a position; nor different rooms on a Hub need to have different policies for these items.</t>
      <section anchor="some-mls-related-policy-that-could-be-tied-to-a-room">
        <name>Some MLS-related policy that could be tied to a room</name>
        <ul spacing="normal">
          <li>
            <t>any mandatory or forbidden MLS extensions.</t>
          </li>
          <li>
            <t>which proposals are valid to have in a commit, including but not limited to:
            </t>
            <ul spacing="normal">
              <li>
                <t>when, and under what circumstances, a reinitialization proposal is allowed.</t>
              </li>
              <li>
                <t>when proposals from external senders are allowed and how to authorize those proposals.</t>
              </li>
              <li>
                <t>when external joiners are allowed and how to authorize those external commits.</t>
              </li>
              <li>
                <t>which other proposal types are allowed.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>when members should commit pending proposals in a group.</t>
          </li>
          <li>
            <t>when two credentials represent the same client.</t>
          </li>
          <li>
            <t>how long to allow a member to stay in a group without updating its leaf keys before removing them.</t>
          </li>
          <li>
            <t>When and how to pad messages.</t>
          </li>
          <li>
            <t>When to send a reinitialization proposal.</t>
          </li>
          <li>
            <t>How often clients should update their leaf keys.</t>
          </li>
          <li>
            <t>Whether to prefer sending full commits or partial/empty commits.</t>
          </li>
          <li>
            <t>Whether there should be a required_capabilities extension in groups.</t>
          </li>
          <li>
            <t>minimum and maximum lifetime of KeyPackages</t>
          </li>
          <li>
            <t>if last resort KeyPackages are allowed</t>
          </li>
          <li>
            <t>how long to store resumption PSK (how much time and how many epochs)</t>
          </li>
          <li>
            <t>minimum and maximum number past epochs to keep</t>
          </li>
          <li>
            <t>how long to keep unused nonce and key pairs for a sender</t>
          </li>
          <li>
            <t>maximum number of unused key pairs to keep</t>
          </li>
          <li>
            <t>maximum number of steps that clients will move a secret tree ratchet forward in response to a single message before rejecting it</t>
          </li>
          <li>
            <t>tolerance to out of order app messages</t>
          </li>
          <li>
            <t>tolerance to out of order handshake messages</t>
          </li>
          <li>
            <t>handshakes may be which of PublicMessage, PrivateMessage, or SemiPrivateMessage.</t>
          </li>
          <li>
            <t>if external joiners are allowed</t>
          </li>
          <li>
            <t>if external proposals are allowed
            </t>
            <ul spacing="normal">
              <li>
                <t>if so, who can submit</t>
              </li>
              <li>
                <t>which member(s) are responsible for submitting pending proposals</t>
              </li>
            </ul>
          </li>
          <li>
            <t>how a joiner gets access to the ratchet_tree</t>
          </li>
        </ul>
        <t>The structure below describes provides a way to describe many of these parameters.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  ProtocolVersion versions<V>;
  CipherSuite cipher_suites<V>;
  ExtensionType extensions<V>;
  ProposalType proposals<V>;
  CredentialType credentials<V>;
  WireFormats wire_formats<V>;
  ComponentID component_ids<V>;
  ComponentID safe_aad_types<V>;
  MediaType media_types<V>;
  ContentType content_types<V>;
} ExtendedCapabilities;

enum {
  unspecified(0),
  immediate_commit(1),
  random_delay(2),
  (255)
} PendingProposalStrategy;

struct {
  PendingProposalStrategy pending_proposal_strategy;
  select (pending_proposal_strategy) {
    case unspecified:
      struct {};
    case immediate_commit:
      struct {};
    case random_delay:
      uint64 minimum_delay_ms;
      uint64 maximum_delay_ms;
    case extension:
      ComponentID id_of_strategy_params;
  }
} PendingProposalPolicy;

struct {
  uint64 minimum_time;
  uint64 default_time;
  uint64 maximum_time;
} MinDefaultMaxTime;

struct {
  uint8  epoch_tolerance;
  uint16 pad_to_size;
  uint32 max_generations_skipahead;
} AppMessagePolicy;

struct {
  ExtendedCapabilities mandatory_capabilities;
  ExtendedCapabilities default_capabilities;
  ExtendedCapabilities forbidden_capabilities;
  WireFormats handshake_formats<V>;
  bool external_proposal_allowed;
  bool external_commit_allowed;
  PendingProposalPolicy pending_proposal_policy;
  MinDefaultMaxTime LeafNode_update_time;
  AppMessagePolicy app_message_policy;
  unit64 max_kp_lifetime;
  uint64 max_credential_lifetime;
  uint64 resumption_psk_lifetime;
  MinDefaultMaxTime sender_nonce_keypair_lifetime;
  uint32 max_keypairs;
  MinDefaultMaxTime buffer_incoming_message_time;
  uint32 max_buffered_messages;
} OperationalParameters;

OperationalParameters OperationalParametersData;
OperationalParameters OperationalParametersUpdate;
]]></sourcecode>
      </section>
      <section anchor="not-relevant-to-mimi-between-client-and-its-provider">
        <name>Not relevant to MIMI (between client and its provider)</name>
        <ul spacing="normal">
          <li>
            <t>how many KPs to keep active</t>
          </li>
          <li>
            <t>how group IDs are constructed</t>
          </li>
        </ul>
      </section>
      <section anchor="areas-for-future-works">
        <name>Areas for future works</name>
        <t>How to protect and share the GroupInfo objects needed for external joins.</t>
        <t>If an application wishes to detect and possibly discipline members that send malformed commits with the intention of corrupting a group's state, there must be a method for reporting and validating malformed commits.</t>
        <t>MLS requires the following parameters to be defined, which must be the same for two implementations to interoperate:</t>
        <t>Application-level identifiers of public key material (specifically the application_id extension as defined in <xref section="5.3.3" sectionFormat="of" target="RFC9420"/>).</t>
      </section>
    </section>
    <section anchor="caps">
      <name>Role Capabilities</name>
      <t>As described in <xref target="roles"/>, each role has a list of capabilities, which in rare cases could be empty.
When we say that the holder of a capability can take some action, we mean that whatever entity is taking the action (a participant, a potential future participant, or an external party) has a specific entry in the Participant List struct and a corresponding role--or is preauthorized to take action with a specific role via the Preauthorized Users struct--and that the <tt>role_capabilities</tt> list contains the relevant capability.</t>
      <t>Unless otherwise specified, capabilities apply both to sending a set of consistent MLS proposals that could be committed by any member of the corresponding MLS group, and to sending an MLS commit containing a set of consistent MLS proposals.</t>
      <section anchor="membership-capabilities">
        <name>Membership Capabilities</name>
        <t>The membership capabilities below allow authorized holders to update the Participant list, or change the active participants (by removing and adding MLS clients corresponding to those participants), or both.</t>
        <section anchor="adding">
          <name>Adding</name>
          <ul spacing="normal">
            <li>
              <t><tt>canAddParticipant</tt> - the holder of this capability can add another user, that is not already in the participant list, to the participant list.
(This capability does not apply to the holder adding itself.)
The <tt>authorized_role_changes</tt> list in the holder's role is consulted to authorize the added user's target role.
The <tt>authorized_role_changes</tt> list <bcp14>MUST</bcp14> have an entry where the <tt>authorized_role_changes.from_role_index</tt> equals zero, and that entry's <tt>target_role_indexes</tt> list includes the target role.
The proposed action is only authorized if the action respects both the <tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) for the added user's target role.
When the participant list addition for the target role is authorized, the holder is also authorized to add any MLS clients matching the added user to the room's MLS group .</t>
            </li>
            <li>
              <t><tt>canAddOwnClient</tt> - a holder of this capability that is in the participant list, can add its own client (via an external commit or external proposal); and can add other clients that share the same user identity (via Add proposals) if the holder's client is already a member of the corresponding MLS group.</t>
            </li>
            <li>
              <t><tt>canOpenJoin</tt> - when this capability appears on role zero, any user who is not already in the participant list can add itself externally, with certain conditions.
The <tt>authorized_role_changes</tt> list <bcp14>MUST</bcp14> have an entry with <tt>from_role_index</tt> equal to zero.
The holder can add itself with any non-zero <tt>target_role_indexes</tt> from that entry, if the action respects both the <tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) for the added user's target role.
<tt>canOpenJoin</tt> <bcp14>MUST NOT</bcp14> appear in any non-zero role.</t>
            </li>
            <li>
              <t><tt>canJoinIfPreauthorized</tt> - when this capability appears on a non-zero role, a client that is not already in the participant list can externally join as that target role if authorized for that role as the first matching role in the Preauthorized users mechanism.
The <tt>authorized_role_changes</tt> list is not consulted for this capability.
The action <bcp14>MUST</bcp14> respect both the <tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) for the added user's target role.</t>
            </li>
            <li>
              <t><tt>canUseJoinCode</tt> - the holder of this capability can externally join a room using a join code for that room, provided the join code is valid, the join code refers to a valid target role, and both the <tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) constraints are respected.</t>
            </li>
          </ul>
        </section>
        <section anchor="removing">
          <name>Removing</name>
          <ul spacing="normal">
            <li>
              <t><tt>canRemoveParticipant</tt> - the holder of this capability can propose a) the removal of another user (excluding itself) from the participant list, and b) removal of all of that user's clients, as a single action.
There <bcp14>MUST NOT</bcp14> be any clients of the removed user in the MLS group after the corresponding commit.
A proposer holding this capability consults its role's <tt>authorized_role_changes</tt> entries for an entry where <tt>from_role_index</tt> matches the target user's current role; if the <tt>target_role_indexes</tt> for that entry contains zero, and the <tt>minimum_participants_constraint</tt> and <tt>minimum_active_participants_constraint</tt> are satisfied, the proposal is authorized.</t>
            </li>
            <li>
              <t><tt>canRemoveOwnClient</tt> - the holder of this capability can propose to remove its own client using an MLS Remove or SelfRemove proposal without changing the Participant list.
Due to restrictions in MLS which insure the consistency of the group, this action cannot be committed by the leaving user.
If the <tt>minimum_active_participants_constraint</tt> is satisfied, the proposal is authorized.</t>
            </li>
            <li>
              <t><tt>canRemoveSelf</tt> - the holder of this capability can propose to remove itself from (i.e. leave) the participant list; it <bcp14>MUST</bcp14> simultaneously propose to remove all of its remaining clients from the corresponding MLS group.
Due to restrictions in MLS which insure the consistency of the group, this action cannot be committed by the leaving user.
A proposer holding this capability consults its role's <tt>authorized_role_changes</tt> entries for an entry where <tt>from_role_index</tt> matches its current role; if the <tt>target_role_indexes</tt> for that entry contains zero, and the <tt>minimum_participants_constraint</tt> and <tt>minimum_active_participants_constraint</tt> are satisfied, the proposal is authorized.</t>
            </li>
            <li>
              <t><tt>canKick</tt> - the holder of this capability can propose removal of another participant's clients, without changing the Participant List.
If the <tt>minimum_active_participants_constraint</tt> is satisfied, the proposal is authorized.</t>
            </li>
          </ul>
        </section>
        <section anchor="role-changes">
          <name>Role Changes</name>
          <ul spacing="normal">
            <li>
              <t><tt>canChangeUserRole</tt> - the holder of this capability is authorized to change the role of another participant (but not itself), according to the holder's <tt>authorized_role_changes</tt> list, from a role represented by an entry where the target's current role matches <tt>from_role_index</tt> to any of the non-zero <tt>target_role_indexes</tt> in the same element of <tt>authorized_role_changes</tt>.
The <tt>minimum_participants_constraint</tt> and <tt>minimum_active_participants_constraint</tt> for the target user's current role, and the <tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) for the target user's target role must also be satisfied.</t>
            </li>
            <li>
              <t><tt>canChangeOwnRole</tt> - the holder of this capability is authorized to change its own role to the first non-zero role it matches in the Preauthorized users component (see <xref target="preauth"/>).
The <tt>authorized_role_changes</tt> list is <em>not</em> consulted.
The <tt>minimum_participants_constraint</tt> and <tt>minimum_active_participants_constraint</tt> for the holder's original role, and the
<tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) for the holder's target role must also be satisfied.</t>
            </li>
            <li>
              <t><tt>canBan</tt> - the holder of this capability can propose to "ban" another user.
Specifically, a successful ban changes the target user's role to a special "banned" role (if it exists), and removes all the banned user's clients.
The "banned" role always has <tt>role_index</tt> = 1 and <tt>role_name</tt> = "banned" (without quotes).  </t>
              <ul empty="true">
                <li>
                  <t>A "banned" role does not have to exist in a room, but to use the <tt>canBan</tt> and <tt>canUnban</tt> capabilities, the role needs to exist exactly as described above.
While holding <tt>canChangeUserRole</tt> and <tt>canKick</tt> capabilities would allow the same action, it could potentially allow the holder other actions which might be undesirable in some contexts, such as kicking clients without banning.</t>
                </li>
              </ul>
              <t>
A proposer holding this capability consults its role's <tt>authorized_role_changes</tt> entries for an entry where <tt>from_role_index</tt> matches the target user's current role; if the <tt>target_role_indexes</tt> for that entry contains the <tt>role_index</tt> 1; that <tt>role_name</tt> = "banned" for the role with role_index = 1, and the <tt>minimum_participants_constraint</tt> and <tt>minimum_active_participants_constraint</tt> are satisfied, the proposal is authorized.</t>
            </li>
            <li>
              <t><tt>canUnban</tt> - the holder of this capability can propose to "unban" another user.
Specifically, a successful unban changes the target user's role from <tt>role_index</tt> = 1 to another non-zero <tt>role_index</tt> allowed by the holder's <tt>authorized_role_changes</tt> list.
Adding clients for that unbanned user is <em>not</em> authorized by this capability.
The authorization of this capability is identical to the <tt>canChangeUserRole</tt> capability, except that the <tt>from_role_index</tt> for the unbanned user <bcp14>MUST</bcp14> be 1, and the <tt>role_name</tt> of role 1 <bcp14>MUST</bcp14> be "banned".</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="adjust-metadata">
        <name>Adjust metadata</name>
        <t>The holder of each of the following capabilities is authorized to update the Room metadata defined in <xref target="I-D.ietf-mimi-protocol"/>, changing the relevant field:</t>
        <ul spacing="normal">
          <li>
            <t><tt>canChangeRoomName</tt></t>
          </li>
          <li>
            <t><tt>canChangeRoomDescription</tt></t>
          </li>
          <li>
            <t><tt>canChangeRoomAvatar</tt></t>
          </li>
          <li>
            <t><tt>canChangeRoomSubject</tt></t>
          </li>
          <li>
            <t><tt>canChangeRoomMood</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="message-capabilities">
        <name>Message Capabilities</name>
        <t>The capabilities below refer to functionality related to the instant messages, for example sent using the MIMI content format <xref target="I-D.ietf-mimi-content"/>.</t>
        <ul spacing="normal">
          <li>
            <t><tt>canSendMessage</tt> - the holder can send instant messages to the room. Setting specific message fields may require additional capabilities.</t>
          </li>
          <li>
            <t><tt>canReceiveMessage</tt> - the holder can receive instant messages from the room.</t>
          </li>
          <li>
            <t><tt>canCopyMessage</tt> - the holder can copy content from a received instant
message.</t>
          </li>
          <li>
            <t><tt>canReportAbuse</tt> - the holder can report a franked instant message as abusive.</t>
          </li>
          <li>
            <t><tt>canReplyToMessage</tt> - the holder can send a message replying to another message.</t>
          </li>
          <li>
            <t><tt>canReactToMessage</tt> - the holder can send a reaction, replying to another message, and using the "reaction" disposition.</t>
          </li>
          <li>
            <t><tt>canEditReaction</tt> - the holder can replace its own previous reaction with another reaction</t>
          </li>
          <li>
            <t><tt>canDeleteOwnReaction</tt> - the holder can retract (unlike) its own previous reaction.</t>
          </li>
          <li>
            <t><tt>canDeleteOtherReaction</tt> - the holder can delete the reaction of another user's previous reaction</t>
          </li>
          <li>
            <t><tt>canEditOwnMessage</tt> - the holder can edit the content of one of its own previously sent messages</t>
          </li>
          <li>
            <t><tt>canDeleteOwnMessage</tt> - the holder can retract one of its own previously sent messages</t>
          </li>
          <li>
            <t><tt>canDeleteOtherMessage</tt> - the holder can retract messages for other users.</t>
          </li>
          <li>
            <t><tt>canStartTopic</tt> - the holder can set the topic for a message</t>
          </li>
          <li>
            <t><tt>canReplyInTopic</tt> - the holder can send a message replying to a previous message, using the same topic as the original sender.</t>
          </li>
          <li>
            <t><tt>canEditOwnTopic</tt> - the holder can change the topic of a previously sent message</t>
          </li>
          <li>
            <t><tt>canEditOtherTopic</tt> - the holder can change the topic of a message previously sent by another user.</t>
          </li>
          <li>
            <t><tt>canSendLink</tt> - the holder can send an inline link</t>
          </li>
          <li>
            <t><tt>canSendLinkPreview</tt> - the holder can send an inline link with an associated
preview.</t>
          </li>
          <li>
            <t><tt>canFollowLink</tt> - the holder can open a sent inline link.</t>
          </li>
          <li>
            <t><tt>canCopyLink</tt> - the holder can copy the URL of a sent inline link.</t>
          </li>
        </ul>
        <t>The Hub can enforce whether a member can send a message. It can also withhold fanout of application messages to clients of a user. The other capabilities in this section can only be enforced by other clients.</t>
      </section>
      <section anchor="asset-capabilities">
        <name>Asset Capabilities</name>
        <ul spacing="normal">
          <li>
            <t><tt>canUploadAttachment</tt> - the holder can upload a file with the "attachent" disposition.</t>
          </li>
          <li>
            <t><tt>canDownloadAttachment</tt> - the holder can download a file with the "attachent" disposition.</t>
          </li>
          <li>
            <t><tt>canUploadImage</tt> - the holder can upload a file with the media type of "image" and the disposition of "render"</t>
          </li>
          <li>
            <t><tt>canDownloadImage</tt> - the holder can download a file with the media type of "image" and the disposition of "render"</t>
          </li>
          <li>
            <t><tt>canUploadVideo</tt> - the holder can upload a file with the media type of "video" and the disposition of "render"</t>
          </li>
          <li>
            <t><tt>canDownloadVideo</tt> - the holder can download a file with the media type of "video" and the disposition of "render"</t>
          </li>
          <li>
            <t><tt>canUploadAudio</tt> - the holder can upload a file with the media type of "audio" and the disposition of "render"</t>
          </li>
          <li>
            <t><tt>canDownloadAudio</tt> - the holder can download a file with the media type of "audio" and the disposition of "render"</t>
          </li>
        </ul>
      </section>
      <section anchor="real-time-media">
        <name>Real-time media</name>
        <t>The MIMI Working has not yet defined requirements for real-time media, however the capabilities below are widely representative of the permissions that would be required.</t>
        <ul spacing="normal">
          <li>
            <t><tt>canStartCall</tt> - the holder can initiate a new real-time call/conference</t>
          </li>
          <li>
            <t><tt>canJoinCall</tt> - the holder can join an existing real-time call/conference</t>
          </li>
          <li>
            <t><tt>canSendAudio</tt> - the holder is authorized to contribute audio in a call/conference.</t>
          </li>
          <li>
            <t><tt>canReceiveAudio</tt> - the holder is authorized to receive audio in a call/conference.</t>
          </li>
          <li>
            <t><tt>canSendVideo</tt> - the holder is authorized to contribute video in a call/conference.</t>
          </li>
          <li>
            <t><tt>canReceiveVideo</tt> - the holder is authorized to receive video in a call/conference.</t>
          </li>
          <li>
            <t><tt>canShareScreen</tt> - the holder is authorized to contribute screen sharing in a call/conference</t>
          </li>
          <li>
            <t><tt>canViewSharedScreen</tt> - the holder is authorized to receive screen sharing in a call/conference</t>
          </li>
        </ul>
      </section>
      <section anchor="disruptive-policy-changes">
        <name>Disruptive Policy Changes</name>
        <ul spacing="normal">
          <li>
            <t><tt>canChangeRoomMembershipStyle</tt> - the holder is authorized to modify the base room membership style.</t>
          </li>
          <li>
            <t><tt>canChangeRoleDefinitions</tt> - the holder is authorized to make changes to the definitions of the Roles component.</t>
          </li>
          <li>
            <t><tt>canChangePreauthorizedUserList</tt> - the holder is authorized to make changes to the Preauthorized Users component.</t>
          </li>
          <li>
            <t><tt>canDestroyRoom</tt> - the holder is authorized to completely destroy the room.</t>
          </li>
          <li>
            <t><tt>canSendMLSReinitProposal</tt> - the holder is authorized to send an MLS ReInit proposal.</t>
          </li>
        </ul>
      </section>
      <section anchor="reserved-capabilities">
        <name>Reserved Capabilities</name>
        <t>The following capability names are reserved for possible future use</t>
        <ul spacing="normal">
          <li>
            <t><tt>canCreateJoinCode</tt></t>
          </li>
          <li>
            <t><tt>canDeleteJoinCode</tt></t>
          </li>
          <li>
            <t><tt>canKnock</tt></t>
          </li>
          <li>
            <t><tt>canAcceptKnock</tt></t>
          </li>
          <li>
            <t><tt>canCreateSubgroup</tt></t>
          </li>
          <li>
            <t><tt>canSendDirectMessage</tt></t>
          </li>
          <li>
            <t><tt>canTargetMessage</tt></t>
          </li>
          <li>
            <t><tt>canChangeOwnName</tt></t>
          </li>
          <li>
            <t><tt>canChangeOwnPresence</tt></t>
          </li>
          <li>
            <t><tt>canChangeOwnMood</tt></t>
          </li>
          <li>
            <t><tt>canChangeOwnAvatar</tt></t>
          </li>
          <li>
            <t><tt>canCreateRoom</tt></t>
          </li>
          <li>
            <t><tt>canChangeMlsOperationalPolicies</tt></t>
          </li>
          <li>
            <t><tt>canChangeOtherPolicyAttribute</tt></t>
          </li>
          <li>
            <t>MLS specific
            </t>
            <ul spacing="normal">
              <li>
                <t>update - update policy</t>
              </li>
              <li>
                <t>PSK - psk policy</t>
              </li>
              <li>
                <t>external proposal - general operational policy rules</t>
              </li>
              <li>
                <t>external commit - general operational policy rules</t>
              </li>
            </ul>
          </li>
        </ul>
        <!--If `knock_allowed` is true, a non-participant can send a knock requesting access to the target room. If false, a user cannot. This option can only be enabled if the membership_style is members-only. The default is false.
-->
<!-- Knock-Enabled vs. Knock-Disabled:
In a knock-enabled room, non-banned users are allowed to programmatically request entry into the room. In a knock-disabled room this functionality is disabled.
-->

</section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This entire document focuses on authorization policy.
TODO More Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>RFC EDITOR: Please replace XXXX throughout with the RFC number assigned to this document.</t>
      <section anchor="new-mls-application-components">
        <name>New MLS application components</name>
        <t>This document registers the following MLS Component Types per <xref section="7.5" sectionFormat="of" target="I-D.ietf-mls-extensions"/>.</t>
        <section anchor="mlsoperationalpolicy-mls-component-type">
          <name>mls_operational_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD0 (suggested value 0x0024)</t>
            </li>
            <li>
              <t>Name: mls_operational_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="operational"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="roleslist-mls-component-type">
          <name>roles_list MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD1 (suggested value 0x0025)</t>
            </li>
            <li>
              <t>Name: roles_list</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="roles"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="preauthlist-mls-component-type">
          <name>preauth_list MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD2 (suggested value 0x0026)</t>
            </li>
            <li>
              <t>Name: preauth_list</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="preauth"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="baseroompolicy-mls-component-type">
          <name>base_room_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD3 (suggested value 0x0027)</t>
            </li>
            <li>
              <t>Name: base_room_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="preauth"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="statusnotificationpolicy-mls-component-type">
          <name>status_notification_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD4 (suggested value 0x0028)</t>
            </li>
            <li>
              <t>Name: status_notification_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="status-notification"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="joinlinkpolicy-mls-component-type">
          <name>join_link_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD5 (suggested value 0x0029)</t>
            </li>
            <li>
              <t>Name: join_link_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="join-link"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="joinlinks-mls-component-type">
          <name>join_links MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD6 (suggested value 0x002A)</t>
            </li>
            <li>
              <t>Name: join_links</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="join-link"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="linkpreviewpolicy-mls-component-type">
          <name>link_preview_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD7 (suggested value 0x002B)</t>
            </li>
            <li>
              <t>Name: link_preview_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="link-preview"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="assetpolicy-mls-component-type">
          <name>asset_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD8  (suggested value 0x002C)</t>
            </li>
            <li>
              <t>Name: asset_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="assets"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="loggingpolicy-mls-component-type">
          <name>logging_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD9 (suggested value 0x002D)</t>
            </li>
            <li>
              <t>Name: logging_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="logging"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="chathistorypolicy-mls-component-type">
          <name>chat_history_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD10 (suggested value 0x002E)</t>
            </li>
            <li>
              <t>Name: chat_history_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="history"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="botpolicy-mls-component-type">
          <name>bot_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD11 (suggested value 0x002F)</t>
            </li>
            <li>
              <t>Name: bot_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="bots"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="message-expiration-policy-component">
          <name>Message expiration policy component</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD12 (suggested value 0x0030)</t>
            </li>
            <li>
              <t>Name: message_expiration_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="message-expiration"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="new-mimi-role-capabilities-registry">
        <name>New MIMI Role Capabilities registry</name>
        <t>This document requests the creation of a new IANA "MIMI Role Capabilities" registry.
The registry should be under the heading of "More Instant Messaging Interoperability (MIMI)".
Assignments to this registry in the range 0x0000 to 0xF000 are via Specification Required policy <xref target="RFC8126"/> using the MIMI Designated Experts.
Assignments in the range 0xF000 to 0xFFFF are for private use.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>
            <t>Value: The numeric value of the role capability</t>
          </li>
          <li>
            <t>Name: The name of the role capability</t>
          </li>
          <li>
            <t>Reference: The document where this role capability is defined</t>
          </li>
        </ul>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">canAddParticipant</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0001</td>
              <td align="left">canRemoveParticipant</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">canAddOwnClient</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0003</td>
              <td align="left">canRemoveOwnClient</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0004</td>
              <td align="left">canOpenJoin</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0005</td>
              <td align="left">canJoinIfPreauthorized</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0006</td>
              <td align="left">canRemoveSelf</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0007</td>
              <td align="left">canCreateJoinCode (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0008</td>
              <td align="left">canDeleteJoinCode (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0009</td>
              <td align="left">canUseJoinCode</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000a</td>
              <td align="left">canBan</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000b</td>
              <td align="left">canUnBan</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000c</td>
              <td align="left">canKick</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000d</td>
              <td align="left">canKnock (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000e</td>
              <td align="left">canAcceptKnock (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000f</td>
              <td align="left">canChangeUserRole</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0010</td>
              <td align="left">canChangeOwnRole</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0011</td>
              <td align="left">canCreateSubgroup (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0100</td>
              <td align="left">canSendMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0101</td>
              <td align="left">canReceiveMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0102</td>
              <td align="left">canCopyMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0103</td>
              <td align="left">canReportAbuse</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0104</td>
              <td align="left">canReplyToMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0105</td>
              <td align="left">canReactToMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0106</td>
              <td align="left">canEditReaction</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0107</td>
              <td align="left">canDeleteOwnReaction</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0108</td>
              <td align="left">canDeleteOtherReaction</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0109</td>
              <td align="left">canEditOwnMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010a</td>
              <td align="left">canDeleteOwnMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010b</td>
              <td align="left">canDeleteOtherMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010c</td>
              <td align="left">canStartTopic</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010d</td>
              <td align="left">canReplyInTopic</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010e</td>
              <td align="left">canEditOwnTopic</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010f</td>
              <td align="left">canEditOtherTopic</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0110</td>
              <td align="left">canSendDirectMessage (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0111</td>
              <td align="left">canTargetMessage (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0200</td>
              <td align="left">canUploadImage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0201</td>
              <td align="left">canUploadAudio</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0202</td>
              <td align="left">canUploadVideo</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0203</td>
              <td align="left">canUploadAttachment</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0204</td>
              <td align="left">canDownloadImage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0205</td>
              <td align="left">canDownloadAudio</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0206</td>
              <td align="left">canDownloadVideo</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0207</td>
              <td align="left">canDownloadAttachment</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0208</td>
              <td align="left">canSendLink</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0209</td>
              <td align="left">canSendLinkPreview</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x020a</td>
              <td align="left">canFollowLink</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x020b</td>
              <td align="left">canCopyLink</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0300</td>
              <td align="left">canChangeRoomName</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0301</td>
              <td align="left">canChangeRoomDescription</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0302</td>
              <td align="left">canChangeRoomAvatar</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0303</td>
              <td align="left">canChangeRoomSubject</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0304</td>
              <td align="left">canChangeRoomMood</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0380</td>
              <td align="left">canChangeOwnName (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0381</td>
              <td align="left">canChangeOwnPresence (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0382</td>
              <td align="left">canChangeOwnMood (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0383</td>
              <td align="left">canChangeOwnAvatar (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0400</td>
              <td align="left">canStartCall</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0401</td>
              <td align="left">canJoinCall</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0402</td>
              <td align="left">canSendAudio</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0403</td>
              <td align="left">canReceiveAudio</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0404</td>
              <td align="left">canSendVideo</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0405</td>
              <td align="left">canReceiveVideo</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0406</td>
              <td align="left">canShareScreen</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0407</td>
              <td align="left">canViewSharedScreen</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0500</td>
              <td align="left">canCreateRoom (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0501</td>
              <td align="left">canDestroyRoom</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0502</td>
              <td align="left">canChangeRoomMembershipStyle</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0503</td>
              <td align="left">canChangeRoleDefinitions</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0504</td>
              <td align="left">canChangePreauthorizedUserList</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0505</td>
              <td align="left">canChangeOtherPolicyAttribute (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0600</td>
              <td align="left">canChangeMlsOperationalPolicies (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0601</td>
              <td align="left">canSendMLSReinitProposal</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0602</td>
              <td align="left">canSendMLSUpdateProposal (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0603</td>
              <td align="left">canSendMLSPSKProposal (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0604</td>
              <td align="left">canSendMLSExternalProposal (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0605</td>
              <td align="left">canSendMLSExternalCommit (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-mimi-arch">
          <front>
            <title>An Architecture for More Instant Messaging Interoperability (MIMI)</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   The More Instant Messaging Interoperability (MIMI) working group is
   defining a suite of protocols that allow messaging providers to
   interoperate with one another.  This document lays out an overall
   architecture enumerating the MIMI protocols and how they work
   together to enable an overall messaging experience.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-arch-02"/>
        </reference>
        <reference anchor="I-D.ietf-mimi-protocol">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) using HTTPS and MLS</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Matthew Hodgson" initials="M." surname="Hodgson">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author fullname="Konrad Kohbrok" initials="K." surname="Kohbrok">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Rohan Mahy Consulting Services</organization>
            </author>
            <author fullname="Travis Ralston" initials="T." surname="Ralston">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document specifies the More Instant Messaging Interoperability
   (MIMI) transport protocol, which allows users of different messaging
   providers to interoperate in group chats (rooms), including to send
   and receive messages, share room policy, and add participants to and
   remove participants from rooms.  MIMI describes messages between
   providers, leaving most aspects of the provider-internal client-
   server communication up to the provider.  MIMI integrates the
   Messaging Layer Security (MLS) protocol to provide end-to-end
   security assurances, including authentication of protocol
   participants, confidentiality of messages exchanged within a room,
   and agreement on the state of the room.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-protocol-05"/>
        </reference>
        <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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="RFC8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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="I-D.ietf-mls-extensions">
          <front>
            <title>The Messaging Layer Security (MLS) Extensions</title>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="21" month="July" year="2025"/>
            <abstract>
              <t>   The Messaging Layer Security (MLS) protocol is an asynchronous group
   authenticated key exchange protocol.  MLS provides a number of
   capabilities to applications, as well as several extension points
   internal to the protocol.  This document provides a consolidated
   application API, guidance for how the protocol's extension points
   should be used, and a few concrete examples of both core protocol
   extensions and uses of the application API.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mls-extensions-08"/>
        </reference>
        <reference anchor="I-D.ietf-mimi-content">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) message content</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Rohan Mahy Consulting Services</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   This document describes content semantics common in Instant Messaging
   (IM) systems and describes a profile suitable for instant messaging
   interoperability of messages end-to-end encrypted inside the MLS
   (Message Layer Security) Protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-content-07"/>
        </reference>
        <reference anchor="RFC9420" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9420.xml">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="R. Robert" initials="R." surname="Robert"/>
            <author fullname="J. Millican" initials="J." surname="Millican"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9420"/>
          <seriesInfo name="DOI" value="10.17487/RFC9420"/>
        </reference>
        <reference anchor="RFC8126" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.mahy-mimi-message-status">
          <front>
            <title>A Message Status format for the More Instant Messaging Interoperability (MIMI) content format</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
         </author>
            <date day="4" month="July" year="2025"/>
            <abstract>
              <t>   The More Instant Messaging Interoperability (MIMI) content format
   describes a message format for instant messaging.  This specification
   defines a concise, efficient format for communicating status of
   messages sent using MIMI content.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mahy-mimi-message-status-00"/>
        </reference>
        <reference anchor="RFC9458">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
        <reference anchor="RFC9750">
          <front>
            <title>The Messaging Layer Security (MLS) Architecture</title>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="S. Inguva" initials="S." surname="Inguva"/>
            <author fullname="A. Duric" initials="A." surname="Duric"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>The Messaging Layer Security (MLS) protocol (RFC 9420) provides a group key agreement protocol for messaging applications. MLS is designed to protect against eavesdropping, tampering, and message forgery, and to provide forward secrecy (FS) and post-compromise security (PCS).</t>
              <t>This document describes the architecture for using MLS in a general secure group messaging infrastructure and defines the security goals for MLS. It provides guidance on building a group messaging system and discusses security and privacy trade-offs offered by multiple security mechanisms that are part of the MLS protocol (e.g., frequency of public encryption key rotation). The document also provides guidance for parts of the infrastructure that are not standardized by MLS and are instead left to the application.</t>
              <t>While the recommendations of this document are not mandatory to follow in order to interoperate at the protocol level, they affect the overall security guarantees that are achieved by a messaging application. This is especially true in the case of active adversaries that are able to compromise clients, the Delivery Service (DS), or the Authentication Service (AS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9750"/>
          <seriesInfo name="DOI" value="10.17487/RFC9750"/>
        </reference>
      </references>
    </references>
    <?line 1191?>

<section anchor="role-examples">
      <name>Role examples</name>
      <section anchor="cooperatively-administered-room">
        <name>Cooperatively administered room</name>
        <t>This is an example set of role policies, which is suitable for friends and family rooms and small groups of peers in a workgroup or club.</t>
        <ul spacing="normal">
          <li>
            <t>no_role
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 0</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>banned
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 1</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>ordinary_user
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 2</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canAddParticipant</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canAddOwnClient</t>
                  </li>
                  <li>
                    <t>canRemoveOwnClient</t>
                  </li>
                  <li>
                    <t>canRemoveSelf</t>
                  </li>
                  <li>
                    <t>canSendMessage</t>
                  </li>
                  <li>
                    <t>canReceiveMessage</t>
                  </li>
                  <li>
                    <t>canCopyMessage</t>
                  </li>
                  <li>
                    <t>canReportAbuse</t>
                  </li>
                  <li>
                    <t>canReplyToMessage</t>
                  </li>
                  <li>
                    <t>canReactToMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnReaction</t>
                  </li>
                  <li>
                    <t>canEditOwnMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnMessage</t>
                  </li>
                  <li>
                    <t>canStartTopic</t>
                  </li>
                  <li>
                    <t>canReplyInTopic</t>
                  </li>
                  <li>
                    <t>canEditOwnTopic</t>
                  </li>
                  <li>
                    <t>canUploadImage</t>
                  </li>
                  <li>
                    <t>canUploadVideo</t>
                  </li>
                  <li>
                    <t>canUploadAudio</t>
                  </li>
                  <li>
                    <t>canUploadAttachment</t>
                  </li>
                  <li>
                    <t>canDownloadImage</t>
                  </li>
                  <li>
                    <t>canDownloadVideo</t>
                  </li>
                  <li>
                    <t>canDownloadAudio</t>
                  </li>
                  <li>
                    <t>canDownloadAttachment</t>
                  </li>
                  <li>
                    <t>canSendLink</t>
                  </li>
                  <li>
                    <t>canSendLinkPreview</t>
                  </li>
                  <li>
                    <t>canFollowLink</t>
                  </li>
                  <li>
                    <t>canCopyLink</t>
                  </li>
                  <li>
                    <t>canChangeRoomName</t>
                  </li>
                  <li>
                    <t>canChangeRoomAvatar</t>
                  </li>
                  <li>
                    <t>canChangeRoomSubject</t>
                  </li>
                  <li>
                    <t>canChangeRoomMood</t>
                  </li>
                  <li>
                    <t>canChangeOwnName</t>
                  </li>
                  <li>
                    <t>canChangeOwnPresence</t>
                  </li>
                  <li>
                    <t>canChangeOwnMood</t>
                  </li>
                  <li>
                    <t>canChangeOwnAvatar</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2]), (2,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>group_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 3</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for an ordinary_user)</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnBan</t>
                  </li>
                  <li>
                    <t>canKick</t>
                  </li>
                  <li>
                    <t>canRevokeVoice</t>
                  </li>
                  <li>
                    <t>canGrantVoice</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canDeleteOtherMessage</t>
                  </li>
                  <li>
                    <t>canEditOtherTopic</t>
                  </li>
                  <li>
                    <t>canChangeRoomDescription</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3]), (1,[0,2,3]), (2,[0,1,3]), (3,[0,1,2])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>super_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 4</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for a group_admin)</t>
                  </li>
                  <li>
                    <t>canChangeRoomMembershipStyle</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3,4]), (1,[0,2,3,4]), (2,[0,1,3,4]), (3,[0,1,2,4]), (4,[0,1,2,3])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>policy_enforcer
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 5</t>
              </li>
              <li>
                <t>capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(does not include any other capabilities)</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnban</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canChangeMlsOperationalPolicies</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 2</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1]), (1,[0]), (2,[0,1]), (3,[0,1]), (4,[0,1])]</tt></t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Notes: can remove a banned user from the list (cleanup) but not restore them</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="strictly-administered-room">
        <name>Strictly administered room</name>
        <t>This is an example set of role policies, which is suitable for friends and family rooms and small groups of peers in a workgroup or club.</t>
        <ul spacing="normal">
          <li>
            <t>no_role
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 0</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canUseJoinCode</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>banned
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 1</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>ordinary_user
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 2</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canAddOwnClient</t>
                  </li>
                  <li>
                    <t>canJoinIfPreauthorized</t>
                  </li>
                  <li>
                    <t>canRemoveOwnClient</t>
                  </li>
                  <li>
                    <t>canRemoveSelf</t>
                  </li>
                  <li>
                    <t>canChangeOwnRole</t>
                  </li>
                  <li>
                    <t>canSendMessage</t>
                  </li>
                  <li>
                    <t>canReceiveMessage</t>
                  </li>
                  <li>
                    <t>canCopyMessage</t>
                  </li>
                  <li>
                    <t>canReportAbuse</t>
                  </li>
                  <li>
                    <t>canReactToMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnReaction</t>
                  </li>
                  <li>
                    <t>canEditOwnMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnMessage</t>
                  </li>
                  <li>
                    <t>canStartTopic</t>
                  </li>
                  <li>
                    <t>canReplyInTopic</t>
                  </li>
                  <li>
                    <t>canUploadImage</t>
                  </li>
                  <li>
                    <t>canUploadVideo</t>
                  </li>
                  <li>
                    <t>canUploadAudio</t>
                  </li>
                  <li>
                    <t>canUploadAttachment</t>
                  </li>
                  <li>
                    <t>canDownloadImage</t>
                  </li>
                  <li>
                    <t>canDownloadVideo</t>
                  </li>
                  <li>
                    <t>canDownloadAudio</t>
                  </li>
                  <li>
                    <t>canDownloadAttachment</t>
                  </li>
                  <li>
                    <t>canSendLink</t>
                  </li>
                  <li>
                    <t>canSendLinkPreview</t>
                  </li>
                  <li>
                    <t>canFollowLink</t>
                  </li>
                  <li>
                    <t>canCopyLink</t>
                  </li>
                  <li>
                    <t>canChangeOwnName</t>
                  </li>
                  <li>
                    <t>canChangeOwnPresence</t>
                  </li>
                  <li>
                    <t>canChangeOwnMood</t>
                  </li>
                  <li>
                    <t>canChangeOwnAvatar</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2]), (2,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>group_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 3</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for an ordinary_user)</t>
                  </li>
                  <li>
                    <t>canAddParticipant</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnBan</t>
                  </li>
                  <li>
                    <t>canKick</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canCreateJoinCode - reserved for future use</t>
                  </li>
                  <li>
                    <t>canDeleteJoinCode - reserved for future use</t>
                  </li>
                  <li>
                    <t>canDeleteOtherReaction</t>
                  </li>
                  <li>
                    <t>canDeleteOtherMessage</t>
                  </li>
                  <li>
                    <t>canEditOwnTopic</t>
                  </li>
                  <li>
                    <t>canEditOtherTopic</t>
                  </li>
                  <li>
                    <t>canChangeRoomDescription</t>
                  </li>
                  <li>
                    <t>canChangeRoomName</t>
                  </li>
                  <li>
                    <t>canChangeRoomAvatar</t>
                  </li>
                  <li>
                    <t>canChangeRoomSubject</t>
                  </li>
                  <li>
                    <t>canChangeRoomMood</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3]), (1,[0,2,3]), (2,[0,1,3]), (3,[0,1,2])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>super_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 4</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for a group_admin)</t>
                  </li>
                  <li>
                    <t>canChangeRoomMembershipStyle</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3,4]), (1,[0,2,3,4]), (2,[0,1,3,4]), (3,[0,1,2,4]), (4,[0,1,2,3])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>policy_enforcer
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 5</t>
              </li>
              <li>
                <t>capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(does not include any other capabilities)</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnban</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canChangeMlsOperationalPolicies</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 2</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1]), (1,[0]), (2,[0,1]), (3,[0,1]), (4,[0,1])]</tt></t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Notes: can remove a banned user from the list (cleanup) but not restore them</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="moderated-room">
        <name>Moderated room</name>
        <ul spacing="normal">
          <li>
            <t>no_role
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 0</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canUseJoinCode</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2,3])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>banned
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 1</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>guest
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 2</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canRemoveSelf</t>
                  </li>
                  <li>
                    <t>canReceiveMessage</t>
                  </li>
                  <li>
                    <t>canCopyMessage</t>
                  </li>
                  <li>
                    <t>canReactToMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnReaction</t>
                  </li>
                  <li>
                    <t>canFollowLink</t>
                  </li>
                  <li>
                    <t>canCopyLink</t>
                  </li>
                  <li>
                    <t>canDownloadImage</t>
                  </li>
                  <li>
                    <t>canDownloadVideo</t>
                  </li>
                  <li>
                    <t>canDownloadAudio</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2]), (2,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>attendee
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 3</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for a guest)</t>
                  </li>
                  <li>
                    <t>canAddOwnClient</t>
                  </li>
                  <li>
                    <t>canJoinIfPreauthorized</t>
                  </li>
                  <li>
                    <t>canRemoveOwnClient</t>
                  </li>
                  <li>
                    <t>canChangeOwnRole</t>
                  </li>
                  <li>
                    <t>canReportAbuse</t>
                  </li>
                  <li>
                    <t>canReplyInTopic</t>
                  </li>
                  <li>
                    <t>canDownloadAttachment</t>
                  </li>
                  <li>
                    <t>canChangeOwnName</t>
                  </li>
                  <li>
                    <t>canChangeOwnPresence</t>
                  </li>
                  <li>
                    <t>canChangeOwnAvatar</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[3]), (3,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>speaker
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 4</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for a speaker)</t>
                  </li>
                  <li>
                    <t>canSendMessage</t>
                  </li>
                  <li>
                    <t>canEditOwnMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnMessage</t>
                  </li>
                  <li>
                    <t>canStartTopic</t>
                  </li>
                  <li>
                    <t>canUploadImage</t>
                  </li>
                  <li>
                    <t>canUploadVideo</t>
                  </li>
                  <li>
                    <t>canUploadAudio</t>
                  </li>
                  <li>
                    <t>canUploadAttachment</t>
                  </li>
                  <li>
                    <t>canSendLink</t>
                  </li>
                  <li>
                    <t>canSendLinkPreview</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[4]), (4,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>moderator
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 5</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for an ordinary_user)</t>
                  </li>
                  <li>
                    <t>canAddParticipant</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnBan</t>
                  </li>
                  <li>
                    <t>canKick</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canCreateJoinCode - reserved for future use</t>
                  </li>
                  <li>
                    <t>canDeleteJoinCode - reserved for future use</t>
                  </li>
                  <li>
                    <t>canDeleteOtherReaction</t>
                  </li>
                  <li>
                    <t>canDeleteOtherMessage</t>
                  </li>
                  <li>
                    <t>canEditOwnTopic</t>
                  </li>
                  <li>
                    <t>canEditOtherTopic</t>
                  </li>
                  <li>
                    <t>canChangeRoomName</t>
                  </li>
                  <li>
                    <t>canChangeRoomAvatar</t>
                  </li>
                  <li>
                    <t>canChangeRoomSubject</t>
                  </li>
                  <li>
                    <t>canChangeRoomMood</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3,4,5]), (1,[0,2,3,4,5]), (2,[0,1,3,4,5]), (3,[0,1,2,4,5]), (4,[0,1,2,3,5]), (5,[0,1,2,3,4])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>super_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 6</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for a moderator)</t>
                  </li>
                  <li>
                    <t>canChangeRoomDescription</t>
                  </li>
                  <li>
                    <t>canChangeRoomMembershipStyle</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3,4,5,6]), (1,[0,2,3,4,5,6]), (2,[0,1,3,4,5,6]), (3,[0,1,2,4,5,6]), (4,[0,1,2,3,5,6]), (5,[0,1,2,3,4,6]), (6,[0,1,2,3,4,5])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>policy_enforcer
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 7</t>
              </li>
              <li>
                <t>capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(does not include any other capabilities)</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnban</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canChangeMlsOperationalPolicies</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 2</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1]), (1,[0]), (2,[0,1]), (3,[0,1]), (4,[0,1]), (5, [0,1]), (6, [0,1])]</tt></t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Notes: can remove a banned user from the list (cleanup) but not restore them</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="multi-organization-administered-room">
        <name>Multi-organization administered room</name>
        <t>In this example room policy, Alice from organization A is a super admin.
There are per organization user and admin roles for orgs A, B, and C.
Organizational admins can only move users to and from their org user role, their org admin role, the no_role; and can ban (but not unban) their own org users.
The non-host orgs do not have the <tt>canChangeOwnRole</tt> and <tt>canJoinIfPreauthorized</tt>, and are limited to 3 admins per org.</t>
        <ul spacing="normal">
          <li>
            <t>no_role
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 0</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>banned
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 1</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_a_user
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 2</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(all capabilities of org_b_user)</t>
                  </li>
                  <li>
                    <t>canChangeOwnRole</t>
                  </li>
                  <li>
                    <t>canJoinIfPreauthorized</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2]), (2,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_b_user
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 3</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canRemoveSelf</t>
                  </li>
                  <li>
                    <t>canAddOwnClient</t>
                  </li>
                  <li>
                    <t>canRemoveOwnClient</t>
                  </li>
                  <li>
                    <t>canSendMessage</t>
                  </li>
                  <li>
                    <t>canReceiveMessage</t>
                  </li>
                  <li>
                    <t>canCopyMessage</t>
                  </li>
                  <li>
                    <t>canReportAbuse</t>
                  </li>
                  <li>
                    <t>canReplyInTopic</t>
                  </li>
                  <li>
                    <t>canReactToMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnReaction</t>
                  </li>
                  <li>
                    <t>canEditOwnMessage</t>
                  </li>
                  <li>
                    <t>canSendLink</t>
                  </li>
                  <li>
                    <t>canSendLinkPreview</t>
                  </li>
                  <li>
                    <t>canFollowLink</t>
                  </li>
                  <li>
                    <t>canCopyLink</t>
                  </li>
                  <li>
                    <t>canDownloadImage</t>
                  </li>
                  <li>
                    <t>canDownloadVideo</t>
                  </li>
                  <li>
                    <t>canDownloadAudio</t>
                  </li>
                  <li>
                    <t>canDownloadAttachment</t>
                  </li>
                  <li>
                    <t>canChangeOwnName</t>
                  </li>
                  <li>
                    <t>canChangeOwnPresence</t>
                  </li>
                  <li>
                    <t>canChangeOwnAvatar</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[3]), (3,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_c_user
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 4</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(same capabilities as org_b_user)</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[4]), (4,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_a_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 5</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(all capabilities of org_b_admin)</t>
                  </li>
                  <li>
                    <t>canChangeOwnRole</t>
                  </li>
                  <li>
                    <t>canJoinIfPreauthorized</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2,5]), (2,[0,1,5]), (5,[0,1,2])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_b_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 6</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(all capabilities of org_b_user)</t>
                  </li>
                  <li>
                    <t>canDeleteOwnMessage</t>
                  </li>
                  <li>
                    <t>canStartTopic</t>
                  </li>
                  <li>
                    <t>canUploadImage</t>
                  </li>
                  <li>
                    <t>canUploadVideo</t>
                  </li>
                  <li>
                    <t>canUploadAudio</t>
                  </li>
                  <li>
                    <t>canUploadAttachment</t>
                  </li>
                  <li>
                    <t>canAddParticipant</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canKick</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 3</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[3,6]), (3,[0,1,6]), (6,[0,1,3])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_c_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 7</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(all capabilities of org_b_admin)</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 3</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[4,7]), (4,[0,1,7]), (7,[0,1,4])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>super_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 8</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for org_a_admin)</t>
                  </li>
                  <li>
                    <t>canUnBan</t>
                  </li>
                  <li>
                    <t>canDeleteOtherReaction</t>
                  </li>
                  <li>
                    <t>canDeleteOtherMessage</t>
                  </li>
                  <li>
                    <t>canEditOwnTopic</t>
                  </li>
                  <li>
                    <t>canEditOtherTopic</t>
                  </li>
                  <li>
                    <t>canChangeRoomDescription</t>
                  </li>
                  <li>
                    <t>canChangeRoomName</t>
                  </li>
                  <li>
                    <t>canChangeRoomAvatar</t>
                  </li>
                  <li>
                    <t>canChangeRoomSubject</t>
                  </li>
                  <li>
                    <t>canChangeRoomMood</t>
                  </li>
                  <li>
                    <t>canChangeRoomMembershipStyle</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3,4,5,6,7,8]), (1,[0,2,3,4,5,6,7,8]), (2,[0,1,5,8]), (3,[0,1,6]), (4,[0,1,7]), (5,[0,1,2,8]), (6,[0,1,3]), (7,[0,1,4]), (8,[0,1,2,5])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>policy_enforcer
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 9</t>
              </li>
              <li>
                <t>capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(does not include any other capabilities)</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnban</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canChangeMlsOperationalPolicies</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 2</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1]), (1,[0]), (3,[0,1]), (4,[0,1]), (5,[0,1]), (6,[0,1]), (7,[0,1]), (8,[0,1])]</tt></t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Notes: can remove a banned user from the list (cleanup) but not restore them</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="complete-tls-presentation-language-syntax">
      <name>Complete TLS Presentation Language Syntax</name>
      <artwork><![CDATA[
enum {
  false(0),
  true(1)
} bool;

struct {
  /* a valid Uniform Resource Identifier (URI) */
  opaque uri<V>;
} Uri;

struct {
  opaque domain<V>;
} DomainName;

enum {
  optional(0),
  required(1),
  forbidden(2)
} Optionality;


/* See MIMI Capability Types IANA registry */
uint16 CapabilityType;

struct {
   uint32 from_role_index;
   uint32 target_role_indexes<V>;
} SingleSourceRoleChangeTargets;

struct {
  uint32 role_index;
  opaque role_name<V>;
  opaque role_description<V>;
  CapabilityType role_capabilities<V>;
  uint32 minimum_participants_constraint;
  optional uint32 maximum_participants_constraint;
  uint32 minimum_active_participants_constraint;
  optional uint32 maximum_active_participants_constraint;
  SingleSourceRoleChangeTargets authorized_role_changes<V>;
} Role;

struct {
  Role roles<V>;
} RoleData;

RoleData roles_list;
RoleData RoleUpdate;


struct {
  /* MLS Credential Type of the "claim"  */
  CredentialType credential_type;
  /* the binary representation of an X.509 OID, a JWT claim name  */
  /* string, or the CBOR map claim key in a CWT (an int or tstr)  */
  opaque id<V>;
} ClaimId;

struct {
  ClaimId claim_id;
  opaque claim_value<V>;
} Claim;

struct {
  /* when all claims in the claimset are satisfied, the claimset */
  */ is satisfied */
  Claim claimset<V>;
  Role target_role;
} PreAuthRoleEntry;

struct {
  PreAuthRoleEntry preauthorized_entries<V>;
} PreAuthData;

PreAuthData preauth_list;
PreAuthData PreAuthUpdate;


struct {
    bool fixed_membership;
    bool parent_dependant;
    Uri parent_room<V>;
    bool multi_device;
    optional uint32 max_clients;
    optional uint32 max_users;
    bool pseudonyms_allowed;
    bool persistent_room;
    bool discoverable;
    Component policy_component_ids<V>;
} BaseRoomPolicy;

BaseRoomPolicy BaseRoomData;
BaseRoomPolicy BaseRoomUpdate;


struct {
  Optionality delivery_notifications;
  Optionality read_receipts;
} StatusNotificationPolicy;

StatusNotificationPolicy StatusNotificationPolicyData;
StatusNotificationPolicy StatusNotificationPolicyUpdate;


struct {
  bool on_request;
  Uri join_link;
  bool multiuser;
  uint32 expiration;
} JoinLinkPolicy;

JoinLinkPolicy JoinLinkPolicyData;
JoinLinkPolicy JoinLinkPolicyUpdate;

struct {
  opaque join_link;
} JoinLink;

JoinLink JoinLinksData<V>;

struct {
  uint32 removedIndices<V>;
  JoinLink added_links<V>;
} JoinLinksUpdate;


struct {
  Optionality autodetect_hyperlinks_in_text;
  Optionality send_link_previews;
  Optionality automatic_link_previews;
  Optionality link_preview_proxy_use;
  select (link_preview_proxy_use) {
    case mandatory:
      Uri link_preview_proxy<V>;
    case optional:
      Uri link_preview_proxy<V>;
    case forbidden:
      struct {};
  }
} LinkPreviewPolicy;

LinkPreviewPolicy LinkPreviewPolicyData;
LinkPreviewPolicy LinkPreviewPolicyUpdate;


enum {
  unspecified(0),
  localProvider(1),
  hub(2),
  (255)
} AssetUploadLocation;

struct {
  DomainName provider;
  DomainName asset_upload_destinations<V>;
} ProviderAssetUploadDomains;

enum {
  direct(0),
  hubProxy(1),
  ohttp(2),
  (255)
} DownloadPrivacyType;

struct {
  DownloadPrivacyType allowed_download_types<V>;
  DownloadPrivacyType forbidden_download_types<V>;
  DownloadPrivacyType default_download_type;
} DownloadPrivacy;

struct {
  AssetUploadLocation asset_upload_location;
  ProviderAssetUploadDomains upload_domains<V>;
  DownloadPrivacy download_privacy;
  uint64 max_image;
  uint64 max_audio;
  uint64 max_video;
  uint64 max_attachment;
  MediaType forbidden_media_types<V>;
  optional<MediaType> permitted_media_types<V>;
} AssetPolicy;

AssetPolicy AssetPolicyData;
AssetPolicy AssetPolicyUpdate;


struct {
  Optionality logging;
  select (logging) {
    case mandatory:
      Uri logging_clients<V>;
      Uri machine_readable_policy;
      Uri human_readable_policy;
    case optional:
      Uri logging_clients<V>;
      Uri machine_readable_policy;
      Uri human_readable_policy;
    case forbidden:
      struct {};
  }
} LoggingPolicy;

LoggingPolicy LoggingPolicyData;
LoggingPolicy LoggingPolicyUpdate;


struct {
  Optionality history_sharing;
  select (history_sharing) {
    case mandatory:
      uint32 roles_that_can_share<V>;
      bool automatically_share;
      uint32 max_time_period;
    case optional:
      uint32 roles_that_can_share<V>;
      bool automatically_share;
      uint32 max_time_period;
    case forbidden:
      struct {};
  }
} HistoryPolicy;

HistoryPolicy HistoryPolicyData;
HistoryPolicy HistoryPolicyUpdate;


struct {
  opaque name<V>;
  opaque description<V>;
  Uri homepage;
  bool local_client_bot;
  uint32 bot_role_index;
  bool can_target_message_in_group;
  bool per_user_content;
} Bot;

struct {
  Bot allowed_bots<V>;
} BotPolicy;

BotPolicy BotPolicyData;
BotPolicy BotPolicyUpdate;


struct {
  Optionality expiring_messages;
  select (expiring_messages) {
    case mandatory:
      uint32 min_expiration_duration;
      uint32 max_expiration_duration;
      optional uint32 default_expiration_duration;
    case optional:
      uint32 min_expiration_duration;
      uint32 max_expiration_duration;
      optional uint32 default_expiration_duration;
    case forbidden:
      struct {};
  }
} MessageExpiration;

MessageExpiration MessageExpirationData;
MessageExpiration MessageExpirationUpdate;


struct {
  ProtocolVersion versions<V>;
  CipherSuite cipher_suites<V>;
  ExtensionType extensions<V>;
  ProposalType proposals<V>;
  CredentialType credentials<V>;
  WireFormats wire_formats<V>;
  ComponentID component_ids<V>;
  ComponentID safe_aad_types<V>;
  MediaType media_types<V>;
  ContentType content_types<V>;
} ExtendedCapabilities;

enum {
  unspecified(0),
  immediate_commit(1),
  random_delay(2),
  (255)
} PendingProposalStrategy;

struct {
  PendingProposalStrategy pending_proposal_strategy;
  select (pending_proposal_strategy) {
    case unspecified:
      struct {};
    case immediate_commit:
      struct {};
    case random_delay:
      uint64 minimum_delay_ms;
      uint64 maximum_delay_ms;
    case extension:
      ComponentID id_of_strategy_params;
  }
} PendingProposalPolicy;

struct {
  uint64 minimum_time;
  uint64 default_time;
  uint64 maximum_time;
} MinDefaultMaxTime;

struct {
  uint8  epoch_tolerance;
  uint16 pad_to_size;
  uint32 max_generations_skipahead;
} AppMessagePolicy;

struct {
  ExtendedCapabilities mandatory_capabilities;
  ExtendedCapabilities default_capabilities;
  ExtendedCapabilities forbidden_capabilities;
  WireFormats handshake_formats<V>;
  bool external_proposal_allowed;
  bool external_commit_allowed;
  PendingProposalPolicy pending_proposal_policy;
  MinDefaultMaxTime LeafNode_update_time;
  AppMessagePolicy app_message_policy;
  unit64 max_kp_lifetime;
  uint64 max_credential_lifetime;
  uint64 resumption_psk_lifetime;
  MinDefaultMaxTime sender_nonce_keypair_lifetime;
  uint32 max_keypairs;
  MinDefaultMaxTime buffer_incoming_message_time;
  uint32 max_buffered_messages;
} OperationalParameters;

OperationalParameters OperationalParametersData;
OperationalParameters OperationalParametersUpdate;
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
J16QhFrh0RUMJ69/P1uRf1K94GWWTUed4B1w/Vq+4S7ehvKerdKJe0Dp5ZAu
yRMpyOtQBHlMo8JZcsh+50dhliQ97cGYLR84M+lUhl7hBjYAQHUY/hXhIDqT
OPjWFUT97yV0GHrDa1Q6L3Sej5SBNbLQS7b24chTt/qIrJ2DH/7LMmXLdTus
CZQ6fIn6pU/ppIPOwnnj8wDRretoTPH6G0aHpZiTOY/TS1NDHFlsoS3F3bAA
5+u32Q0L4GIfYMK3teiXyhprY4TDYguQuVFpYgNQee9liWxPW+2he50+k9Ou
n8HqvpEKzfiZU4pAUV4oUD9GvVKgYTgQ/SrAT2C/l6Q5beqhpEAs3VU6Ty7N
fntXgxAqdrgB7pRqCduJbSBE/xSkMAqVTjy0wLjbV8RABTWvlaJue7nL/QnM
17zvvZcnAXI27R3GzScBxmneDNptxyz3s7Mrss+AuQJpLpNJI1kyDvjVpmRl
ZoD+ZjlN2wG0bxW3NpawHVGTaM3dajpBVSrZxXgQLmTbADyzEUMjn8EWBPsg
EVO7AdVJVoGTucgXzRyTx1QUrVjD923kKYsZNCqNJH/Fdm11C3vpljuSkEMH
85zEhZbhZEt8YhhJIFcL1mfpLS2Jn+O3d29eMJLqQOg4xpe7tOswl+SE4pux
oqQuHXViGkSn4leBujxOETuOZoBrfhjmeyX7x6R378bZ4flFs/ioBNKS3OYX
xtrQ2bUJ3VN5pCR7Bu4tAz+HSCh4iJRPMZePvOjRNbxpPg1KE+K8oPckyUha
NrJ6DfG9EbQL378bcB716aKZ27QM2AsfDNjeo+Dae1b29XqhYs64tVeZTVuX
rRP5OZ3yLH+kUN+fOksKFL7rLNu63HaWO3UqFEjRzT91lhQbfddZtnW57Sy3
7JQ2IIgO8z69yCUgzGdIIP8py8mAghYvtEytjQs9LlLxwmqgeQimh+8uyIG8
bNYiUOu/hsWYr92dQUzeuaKZUaTuonDBMq7VndmFQfbP5mNQqBtQJuEXNX2k
Gybq+7cxuyiHuvA8llogsTtK6gKZ3gQLD6GmlawbxjF6UTJeUbptTIPE8Q1C
oBVFYyvAqnPcDBXH2rS3No2VMzRtMdatAOtYb4Z6hi6RZ5PcmKq8u2m0BTWI
JNRlYwcC/0c48KmP6Xad6Mi36QF33ElS0LscaCJv0hovAUlHt17xZ+W6dulS
G8kim2rKnDE96GRThfWsLxDIoNLL3JzgpmZ3yht7wHcU1iDGuvTUNdfN+4bi
yE5cuky/y+AaBy1HLyjt+O4dN73VqPV5gr4B2RqxeTO1oHGilDiT2Kqml5PJ
4cXZGwoPoe8Vb4LrhyJ8Y05TjKNhw0kIE8ag+FC7boFpsFCtKZad9RHjlsiE
5f2Y0dc3ILVZmsJMrs4XL1CRql+/T7PJpf44oihjwSeGdbYac1RGDzUnlJlG
tS0peEs208pHe5lYN3XBx9d0IEzqBWy0qnysmL5odLTeQcWX88J/jCiBbirA
UELlTQnSIXMOrIErp0aiDkYeEHug/YNfklIRxrroR8vi0v9Y8/yGb/w6eO4H
i9KAOvkK9k/YULzIt2jW+ebf+n0MH3mJi6bvbL3Ykexf67sDeGoDNdJI4+Rq
FcRDsFeEaD+DTjQKNVtu2XsGFQUb8b6iDeCljX3o4FjTkFgTZb7kb31swhqH
5uTSmNewF/vf0iQjIsv+M4F6VQzkC7BY+vSkc5rqnPraOV+nIQo8o3MYXoef
fZ7n8cIFL9T80PpALbAket1MpW/mvqQYhZZSzCgudXgq9IDwzExWORYfB4HC
kAlgMPC0RCOkDec1gz/wGWCWVkz3TAmDzttXJ6+ilxhERAFTL6dHPxzVenjz
/Dh6dnL69tWbJ9FrTEdgrL3rP+G/SLJ3ob5oJU5sI6FQQF1OzlM1/eLsZJT8
7OsHELtw//h6puXSOj87sdyco5NWXn1MihBs5IDoLYUtwkyG7m3mo8GDm9Lf
kNsNfB56e0cegTd0gKzzR8zv+yR6+/TkTtR1GeE47e+d93fu3L2PUWuQiT1p
gcyhe3Io/+Mx/A0yEexkeoP/JPov+iDCwROYjB917iNOB/CMa8BD5yDY/KDh
huEetAz3gRuug7bTEOXxam1w4nix3fDutgzvoRueD2+nAVoPkNoQUSga4rbc
dtHvtQzzkRtmFeYvNFR8p70qhsBN6W6SwwpsN+j7LYN+7AbdDn2n4TOYvg+m
YSo2H/q2E3jQMoGv3QSqMHcaNjbuY+NNgy1uHObDlmEeNQyz+MUGGOYJ3g6h
j1pG+tSNtAHsTkMOksjXR835+bYc7uOoZbzHbrw+wJ0GKpmJGxAraWe2HOTX
LWM88XAaQNwNnZJxqz5MDLE91MQNW471oO3weuYG2wB3pxFr1poGrpttvfIH
bcfWc4/hZp+07pRFoT64LUJgV4bYcnTdu+MJAhKDxQuJ+wkjboi7XR0/C1do
rKvHn2BJKl/XJSySYyVbACpLeiVIFjKSEPeaYe5ZoBxdWn950Qg5viZpw4aT
AaPFkQTRU7lSfmmjhZ9Wo952sd/9vQEmowSZks2LKlba3jRQPt0uIe7v3MFK
d94/x78oXGgSO78emt8bDestq/vhA4bweHxw9yEgteKJcGKwc/JmePYeRoeX
Ff6AKv0/d/3Df9Q/KeMcFA+1C7y9MYvlnIOXOGoCICBDmzyZCCHZJBNzz2i6
tnRFDeLFhnoeAZHqpIuu/tdJUW1E6ghbdTudv/PQoujv1GO03X9/d91Gf+/8
vS///a/+Dv/5lQGGLuvfUX0MgydsHAdvDfxbYRwwjNpbuV1g3LXjsK+ZbsBH
HcY9fxw3g2mEcZ9h6GvcLdalDuMBw2h4mrs9jIf+XPBh0SeM4xHDCO1SUVft
WfvbwHjMMEIr1o4wvmYY3kPV3ecSM4yn8Y1L0g5jLOPYEkojjAnDQJfcTx7H
VGCQGagVlZthGNkvznS4EVIjjJnQR+BfuNtcDu74MOThwo74ODjw6VRtnjvR
2IHyMc9fbcMoWmBYPub7me0IQ/iY51y2+zgsH7PuZLvDuG9heB5kO8J4oDB8
l7EdYQgf832/dp7LI58HeS5eu8AI+Fjg0LU9jK/dXJwv1Y5ziStzuQFKI4xx
bS4boTTCED7mfK7a59EKY+rRmDhe7QzDBDj9NBgzD4Z1ltoNxoHHP4IblhY2
1AhD+EdwGbOBKzfAuKt8zPNx2YSOZhgHPgy6xd4dxl0fBt0u7w7jXjAO6wq0
EwzhY4ELzq7jeBDCuAkjjTAehjBuwkgjjEeVcdyAkUYYjx2doqfbhiG0w/g6
hCEefLvBED7mvPU+YRxjd1Z+4lzu3QnkD/Xr3xHGQRWG9wpgWxh3qzD4xnSn
cdyrwpCHBbvAuF+Fgde5u+HjcVWmI5TuxMfuPT6owNDr5u356b3HdyswaCo7
juNeBYYsSxuUBhj3rWypPlDt6GyHceB0wi1ANMO46/btzVy9BYaVLZ2L084w
7rtx3HwytMB4EIzjRjCNMIQne85Ku49DeHLVIWkHGA8sD7JeEZuVukYYByrT
WVeaXefyoM6DKr5N28Co8KDAc2nbcQQ8qNEV6WYYD4J92+AzEuK4AcbD8Gxo
9k3xoTTCOPD0yqpT0nb4eOjvW4DBkbktjDqpNMK4F8B4ffb9BgBtMO4HMJ6J
20sroEYYDxphSDKym+bS6ff70TieXNpwzvJareAMzZnczV8ZTXVOjgri6CFW
dvT9Sr1nbjarus2sZcM5FxEm7Yg1T8ksTwwm+Ean3Vm8SNDjhFJ2UdzxBbJl
yZSK4a2NJIyNKVg52yQw1u18NSa32DSjd5aYcqEfPuS9w9/SLPDK5Y9eADJJ
1mAT8rS931WIXHdz4AKom67m8xrozS+EG3vYoUnLe1qoM/rzX0aILHYDasDV
wRdcVXFFMWLifE25axtQdrdTAVRDHWOvatX3S2q2+kozaz2vN9pQhHZq/6tn
jQsr+wY2v8Qzm4UNrCWs8tkzboUlvsnKL6kZkfzC0LLT2KyhzNlQaoMTq0hD
H7XvnsZf/0zyUf0ziW8Nn61iGUzBV6GbCmqdBApzY0FjR6pXNn0TXdMvcipk
lRJq3wIlr7mE5fvmMlGnmgtRuaiXiPbTWKAqTWNhKzg3wN8Vgws62sTjund6
f777l/1e1L3b+/Odv+wzz6PjdUhHfgPHu7cdx+tKfHAbeiYM9B9GoI3TkNHu
+6v1NA74wrvqB7z+CTf7VXZpfsySkBr+mAOial/D+5YGLuNZdGucw9o3m6nY
s1z8HBI7+KcnsYPe3d49IrMDIDP7A2mudyA/7vGPu0qExQozxrcR4f3PQYQ+
4e+3MKZQiatXatSwQrKySuW/Nt8houjdD8hCfiphyE8lDfl5X3/eY1oBYmEn
l6E8vm2S0x4IshupxAajsuRi8zL7DfZDLrNBaGvnKjVmNg4/NOr6n0Bmm/Ts
DeSonxtV7F+Lid39DWkBRKmWRj3q9CjTo0qiSAL6A0Y/e4K4tNFf/ehrLgwK
+Y93J3MTp6vlvk3qjDFeJdX4QlKGnVHQ19+DNr6FuuQ5qPzu+OT2pGePwy86
+zYo+ww6e6OG3eBN9rN088Bj51dV2n+zqvkXFXxLFfyLVvwvqRV/ojlxV2W6
XZKteLL2w6fZ3otsf6OEnqs7tAm8xHZU0xsMfJ+gvtcrfEbD1xdbwb+AreDn
a3m/lvb2z8/Pv1gbvlgbvlgbtrU24EPBjCImWAPDF63+l5UvlZ98Ue13Ue3P
8Snnz1LpmxXwT1CoP0lz3l65+wXU098VlfxM7S0uS3x33MS9PovqxpRa1dh+
YWNSq9lok49Gg61ls/3iZ5oZvlgTen92aotVWZYmvmyUHT+PuiL9BQTZYlz8
Ja17n92Kt6Vx7V+X9JwWo6S3YMku26C4fDFj/X7MWF+sVJ/PnNB7UDEoyAdn
UpAPzqggH5xZQT48cB/ub2fXevhZDgrLHVqsWjdaRb+YvX6LdNp7WKNU+eTT
qnzyqVU++fQqn3yKlU8P/U8PdjCYPZJl+mIw+2Iw+6wGM6LbyP79UP/+jG47
L1fzMuln+XmcatTSBgeeU0kqod47FE2VN04vOoJ/JPNaAOeIXH74nGCgFKgK
I7vmFFI+rE4zQI8eqsoBMTkBTH5eREe96CknEToedF557eI5NygILRTbljDD
cWQpE9HUIiYhaNwV5/l0H123nPdOLIqHBABhY/o5m6qXkqTta/Pr1MItOBoX
RrS9yGAVaPTTzEsnGSRrsxlcNYVjg8I94okj1ubJIpHEXvd03oLJL0+Nvjw1
+ny4AgIbxj/TZ6mLQl4g4GF+KgA8rqterdajFoPU72phfqY50aH00w2Krcbo
T3jy9Ws87mowHP7i/mOfzVfqV/P2+mIt/QzWUtxuk7bttq3BlHLHhcpvUeWN
/7pIr9sJ+Txqsz5saylsP5DafGe+nEjbXB8HhqbQhBQeUj/XfLSDRPEbvB/4
ZezLN5uTfw3F+97udFgH/wuz6tBiFFiB7oXcu40OH/2CjORfdBXu9x75Rjr+
8Yh/bGlMfrzlKuxiTPYOkIBN1G5r/iVdfBtKfj+W889/w/O595RnOe896j1u
sJ7bz3oIy8+AFwZb0lrMH1f4ZLBd4cdjrfhAd+/NJvSvZb2+mNC/mNB/pgm9
zW7umc3tn4/cn48/9xNYyqVB6d3fvjiLXtssqlkavYAJrTAc6dkaPr3vdP7x
j390TLpaRB9gMJRHrXtnvwd/Y0647sF+52M0zrL5YacDCFtNSqp3+xYM8Sqe
J9PoXZrAVltgqsJshbmnT6eYlGyWwMC7796c7ke3bkOLbBn/bWWiVZ588+O3
hwD0XZ6EMKXGNFvAskilE/qBhwvUtaPkBHLxXAaqeV9hsPgTRjNOpjCI7l0c
/KulzbAGMDow8jMj+RxsCou1JA6jHBc2nQSMewUEcvDQq4j1wmFHWOfeXVqk
oWM0h14R58bzCk0h8ztL0vO5OSPE4U7nvcqxeIuwH4EV9iA4o4+YAILAhp+n
7uiW0nA2XMtnblJNOrxhQx9662GbbN7XDcA3b9FNfdzcciOO23a8rA/WD5eB
AsDRhZBX5QREHKimf3oZ1A7dR/yDw+ghHYabifLfAAnjzoE5vpWEzZRXfDKP
k8VexNvIVaI6E/tzWBJlEjTK80p+REEOZcnmkkb/OXhw5+vo1ekJ5mf8009v
I+qCM4hwNwAEBgiI6+F7dYR3/PTVG0D6UupemjU/bD+G5l3Kp1xSVWi2HwVb
PpkKpo6x5ek0xKd8ZLDDZOqRL3+iBCg+hBonur4wKcnZ1MCmYeFfpqTLqgLm
XwBPmvbCMhrordv0zl+rCKZpnlpR9gStvredcVDAXo+AiLDoGaaADMdXLdX0
dUJzmDQysbQklYWcvF9B0rvDoET+bqSsiFh3NEveQ1cuqeahK4J9A0MAJrGE
Yz7mDRMhb9YSvF6VyUuTBV7TQourZGL4c8PeHE7I9F60V6ALSn8khVlNs3S9
KDQzqV8IdfEaWAbklUyTYgInZo4RGvizyyMlsqBN2ATkpZh+GhekSnB8TkBb
+MGW81K0FDbi3DtvoqmZA3PK10FCPZq0XwuWFpgP3kAsEWFwKlD6vB+8NnaY
bUWtbXgCOzdrnBohPEuHkikK54GUYpPZHXZ8EsEF9li9y1aFU0RDJd1V6MTC
D5VynsTGKnbAdYnCG5/r2OvSfiuwHyKQpoOXJLPpaToFutcz0oKIQeCYckY/
oTAL9EYqgY2dTUFYm5TDC2DiOUGBM35YmvdllVgwG+/QT8pXIycER9lpN1cL
E/vl2XtyOsVahZlj/O5uc4194SwTTAe7iIFrYHq3JyJCIz3U21kGQo2UG+zS
xgp12khx+RErfQR8ezdflqhq3+q1mLS2qOiW0cqhq1RyP4PsyaLoPJtQbFpM
Vp+LPHqxGoMkin917z54gCLpEaYaZGPsi2wie8KnDif2YrphAnYYfuY0hyuC
gSJeCcc9MRd7knAzrytuXfiC9JSSRsjYYZyvEfEy7OyiLJeVgeuN3mtMYTZp
EIYbKmju5OFUykhS0Q3U1MCu9fZNJBV02OCwPuJwtA3rECJ2blcn2oDRSJeB
fzYPM7JDW+pQmLU8vE/HYYKm/cq3GA34lW84huq32Fr0seClmSZxBZEL/BZg
UTfhN7b6t3jKLpKyJFkhrC80azeW98sv4c3UUngjH5TclgEL4k9b8BxJqSli
h2UeXLoA9CSpGeJJi4KCZF30q1ysAG5zhXam9bk73YLr8RAcx/N/h6XC6dor
3LhAmgW0uIjzykJVijYvmKfKFsMS84tOAA3Y1Hg4JEnCHmaYap2rHIZQcAOU
yQKwZ/Ikm25Ysl+p25sX7TtGll204HdYyou2oULjoongU7cI1I0BRIbZwiyF
/dD06RgTsh6OM19jxyyroQ2CWiAmRS/SJKcgwFDsB1sHr1VQKET9vCRmBXI4
AveHDh/siYGpWVVezxzzsX+7ryKm1wtupGkSS3ETy7ALn6prhVvR9QJm7mV4
na5ye4hUCGhDrarKpCdca5NNJP8/OKKbd4NcVT3z9INO7Vu9Fi/5FhUbSQBO
8zKbZPMfUbGEVlf8r/Lw42R5YfKzVVKaaEJ/DzEMoD09MYVAig3onDX6S4vV
TE6lS/lhYbeZcLTCTyCVPc9y4D9FdA1/D2f8Q9urOnt6EtVV27C8iGdmGFcE
KCcg1MWCY96aPDL+OxADaOKg6vjZfw83isTJgnopDerhIF6IeJnD5skWILrO
43VFynwNPeChJHg7KzG8wnnVrtJcKVry96FifVjY5m5ft1YK9rc3l0bilWrV
CW6q68/a36MoyIkplMqGi+KwUiz2zrCYgFryU4g+BSTTYTaz80M7acyNP9Yx
bTlsRfv1RodHnid9Kg+ofNbB8mfY4kl6wjVfxu/f0sdqH4+jyCyzycWwhMMF
0DSx8A4eRkuk4GxYJP9tvwq/OjepXGoVw+IyWcaYXZrk1eVSOEHTrJrI2PHz
wBp+2FZd575VZSeKV6v7u/0CRgDCxmV1y9PxaSRtiaNaz04W1mBC9MsbV7q+
WZwEWluy6IWJZz9kUwPKETJUu+ZVTEfxcmmFAAdwlSaqr1wuh/NkZupEM/Ts
2Q01clOsFktOm15cBjXqw0VDCbDtNANSGl6a9TJO8hpQoSIpLpohjVezGUBK
UkCrJwwMGwBxVVKgVJrAGyh374rbz5Rk+ew0fm+uzYfdDg300MPbPbwQPJpc
ptn13EzPKVV558MT4NhjHOq/79Gl397HTuftq5NXUWxrYnryzv8H8Sdt7YJN
AQA=

-->

</rfc>
