<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mpsb-agntcy-slim-01" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="agent-slim">Secure Low-Latency Interactive Messaging (SLIM)</title>
    <seriesInfo name="Internet-Draft" value="draft-mpsb-agntcy-slim-01"/>
    <author fullname="Luca Muscariello">
      <organization>Cisco</organization>
      <address>
        <email>lumuscar@cisco.com</email>
      </address>
    </author>
    <author fullname="Michele Papalini">
      <organization>Cisco</organization>
      <address>
        <email>micpapal@cisco.com</email>
      </address>
    </author>
    <author fullname="Mauro Sardara">
      <organization>Cisco</organization>
      <address>
        <email>msardara@cisco.com</email>
      </address>
    </author>
    <author fullname="Sam Betts">
      <organization>Cisco</organization>
      <address>
        <email>sambetts@cisco.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="24"/>
    <keyword>AI</keyword>
    <keyword>Agentic AI</keyword>
    <keyword>Communications</keyword>
    <keyword>Realtime</keyword>
    <abstract>
      <?line 84?>

<t>This document specifies the Secure Low-Latency Interactive Real-Time Messaging
(SLIM), a protocol designed to support real-time interactive AI applications at
scale. SLIM provides the transport layer for agent protocols (for example, A2A
and MCP), combining gRPC over HTTP/2 and HTTP/3 with secure messaging, group
communication, and native RPC semantics. The protocol provides mechanisms for
connection management, stream multiplexing, and flow control while maintaining
compatibility with existing gRPC deployments and supporting end-to-end
encryption via MLS.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/agntcy/slim-spec"/>.</t>
    </note>
  </front>
  <middle>
    <?line 95?>

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

</section>
    <section anchor="introduction">
      <name>Introduction</name>
      <section anchor="summary">
        <name>Summary</name>
        <t>The Secure Low-Latency Interactive Messaging (SLIM) protocol addresses the
unique communication requirements of modern AI agentic applications by providing
a secure, scalable, and efficient messaging infrastructure. SLIM combines the
reliability and performance of gRPC with secure messaging and group
communication, creating a comprehensive solution for interactive AI application
communication.</t>
        <t>At its core, SLIM consists of three primary components: data plane routing
nodes that forward messages based on metadata, session-layer clients that manage
secure group state and reliability, and application endpoints that publish and
receive encrypted content. The protocol leverages Message Layer Security (MLS)
for end-to-end encryption, ensuring that messages remain confidential even when
passing through intermediate nodes or experiencing TLS termination along the
communication path.</t>
        <t>The architecture is built around a distributed network of routing nodes, each
maintaining connection and subscription tables to enable efficient message
routing. A control plane orchestrates the system, handling node discovery,
configuration management, and administrative operations. This separation of
control, session, and data planes allows for scalable deployment while keeping
routing nodes lightweight.</t>
        <t>SLIM employs a hierarchical naming system based on Decentralized Identifiers
(DIDs) to ensure globally unique, secure, and routable names. The name structure
follows a <tt>organization/namespace/service/instance</tt> pattern, supporting anycast
and unicast routing as well as service discovery. This naming scheme supports
both decentralized and federated authentication models, enabling flexible
deployment across different organizational boundaries while maintaining
security and interoperability.</t>
        <t>The protocol includes a session layer that abstracts the complexity of MLS
operations and messaging infrastructure from applications, providing secure
point-to-point and group sessions plus native Remote Procedure Call (RPC)
semantics via SRPC (SLIM RPC). SRPC enables request/response and streaming RPC
directly over SLIM's secure messaging fabric (see <xref target="SRPC"/>), while handling
authentication, encryption, connection management, and fault recovery
automatically. This design enables developers to focus on application logic
rather than the underlying messaging complexities.</t>
        <t>Security is fundamental to SLIM's design, with authentication and authorization
handled through MLS groups, cryptographic client identities, and configurable
access policies. The protocol supports deployment in various environments, from
data center workloads and mobile applications, while maintaining
consistent security guarantees and low-latency performance characteristics.</t>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>SLIM is designed to work as a messaging layer for applications running as
workloads in a data center, but also running in a browser or mobile device while
guaranteeing end-to-end security and low-latency communication. SLIM leverages
HTTP/2 and HTTP/3 end to end as a thin waist of the communication stack and
avoids the need to create message transcoding along the path. By leveraging
message encryption via MLS <xref target="RFC9420"/> <xref target="RFC9750"/>, TLS connection termination
along the path does not negatively affect confidentiality. Authentication and
authorization are handled at the application level and can be managed in a
decentralized or federated way or a mix of both.</t>
      <t>In SLIM there are three main communication elements: routing nodes (data plane),
session-layer clients, and application endpoints that publish and receive
messages.</t>
      <t>A producer (also called a "publisher") is an endpoint that encapsulates content
in SLIM messages for transport within the SLIM message network of nodes. A
producer <bcp14>MUST</bcp14> belong to an MLS group to encrypt messages that can be decrypted
by message consumers who are members of the same group, as specified by the MLS
protocol. Once a SLIM message is encrypted, it can be published under a routable
name, which is human-readable and hierarchical. This routable channel name is
used by intermediate nodes to store and forward messages within the same
channel, allowing consumers to retrieve messages using this name.</t>
      <t>A routable name is a name prefix that is stored in a forwarding table (FIB).
This enables requests to reach the producer and fetch a response, if one exists.</t>
      <figure anchor="fig-general-arch">
        <name>Main components of the SLIM architecture.</name>
        <artwork><![CDATA[
 +-------------+         +---------------------+         +-------------+
 | Producer 1  |         |                     |         | Consumer 1  |
 +-------------+         |    Routing Node     |         +-------------+
                         |                     |<------->| Consumer 2  |
 +-------------+         |                     |         +-------------+
 | Producer 2  |-------->|                     |<------->| Consumer 3  |
 +-------------+         +---------------------+         +-------------+

          |                        ^   ^   ^
          |                        |   |   |
          |                        |   |   |
          |                        |   |   |
          v                        |   |   |
 +------------------------+        |   |   |
 | MLS Authentication     |<-------+---+---+
 | Service                |
 +------------------------+

 Legend:
 - Producers publish to topics via routing nodes.
 - Consumers subscribe to topics via routing nodes.
 - MLS Authentication Service handles group authentication and key management.
 - Encryption group coincides with the topic identifier.
]]></artwork>
      </figure>
      <t>Secure group members are clients as described in <xref target="RFC9750"/> which can write
messages as producers or read messages as consumers. Most of the time, clients
are able to read and write messages in the same secure group. Clients join
secure groups as described in the MLS standard <xref target="RFC9750"/> via an
authentication service and by exchanging messages via the delivery service. In
the SLIM architecture, the SLIM nodes constitute the data-plane infrastructure
that is responsible for delivering messages in a secure group via a logical
SLIM channel. MLS commit messages are exchanged directly using the SLIM routing
nodes.</t>
      <section anchor="routing-nodes-data-plane">
        <name>Routing Nodes (Data Plane)</name>
        <t>Routing nodes are fundamental components of the SLIM architecture that forward
messages using metadata without inspecting payloads. They fulfill several
critical functions in the messaging infrastructure. At their core, nodes
efficiently route messages between connected clients while handling the
distribution and delivery of messages across the network infrastructure.</t>
        <figure anchor="fig-node-network">
          <name>SLIM routing node network topology.</name>
          <artwork><![CDATA[
    Producer A              Producer B              Producer C
        |                       |                       |
        v                       v                       v
   +----------+            +----------+            +----------+
   |  Node 1  |<---------->|  Node 2  |<---------->|  Node 3  |
   +----------+            +----------+            +----------+
        ^                       ^                       ^
        |                       |                       |
        v                       v                       v
   +----------+            +----------+            +----------+
   |  Node 4  |<---------->|  Node 5  |<---------->|  Node 6  |
   +----------+            +----------+            +----------+
        ^                       ^                       ^
        |                       |                       |
    Consumer X             Consumer Y             Consumer Z

Legend:
- Each Node maintains connection and subscription tables
- Bidirectional arrows represent inter-node communication paths
- Producers and Consumers connect to their local nodes
- Messages are routed through the node network based on subscriptions
]]></artwork>
        </figure>
        <t>The node architecture relies on two essential data structures that work in
concert. The connection table forms the foundation for tracking all active
client connections and their states, maintaining crucial metadata about each
connected client. Alongside it, the subscription table manages topic
subscriptions and implements message filtering rules, determining which messages
should be delivered to which clients.</t>
        <t>Through this dual-table architecture, routing nodes can effectively coordinate
message delivery while maintaining optimal system performance. The connection
and subscription mechanisms work together seamlessly to ensure reliable message
routing, proper client tracking, and efficient subscription management across
the distributed system. Each node operates autonomously while participating in
the broader network, creating a resilient and scalable messaging infrastructure.</t>
        <section anchor="connection-table">
          <name>Connection Table</name>
          <t>The connection table serves as a fundamental data structure within the
SLIM routing node architecture, maintaining a comprehensive registry of both
client-to-node and node-to-node connections. Each entry in the table contains
essential metadata about connected endpoints, including their unique
identifiers, connection timestamps, authentication status, and current state
information.</t>
          <t>For client connections, the table tracks end-user applications that connect to
receive or send messages through the system. For node connections, it maintains
the network fabric topology by recording inter-node relationships and routing
paths. This dual-purpose nature enables SLIM to manage both the edge
connectivity with clients and the internal communication infrastructure between
nodes.</t>
          <t>Connection states are dynamically tracked and updated to reflect the real-time
status of each endpoint. This includes monitoring whether clients or nodes are
actively connected, temporarily disconnected, or in various intermediate states.
The table maintains crucial session information such as endpoint capabilities,
protocol versions, and quality of service parameters that influence message
handling.</t>
          <t>By maintaining this detailed connection state, the table enables efficient
routing decisions across the entire network fabric. It provides each routing
node with immediate access to both client and node status information, allowing
for rapid determination of message delivery paths and handling of
connection-related events. The connection table also plays a vital role in
system reliability by tracking connection health and enabling quick detection of
disconnections or network issues at both the client and node levels.</t>
          <t>A connection table maps location-independent channel names to connections to
remote nodes. The mapping is used to forward messages towards nodes that can
either route messages or consume them in case consumers are directly connected
to the node.</t>
          <t>Channel names are encoded as human-readable hierarchical names for efficient
table lookup operations.</t>
        </section>
        <section anchor="subscription-table-and-matching">
          <name>Subscription Table and Matching</name>
          <t>The subscription table is used to map channel subscriptions to neighboring
nodes. It manages the distribution of messages based on subscriptions and
ensures efficient delivery of messages.
A message carries the data to be delivered as well as the channel name and the
address locator of the message producer.</t>
          <t>The control plane manages the configuration and updates of the connection and
subscription tables.</t>
          <figure anchor="fig-message-structure">
            <name>SLIM message structure carrying channel name, address locator, and data.</name>
            <artwork><![CDATA[
+-------------------------------------------------------------+
|                    SLIM Message Structure                   |
+-------------------------------------------------------------+
| Channel Name   | Address Locator   |      Data Payload       |
+-------------------------------------------------------------+
| "/foo/bar"     | 192.0.2.10:12345 |   { ... application ... |
|                |                  |         data ... }      |
+-------------------------------------------------------------+

Legend:
- Channel Name: Identifies the logical channel/topic for routing.
- Address Locator: Specifies the producer's network address.
- Data Payload: Contains the actual message content.
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="control-plane">
        <name>Control Plane</name>
        <t>The control plane is responsible for the management and orchestration of
SLIM messaging nodes and their interconnections. It handles the configuration,
provisioning, and monitoring of nodes, ensuring that the messaging
infrastructure operates smoothly and efficiently.</t>
        <t>Key functions of the control plane include:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Node Discovery and Registration</strong>: New messaging nodes discover
each other and register their presence with the control plane. This
enables the control plane to maintain an up-to-date view of the
messaging infrastructure.</t>
          </li>
          <li>
            <t><strong>Configuration Management</strong>: The control plane distributes
configuration updates to messaging nodes, including connection and
subscription table updates. This ensures consistent and correct
routing behavior across the node network.</t>
          </li>
          <li>
            <t><strong>Monitoring and Analytics</strong>: The control plane collects and
analyzes telemetry data from messaging nodes, providing insights
into system performance, message flow, and potential issues.</t>
          </li>
          <li>
            <t><strong>Security and Access Control</strong>: The control plane manages
security policies, authentication, and authorization of nodes and
clients, ensuring a secure messaging environment.</t>
          </li>
        </ul>
        <t>By centralizing these management functions, the control plane enhances
the overall reliability, security, and performance of the SLIM messaging
infrastructure. It enables efficient scaling, dynamic reconfiguration,
and proactive maintenance of the node network.</t>
      </section>
      <section anchor="session-layer">
        <name>Session Layer</name>
        <t>The session layer serves as a critical abstraction component that bridges
application frameworks with the underlying SLIM messaging infrastructure. It
provides a unified interface that simplifies the complexity of secure messaging
while handling the details of MLS client operations and message distribution.</t>
        <section anchor="core-responsibilities">
          <name>Core Responsibilities</name>
          <t>The session layer encapsulates several key functionalities:</t>
          <t><strong>MLS Client Operations</strong>: The layer implements comprehensive MLS client
functionality including authentication procedures, message encryption and
decryption, key management, and group membership operations. It handles the
complex cryptographic operations transparently from the application perspective.</t>
          <t><strong>Channel Management</strong>: It provides seamless channel subscription and
unsubscription capabilities, managing the lifecycle of channel memberships and
maintaining subscription state across connection interruptions or node
failures.</t>
          <t><strong>Message Abstraction</strong>: The session layer abstracts message passing between
applications and the SLIM message distribution network, handling message
formatting, routing, and delivery confirmation while providing simple send and
receive primitives to applications.</t>
          <t><strong>Configuration Abstraction</strong>: It eliminates the need for applications to
manage complex configuration details required to connect to SLIM nodes,
automatically handling node discovery, connection establishment, and
subscription management.</t>
        </section>
        <section anchor="api-design-principles">
          <name>API Design Principles</name>
          <t>The session layer API is designed with the following principles:</t>
          <ul spacing="normal">
            <li>
              <t>Simplicity: Applications interact with the messaging system through
intuitive publish/subscribe operations without needing to understand the
underlying MLS or routing complexities.</t>
            </li>
            <li>
              <t>Asynchronous Operations: All messaging operations are designed to be
non-blocking, supporting high-performance applications.</t>
            </li>
            <li>
              <t>Framework Agnostic: The API provides language bindings and framework
adapters for various application development environments, ensuring broad
compatibility across different technology stacks.</t>
            </li>
            <li>
              <t>Error Handling: Comprehensive error reporting and recovery mechanisms
help applications handle communication issues and authentication failures.</t>
            </li>
          </ul>
        </section>
        <section anchor="session-management">
          <name>Session Management</name>
          <t>The session layer maintains persistent session state at the client across network
disconnections and node failures. It implements automatic reconnection logic,
subscription recovery, and message queuing to ensure reliable message delivery
even in unstable network conditions. Session persistence includes maintaining
MLS group membership state, channel subscriptions, and pending message queues.</t>
        </section>
      </section>
      <section anchor="naming-considerations">
        <name>Naming Considerations</name>
        <t>SLIM requires several types of identifiers: node names, channel names,
and client locators.</t>
        <t>Node names are used for secure onboarding and authentication. Node names do not
have aggregation requirements and therefore use decentralized identifiers:</t>
        <t><tt>
node name A: did:key(node_A)
</tt></t>
        <t>A channel name identifies a messaging group and must be routable; that is, it
must include a globally unique network prefix that can be aggregated for
scalable lookups and message forwarding.</t>
        <t>A group in SLIM is an MLS group with a moderator client responsible for adding
and removing group members. The moderator is identified by a cryptographic
public key as defined in MLS <xref target="RFC9750"/>, and in SLIM, also by a decentralized
identifier derived as the hash of the public key <xref target="DID-W3C"/>.</t>
        <t>By naming entities with hashes <xref target="RFC6920"/>, SLIM achieves secure and globally
unique naming, enabling the creation of permissionless systems where channel
names and client names can be distributed across administrative boundaries. W3C
DIDs are optional but can be used when hash links are employed and conform to
the Named Information <xref target="RFC6920"/> standard, referencing the IANA registry
<xref target="NI-Registry"/>.</t>
        <t>SLIM routable name prefixes and client names can use different DID methods
which have different resolution systems such as did:web <xref target="DID-Web"/>, did:key
<xref target="DID-Key"/> or did:plc <xref target="DID-ATProto"/>. See <xref target="DID-Methods"/> for well-known DID
methods.</t>
        <t>The naming structure follows these patterns:</t>
        <t><tt>
client locator: did:key(org)/namespace(org)/service/did:key(client)
channel name: did:key(org)/namespace(org)/service/did:key(moderator)
</tt></t>
        <t>Where the moderator is the special client that has the role to create a channel,
add actual application clients and remove them from the group.
As mentioned above the moderator is a data plane client which is a decentralized
instance of the MLS delivery service as described in <xref target="RFC9420"/>.</t>
        <t>The hierarchical structure is required to maximize aggregation in subscription
tables, which can aggregate multiple names under name prefixes such as
organization identifiers, organization namespaces, and services.</t>
      </section>
      <section anchor="deployment-considerations">
        <name>Deployment Considerations</name>
        <t>SLIM helps the deployment of agentic AI applications where a combination of
data streams, tools and LLMs are combined to create a distributed multi-agent
systems that can solve problems via AI.</t>
        <t>These applications work as SLIM clients and <bcp14>MAY</bcp14> expose a service to the secure
group. The channel and client naming structure combined allows for service
discovery capabilities by binding the application a specific application
namespace and service name.</t>
      </section>
    </section>
    <section anchor="rpc-in-agentic-protocols-and-relationship-to-messaging">
      <name>RPC in Agentic Protocols and Relationship to Messaging</name>
      <t>Most agent-facing interfaces in use today—such as A2A and the Model Context
Protocol (MCP)—are Remote Procedure Call (RPC) oriented. They expose synchronous
request/response semantics for tool invocation, resource listing, and capability
execution. This section clarifies how RPC relates to asynchronous messaging and
how the two paradigms interoperate in agentic systems.</t>
      <section anchor="rpc-vs-messaging-synchronous-vs-asynchronous">
        <name>RPC vs. Messaging: Synchronous vs. Asynchronous</name>
        <ul spacing="normal">
          <li>
            <t><strong>RPC (A2A, MCP)</strong>: The caller issues a request and blocks or awaits a timely
response. Semantics emphasize tightly scoped operations (for example, “call tool
X with parameters Y”) with bounded latency and explicit error contracts.</t>
          </li>
          <li>
            <t><strong>Messaging (AMQP, MQTT, NATS, Kafka, SLIM)</strong>: Decoupled producers and
consumers communicate via topics, subjects, or queues. Delivery can be
one-to-one, one-to-many, or many-to-many, with loose coupling, buffering, and
retries. Producers are not inherently blocked by consumers.</t>
          </li>
        </ul>
        <t>In practice, agentic applications need both: synchronous tool invocations for
interactivity and asynchronous channels for streaming output, progress,
coordination, and fan-out/fan-in patterns.</t>
      </section>
      <section anchor="challenges-of-rpc-over-messaging">
        <name>Challenges of RPC over Messaging</name>
        <t>Bridging synchronous RPC semantics with asynchronous messaging infrastructure
introduces several challenges:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Request/Response Correlation</strong>: Messaging systems are inherently decoupled
and do not guarantee a direct response path. Implementing RPC requires
correlating requests and responses, often using unique identifiers and temporary
reply channels.</t>
          </li>
          <li>
            <t><strong>Latency and Ordering</strong>: Messaging layers may introduce variable delivery
latency and do not guarantee strict ordering, which can complicate synchronous
RPC expectations.</t>
          </li>
          <li>
            <t><strong>Error Handling</strong>: Messaging systems may buffer, retry, or drop messages,
making it difficult to propagate errors and timeouts in a way that matches RPC
contracts.</t>
          </li>
          <li>
            <t><strong>Streaming and Multiplexing</strong>: Supporting streaming RPC (e.g., bidirectional
or server/client streaming) over messaging requires careful management of stream
lifecycles, backpressure, and multiplexing multiple logical RPCs over shared
channels.</t>
          </li>
          <li>
            <t><strong>Security and Authorization</strong>: Ensuring that only authorized parties can
invoke or respond to RPCs, and that all messages are authenticated and
encrypted, is more complex in a distributed, group-based messaging environment.</t>
          </li>
        </ul>
        <t>The SRPC capability in SLIM addresses these challenges by providing a native,
secure, and streaming RPC abstraction directly over the SLIM messaging layer, as
described in the following section.</t>
      </section>
      <section anchor="remote-procedure-calls-over-slim-srpc">
        <name>Remote Procedure Calls over SLIM (SRPC)</name>
        <t>SLIM natively supports Remote Procedure Calls (RPC) through its SRPC (SLIM RPC)
capability, enabling efficient, secure, and flexible communication patterns for
distributed and agentic applications. SRPC is designed to provide gRPC-like
streaming RPC semantics directly over the SLIM transport, leveraging SLIM's
secure, multiplexed, and group-oriented messaging infrastructure.</t>
        <section anchor="overview">
          <name>Overview</name>
          <t>SRPC allows applications to define and invoke remote procedures using familiar
gRPC patterns, including unary calls, client streaming, server streaming, and
bidirectional streaming. This enables developers to build complex, stateful, and
interactive workflows between distributed agents, services, and tools, all while
benefiting from SLIM's end-to-end security and group membership features.</t>
        </section>
        <section anchor="key-features">
          <name>Key Features</name>
          <ul spacing="normal">
            <li>
              <t><strong>Streaming RPC Support</strong>: SRPC supports all gRPC streaming modes, allowing
for flexible data exchange patterns such as real-time data feeds, interactive
sessions, and collaborative workflows.</t>
            </li>
            <li>
              <t><strong>Multiplexed Transport</strong>: Multiple concurrent RPC streams can be established
over a single SLIM connection, reducing overhead and improving resource
efficiency.</t>
            </li>
            <li>
              <t><strong>Secure Group Communication</strong>: SRPC leverages SLIM's MLS-based security
model, ensuring that all RPC calls and responses are encrypted and authenticated
within the context of secure groups.</t>
            </li>
            <li>
              <t><strong>Protocol Buffers Integration</strong>: Service definitions and message schemas are
specified using Protocol Buffers, enabling strong typing and interoperability
across languages and platforms.</t>
            </li>
          </ul>
        </section>
        <section anchor="architecture">
          <name>Architecture</name>
          <t>SRPC is implemented as a protocol extension and a set of client/server libraries
that integrate with the SLIM session layer. Developers define service interfaces
using Protocol Buffers, and code generation tools produce client and server
stubs that handle message serialization, stream management, and invocation logic
over SLIM channels.</t>
          <t>The SRPC protocol manages the lifecycle of RPC streams, including initiation,
message exchange, error handling, and stream termination. It ensures that all
communication adheres to SLIM's security and routing policies, and that group
membership and authorization are enforced for each RPC interaction.</t>
        </section>
        <section anchor="benefits-for-agentic-applications">
          <name>Benefits for Agentic Applications</name>
          <t>By providing native, streaming RPC capabilities, SRPC enables agentic AI
applications and distributed systems to:</t>
          <ul spacing="normal">
            <li>
              <t>Orchestrate complex, multi-step workflows across multiple agents and services.</t>
            </li>
            <li>
              <t>Exchange large or continuous data streams efficiently and securely.</t>
            </li>
            <li>
              <t>Implement interactive, real-time collaboration between distributed components.</t>
            </li>
            <li>
              <t>Simplify integration with existing gRPC-based tools and ecosystems.</t>
            </li>
          </ul>
          <t>SRPC makes it possible to build robust, scalable, and secure agentic
applications that fully leverage the power of SLIM's messaging and group
communication model.</t>
        </section>
        <section anchor="slim-naming-in-srpc">
          <name>SLIM Naming in SRPC</name>
          <t>SRPC derives per-service and per-handler routing names directly from the
structured SLIM naming scheme to enable efficient subscription and message
dispatch without requiring application developers to manually manage channel
names.</t>
          <t>Each application participating in a secure SLIM group already has a hierarchical
SLIM name composed of multiple components (organization identifier, namespace,
service, and client/moderator key). SRPC appends a handler-qualified suffix to
the service component to form unique, routable identifiers for RPC methods.</t>
          <t>Service interface definitions (e.g., Protocol Buffers) describe one or more RPC
handlers supporting the four common gRPC communication patterns:</t>
          <ul spacing="normal">
            <li>
              <t>Unary → Unary</t>
            </li>
            <li>
              <t>Unary → Stream</t>
            </li>
            <li>
              <t>Stream → Unary</t>
            </li>
            <li>
              <t>Stream → Stream (bidirectional)</t>
            </li>
          </ul>
          <t>For every handler declared inside a service, SRPC generates a method routing
token using the pattern:</t>
          <t><tt>
{package}.{service}-{handler}
</tt></t>
          <t>Example: Given a protobuf package <tt>example_service</tt> and service <tt>Test</tt> with
handlers <tt>ExampleUnaryUnary</tt>, <tt>ExampleUnaryStream</tt>, <tt>ExampleStreamUnary</tt>,
<tt>ExampleStreamStream</tt>, the generated handler tokens are:</t>
          <ul spacing="normal">
            <li>
              <t>example_service.Test-ExampleUnaryUnary</t>
            </li>
            <li>
              <t>example_service.Test-ExampleUnaryStream</t>
            </li>
            <li>
              <t>example_service.Test-ExampleStreamUnary</t>
            </li>
            <li>
              <t>example_service.Test-ExampleStreamStream</t>
            </li>
          </ul>
          <t>SRPC then embeds the handler token into the second component (service segment)
of the full SLIM name for routing. If the original SLIM application name
components <tt>c[i]</tt> are:</t>
          <t><tt>
c[0]/c[1]/c[2]/c[3]
</tt></t>
          <t>The subscribed name for a specific handler becomes:</t>
          <t><tt>
c[0]/c[1]/c[2]-example_service.Test-ExampleUnaryUnary/c[3]
</tt></t>
          <t>This transformation yields a distinct, hierarchical, and aggregatable name per
RPC method while preserving the organizational and namespace prefix structure
needed for subscription table aggregation. Applications exposing SRPC services
automatically subscribe to all derived handler names; the SRPC library manages
these subscriptions and maps incoming messages to the corresponding generated
server stub functions. Developers implement only the handler logic exactly as
with conventional gRPC, without manual SLIM channel management.</t>
          <t>Benefits of this naming approach:
- Deterministic and collision-resistant per-method naming.
- Preserves hierarchical aggregation for routing efficiency.
- Avoids separate discovery round-trips for method endpoints.
- Enables capability advertisement to reference method names directly.
- Simplifies multi-service deployments—adding a new handler produces a single
new routable token.</t>
          <t>This integration of SRPC handler naming with SLIM's hierarchical naming model
ensures consistent, secure, and scalable routing semantics for RPC traffic
within agentic groups.</t>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="DID-W3C" target="https://www.w3.org/TR/did-core/">
          <front>
            <title>Decentralized Identifiers (DIDs) v1.0</title>
            <author initials="W. C. C." surname="Group" fullname="W3C Credentials Community Group">
              <organization/>
            </author>
            <date year="2022" month="July" day="19"/>
          </front>
        </reference>
        <reference anchor="NI-Registry" target="https://www.iana.org/assignments/named-information/named-information.xhtml">
          <front>
            <title>Named Information Hash Algorithm Registry</title>
            <author initials="" surname="IANA" fullname="IANA">
              <organization/>
            </author>
            <date year="2013" month="August" day="01"/>
          </front>
        </reference>
        <reference anchor="DID-Methods" target="https://www.w3.org/TR/did-extensions-methods/">
          <front>
            <title>Known DID Methods in the Decentralized Identifier Ecosystem</title>
            <author initials="W. C. C." surname="Group" fullname="W3C Credentials Community Group">
              <organization/>
            </author>
            <date year="2025" month="April" day="29"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9420">
          <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="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>
        <reference anchor="RFC6920">
          <front>
            <title>Naming Things with Hashes</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="D. Kutscher" initials="D." surname="Kutscher"/>
            <author fullname="C. Dannewitz" initials="C." surname="Dannewitz"/>
            <author fullname="B. Ohlman" initials="B." surname="Ohlman"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document defines a set of ways to identify a thing (a digital object in this case) using the output from a hash function. It specifies a new URI scheme for this purpose, a way to map these to HTTP URLs, and binary and human-speakable formats for these names. The various formats are designed to support, but not require, a strong link to the referenced object, such that the referenced object may be authenticated to the same degree as the reference to it. The reason for this work is to standardise current uses of hash outputs in URLs and to support new information-centric applications and other uses of hash outputs in protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6920"/>
          <seriesInfo name="DOI" value="10.17487/RFC6920"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="SRPC" target="https://github.com/agntcy/slim/blob/main/data-plane/slimrpc-compiler/README.md">
          <front>
            <title>SLIM RPC (SRPC) Reference</title>
            <author initials="" surname="AGNTCY" fullname="AGNTCY">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="DID-Key" target="https://w3c-ccg.github.io/did-method-key/">
          <front>
            <title>The did:key Method v0.7: A DID Method for Static Cryptographic Keys</title>
            <author initials="W. C. C." surname="Group" fullname="W3C Credentials Community Group">
              <organization/>
            </author>
            <date year="2025" month="March" day="26"/>
          </front>
        </reference>
        <reference anchor="DID-ATProto" target="https://atproto.wiki/en/wiki/reference/identifiers/did">
          <front>
            <title>Decentralized Identifiers (DIDs) in the AT Protocol</title>
            <author initials="B. P." surname="Community" fullname="Bluesky/AT Protocol Community">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="DID-Web" target="https://w3c-ccg.github.io/did-method-web/">
          <front>
            <title>The did:web Method Specification</title>
            <author initials="W. C. C." surname="Group" fullname="W3C Credentials Community Group">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9Vd63Ibx5X+30/RS/+IZAOgSDlxzGSThSg5ZlmUFJGuxOty
osZMA5hwMDOeCylEViq/9gG29udu1T7LPoqfZM+tbwNAlivZrQqrLJODmZ7u
0+fynUsfTKdT1Rd9ac/00ZXNhtbqp/Xd9KnpbZVt9UXV29ZkfXFr9aXtOrMq
qpW+d/X04vL+kTKLRWtv4UmzslU/7cpic6QyeHRVt9szXVTLWqm8ziqzgfHz
1iz76abpFlOzqvpsSw9MH5yoblhsiq4r6qrfNhYfzG1j4Z+qV9WwWdj2TOUw
7JnK6qqzVTd0Z3ppys4qePtD9YE2rTVn8P+7ur1ZtfXQnMHU/SD6yr9A3dgt
3JSfKT3V8wv6FydfZPLXeb3ZDFUBq4C7O7zy0pqyLzZWKTP06xrmoqZKw89y
KEte2tMhM/py6DLTFrYsa/q4blemKv5MA53p86LL+LrdmKI80+WwoQf+JcNP
Zlm92Rn2ssjWtrT6hWlMWVTF+wy7KbIGb3/XsGZoa31l2ty05r3G7PjeaMyd
Qa/MRj+yfd+9z4CdgU2Fe+MBq7rdGGQ02Br9+OLx9HcPz8/oIcefj20GO9UC
Kf5sc32BO1ssC9t2+h7c393XtyezB0f0CHGLPn1wejp98Mn05FO66LZP089U
88ThNfq8tTQasJRjgH6rf4OMxDMw7cr2Z3rd9013dnx8d3c3u3s4g1UeX788
zot8mtWtPYZ7n11MX9pV0fUgAMnkn8HLYNIgErTMutKfm26t5yXIStGvN9o9
li7g5OH0wc9RRg4v4GL+bH5wloWpDM3TAPuvqg2ssjvG5/JpEeaye2X2et1v
StmJSwvvzbt0QV9U9V2FH2v5GMRW92urD22TfpLV3bbr7Wa0Rz+dPvh4evp/
v0f2NSg1VALddMNTPlZK+UUz5129fDFiO1R2Gq6C2oN/78NGLW0L2tEevWPG
8988uz7/au/EVrDdwwKZ/pj14DHqweNFWS+OQTyqYyCMmTalqSx90jYZsNem
KUrbHr98Mn98+WS2yWVrvrAjPruGHYDFnoGek43Rtw9mn8CMor3SsGR91RtU
e+fttunrVWuaNfwF43W72/Nwevqzv/f2PIRVZauZUKOoaYt4X6Yw+WNZ4Pz6
RVv39Y/UBMKK82tNT2d1+a7NelQOtrvZHke3hzXsnb3pG7xxdlfcFMe2Oqb/
t44xjoswI1yWU2h2sX+v7uzCbcxVYzN4kM3Pu+b8d6c5TALEYTqdarMAPQRG
X6nrddFpMOAD6g3d8dxsR7T9AbSAVnN6DWYz4AbFuGGijW4cmXOLagk2sa91
NzRN3fa6xUfR4sI2hgHnF9o0Tekssza9AvNZ2pkmAYURb4HsPDeYftXRWKXZ
guZBdieM4l8MnIIX7WuzaUo70fPTuTJVri/PX8AEQdwWYG8B6qxQ8OtbGOPz
6+sXx6cab6JfH+o7IKPumAwbt8iJJvwBSCXCERN6rDJMGRixA0OIoKObaWQC
Tw6/io3N1mBBu02Hk0fcU9mMzAY8CEvBDZlo2CcLdnczAECBZbym9+OrlmV9
B6sAGYFB79agOjSqlt7QqnByDUxmUZTIMLQOeLjr/YoBOpX1lqwFjSdbg58D
pJr29RT+p2DTUXngrG4LAEBPr2bMQZsiz0sATB8AW1a3yKK0YzDQY7uEKTC2
Urh01FMIyDp9dPnl1fXRhP+vnz2n318++e2XFy+fPMbfrz6fP33qf1Fyx9Xn
z798+jj8Fp48f355+eTZY34Yrurkkjq6nH91xOQ6ev7i+uL5s/nTI9YcMdcD
tETmXAg3Nq3tgV1Np2CbsrZYwB/wzKPzF//z3ycf6zdv/unlZ+enJyefvn0r
f/z85JOP4Y+7tRU+qKtyK38Cs24VsLU1LY5iylJnpil6kGi4t9PdGo3sGtQK
UPbDr5Ey35zpXy6y5uTjX8kFXHBy0dEsuUg0272y8zATcc+lPa/x1Eyujyid
znf+VfK3o3t08Ze/Bqhr9fTk57/+lUIWukAuzgfifvj7A0Dzm41pt8w/P9Jp
CaJm8ryFD1ljKBDVbwerE6kFRfTtULSWxaBe6k2d27YiTSQ+Q6KRFluRXxQx
I5oBhBS0lFmgksHNt0vQ7gUyllcZ6Ci1BmQZ1ghPiEJjHSTTa21ZGBFXHKWx
LaEWMDY4MZLZveqI7t6rkTJQHSTQBl8FbL1GcAQk6+pyoOWjgjysgdPxgD3n
vS6AToiEJ24JMGLHtOvXrUVFV+DW0RvrCul6hkADDALCHQ3zxCmBL8Ca3PQ4
iTvwPmRFcHVhOosyBFd6g88ChS35dlNW9llZ0IbR46wtlZCFCAFaExiFCBOR
lXcnWh8quqYu/EjNsCgLQOxwG2xHZpEiogBhPqhr4a0jdV5asBw0a+ZD4FOa
IjEt7uU90Jn3FVkir1Z1UKsTjc5ui7vEq3FEaNGRqvCty0IggIZ3VaRWVINg
n56B9a7WvIkA8AtcN9OWbB9wEZAqw1uvn15pvKmoePGmrGkAm26zBrOxnrHk
mTZbF70lntWgMRdDUaK6rAckJAAb4OhiMSB1KtujZ458IFvM04D1mWytItOk
I0vHhmeBWpaNTI9i1KE2thX+uiNMICg8/AzgrjN/zFo1zNYirukFI7ArMtFg
ZvPSzQhnnaG5304UEXc1tGbH7BKn5ECrggZETqiBlqwGkAWAGp1tjDxaL5XM
xbMqjxE4v0PVX9+RsfcKI7LCYsNvrG1QPhIi6rJYrfs7i//C1pDk2Q0+CaPq
NYBQ2ikYFKEjPsZLD5J0EE4rgdNE8Y4kCLwUmOpWs8KceC1H4gTTookjRBVo
g79qr9uA1XmdRr+KYwTkgHaNAezc2fa2QAxdgZyCfnuFPAesCTSLUIipthmo
TMJsxJ1d71kL7OadBUuK9pMHC9squ+MIATyB0+NxO7WoQYXmCTUITQHMRsbJ
CYuT5hemAPqjpSZ2xAGXCMKAAiraOpO1dQeAoliSe9AnwRHYlAUKDAaOuj1I
rXOaAudBckycxjpLBNGrm6LKygE5wjg+E/xLysPBemZ/1MA4WRgapBLUkAos
TC87ZJ70sq03ieGbBLMn7KBIcaI+o1+CEXLz6oDth84jYrupQTOB75XZHF9x
jkDoHnrbyiNlgphX7IeLR35/xhdYG3Rkr0HGwRED8F91rOMZI+Pc4FaVgz3P
euBfwvQ40E+6XaO5NIsWrPu9DkzWmzf4jrdvwS3g7XEKQ6XMMEn09gHATtxk
AK7DXJkhcZQaww8ZipWwJ3tFfl05qPYSt4d03xKQaYdiGxursl4VmYL9W/N2
s/8LjGXbcotLCovzOw8ch/rCcRi8d4mciDMFtoQ3CXl4NhMGGCMJIFVIDqow
tCLyoEMnxgdYi/e+Q8wRxxrYUGs2YDgbpo/XuyhHJstg4rqpS1T0Y3fJCW6s
KcEs3oI01UAjW90Wbc1BrwnxrSKVi/INZEKTVNYmF36vF7i7KWPvc50I05A/
7Ci3GkDVw5CWRwIFB1CEsWgM1MCjQ/kDo9uR64fg1scbnt+iqrJ3osA9E7Br
TNbToGCHfYxc2xiFtkNVsRZUYYHoW+ho7ROw1iCWZVf7++mWRQvKGUaFQYUe
wHuoQIkQyi80dQR1oqXi5acYkVGhB0Vq16XGwcjY5LxacMUA0xggGGPIMUIH
E5HdECQzt3WRs2qrLBONEK4TawkKZDWpKQ9vGNDoR1s3Ldxj98Sufysu3acf
nz7w/t2nn/wU/pgQhIrEPkJTKn0d+JbAKVXdw0xXpAFBHxmwDlmfIDrU8Hq+
I28qkTfyT53MgZbHlySKAXUHyxUohYUVdUROq1GprYNdD6buzmzxAnBc8RqJ
j7YRWPai4l1ERWPZOSZkL3g03hxbsut0loI+fS/gnvsTtRe8/xg0rgWNu21D
wZqjjgCfEUa8R1yO2hUJpI/kSdse3UcpM2FoHhk23TTdUBJQFFivClm1B+Ao
diHKhJpRQo7xbTHupaXDdio/MfLdF5ZZo8aJeFXJMkDMF15Js5NNhH1jx0OB
0+nehqpp2KCVuFvXtDUbi8mzzslOh1iMXsDBBYnn5ei54ueIApxunennqLNM
uqCiCz7PBNw9Nx9H1JxNDjzmsKBCZEeKNFvj4+sBGHAKkpkTUsT9iyGqGECP
JDEKVtmSYWTRqaHj6e5xaTCC2Nctj7njNkZbhGRQMvCEgbd4HkI+GKm14LyA
6IQBBnGpGD1aYrIE8BI38W/gTS9BamjH0BfAabHEuYnRWPTovc8uHt2fcah1
BGRkJuAise5wnMOYtIfLQGfBOrAbSwAFlgN5KAN/+ctflP5oGv98pN1Pev2H
Pv9I6e/QVPHrTzT85X7Cb/FP/Pm50JWeOzwjeuSlKIpn6IulA+3M6NDPgRn9
Up78VTSj0x+e0TuGfxeNcORpeON7z+jhO2f0Y3ctItL+OcDPH9x/73Pzd+6/
/5ebb9/j5v0kiakS3fwdqdiRSaV73F585P7Dm6/Eexy//V1vBZo/tSswKVRh
4Pih8wYLJLqvG+fPJIZxxvUHTgtJ6GNhf/CZPYtyU2dk0IlZ2QPeMf4ePBQa
7kmAPfxYBtYxo7QEuQCUYcH56JDnmpG6eXOmPwDsPoX1g0ovp6jVOdv1z0eX
AhAk7udsEpmXOJQ0O3orTomL1zkrhhbNBfcM4eMQf4+hmBgbNE13gEoDMMCn
Gr8jYMHRDOn4U28DZvqyDqATk1ET926F8yDVzdqZYwT0pjBWZGp0HHyc6XNZ
wZ+AqElccndRYpMR5WKEIE9XibxgqpEX6iMeOCewk/Y1GrpV8AAtMxEOnduy
QBfUPTPTF5XauyeTsFVsa5FOsK9Db3kkn7EeBQuUM4FipjA2QthJ3p3Mi+xj
EqmlJbJva0p2jMRuz4gwiDeLCCLhzsiKgYLe13emW5aQRJlnlFKI7Q4mkRGg
viCAqtTLBLziK2I3+T04OglkqxGgcFFsEi14E1ABcRm9sTFbct/I691isc2y
KMHrJU+lVMAoFDbA+WTs/AnTHE4tzMlDKFoJ09OalA+jAq2QOBEfLwDBWls5
xwYj3cK/aTCEQsU+5OuUi+cwTJ74TeJ4GHtqjI9HsxTsAj/ens5TFeyvPzpw
/dybkUMW5+B1/+Qh83PwOj4ZWYaP4g/f57riaRH4OYmMEmMEvn564PpDmfnf
+n76+cOBFR68/o9O7Y8PUPWnB67/7B+Z2h5s/j750F/+av/lf1XKIRvACOiU
EClccKx7j9QNPPioYLXMsW/TYsAJrAN4TB1H78Cvm1IqZjfxhM8HRIXvCGhJ
Xk5YiRRcWVPGgxTc1OXfWH+TjgsRStJE+EanjnxiJF5ClyAcvH/q7heEExuX
dEBASzVYsS1hm2v3usRGYCrSUlgXHtGYmOasHtkGrxolCiBKE4ORQArJOsax
JyN2dsN6dkkpBp/UxTTADYfBYAsouaskGBsGYQIzLSlj2k10kqiDKeEEvQEz
CzRflNAbWwuwOxjm6AAv6qJnNLHLHoJDOwaXKiE+5z8wcM3ZeBeQAIPYM4xo
hxKnmFsOvOElxoHO8KgO7GuZc/iE7JLEVhktslmjlIpjCwzCDliLxKGKBBCl
IS3EmpYieBzNy+oafXwTwGewhTsxZV3DGjdASsnLRTHj8c6qHcGKCoWE1VaW
kgCdNRugSAezCek7TniXdpwvpRRO4+NvnkPGNQvpq73bIDadwGOc9+UFzVhb
EM9zkgnlcOjrqt7UQ1c6kjSmBTxTNFyWUDAWXbSAgGBiIkpJ3QLIQ8HzJbK4
tOlB9KOwnuQDKkpyknJNMSq1V34QFrNbYBLIl4pkFFlSuxogZZp408dlF63U
/7pYq0gkhth5JKwgQ63jLkSiKhTGUO7WYUCJn9WsnFXQKCOBDbLqQ6wTySQK
rgMFwNleFdU1Jiku9I9AR2wwxzP2R0B1DC6zM7SUACV1ouJqY6U+qz3zRQub
REshnuwo7TBgjiLJenBw1NsAX6GB6XRb5XEUNSh9x5747jFJKbrpbZuK0apk
B51SRzcLs3kc1IsMGAgbz25dNJ1PkKPnQcbM5fpQwzRD29QdxhGJpVwckCPt
tUgasQVN3OYr62sCb30Nn3eOWXHzXCp2UiJTOsrnCsT37lAkHaz3yWbmW8yZ
U5KSd0Jy40OTU7qAfOFlSeRf21DDqZgBkKst8ygzmazep6w3dVX0dctqmzWY
W47sDs1DmaBihW+BRyz4YK1pC7hMmX7/CVUw+XxgEjTmtc1I9J358UhGbJvL
okesCioQ465dyBpkpuF8PGYwffxcg67vmJGQTN8OlM9BMjgPHetDNmithHvh
JeWA5cNeOTvnCjbl0TZRHmybQJCLkouPkh2Lpcaxktfhvngkt1nBufjII0PJ
bcesPtMXfShNpW2MfWhmvmLjKCs5WyyarD1Xev0lGiGmaQjCUylUa5oi94bc
1dDoHUNKUsQZBOeFcqmNEGNKAoiK7ZZM+36UROmhpjRULXOLpZewuBKFR4k9
jovvFtuAnqKh1nhGiLNRvhbk26HIbmgZmSsDCsxJdK/b4AF33YAc3gchH9ON
Mnmc3NpZxMaAhkHES+uOzk8lCRTak3gCpCip9kLSU0ghGKshTYYhCpbsnWxK
X+Pfncu8SGZK2YIEdxRDQM3OOB3XtUGJzABhRwkXUjAuWuPFVzGWp5egXkpW
QqGeKoOPKFU8SiuNq54kYxeEgMlW1vXN0MTFW4IQrmKcc+0zVZemhzGBTUlr
7EGwEc2AjJ74KZSFDyus1lqQuhO9iyLm8W8Mo1Lu7w44J5QYZpAXyfreAMwM
GMinDMEBcwX9hAm40jng46iWingyTseJmVFSScv8B1SWOJh7h4u4zjzMisry
4iWnBXfBuHQh9x87mGqPgymho4Ph+ff6+Ujt9Z/JGLs6zitvPvd52X/7+x2z
47ExcujnQuSnQmTv5HOskiOFf8cJHB0v6/p4YdojiSicfHo6ezA7nZ08ODs5
ffjxT+n9b/RsNkvy9Pj3d7sE3EPRcIk4Dx98+/eafxSpiCl5FoobmeUktOz4
+pjTGmSEpJAURhiR/swd0pExHH//pPPaXCQCH4635ww9D0YYVKYBDER43Kfv
qYQ4iTPIh9MA1+Jgg3s0fIoCTfVesaROxiIayk8pIsEuEUklBb33CeqeGD4J
eeQD4tEGX2UrFi+aZhRD94EFQmSJIwNq0OWsdnQCoatbAi3eN41wo6uyGFdN
JxFxNUK/3iHtNjVY3nKberwlFll+QcF3F2MPyigmD+NYPBusP/yQAmOPXc0p
jSjHO2kdH354pp/Zux26uCpVpRlk1WRNucQFn6bSPiQbR8syG/JxyWwYW+Mo
Av5250sGivEkVp4MDbqVqGw1FqHJGmGEd/jSuNDzRGVfembAFe7yUAgN4ORS
de9UPU4sJUvsjY4sgN5ng2UkcTCcTYzq9rjIsEW4ASM4OLywa3NbYMVTlJ+I
gniy4svAbzjOHNyrLVbz7V8xOALoEnUyW4N3/xlXSbVR6K2T7qOS2p1lh6pa
0BhY3Y1Ugz2r9wSKJiEiBkiaRaOpe3H5GV3KCq7iYr05Y3UR//2LEBuN1HaP
unrMsbs/2S0I9WIpNPAVXl5IzW4BblS5iZAMvB9fpyZBiS7RPV46J3t43VZr
JBE78TXlzsr06Idb12Tf4ZpRVdeuDiGlteNnUTyK1JS4zhQkSLQZvayt5XgN
ySMME712xH8ITMUjpXMkAkOTUu84aOUThK70G2/zCUtWjuDf5bi5sQ1fomOK
74wS/lEp8Uin7xJDeV/RYOSISsxI0y9NJtnQDmO5wYam1ehjdlC7uUZxfjsp
XnfO0t4a9hRMz1wMsMXCc7Fo4r7vI2hSDyipV6qacDxn+FlQ/aAdYCqc4NfP
/VScVPF4URA7DQCGZah46G2k/kaxtcYVzHdB/KOaVZQ3KRQk0UxLPSZRVb5U
WKyLxBca2WIlmzSq4o5IzgWRpuVMMim1cTkqFrE3HCbHE40fOnSWmo443ODi
2HudKVrjUCWXkngML9gxDXCczbZZSQLmxguLZxUVx1mSgeXcGJuHyBIRa7dD
E5x6EFu1BPbEraFlOrdhHgTRcUXKbeGQhnef5DCXC9Olh6Al0pegwcR19HFz
Lz0uusThF47++zRAkrUndeXiXhKjDyc9iJE5uhqficMjfgXuL9nyeLa84YnV
H9ED9WhZUNDHRrXcOzXufa0kJOp5MhnWKQc5wJlHcQ93rkGMbHr84uBhsHi7
MdJNtVxeitSBtIiomvmLC/2YT3S8aLGSqin3qxq8MS7898qXT01RSYgfgKDm
FanRDLTEmZ7HFHLnNsMYQWELepBIOGOKgbbMVakdh9qzSLxdhQruScFFy2QV
qDxJ8GJkJlCfBUdqfOwE3KpuW2UwhwpDs0FbwkLKMpptrNIxTBSdiljgG6u6
mi7Ar+F0VXREbA2QaRrb8hEvTvVnzs7p+aqq8VAGiyTug9c/ACFWA0XfiwqX
zULnTSSiutw0FMZFPnWx5ljpyfkdQirpmRSPgSjNRaA4Ppm/c3Sst9m64qwD
HX3gdTxpW3jz58K76GXGdsXSp60NR+dyf/ooSh/Cy9e2bFJBY/U/zh9IrLLa
OQ8X6bwPIrASlPs+rg9hdzQO/mwN3yI6t08iokwV0WzjoKqPl/rJoFqJrK6X
eAZkTqwpFDBJRdmRaZKgiW8HOwj/H0irehWq6FAu+FhD1UmluIQI4M15IXbW
0cmvP7NRYiQ6fBQOCEQWW0L+e2ONDtAS5yYLcJVvz/hsHBZSFLmTNDmEJOoz
wB5sz0WQK0oEnglKxSDrJA03M8KVXZPQA4VY1TP/CAk1xUzp6Csjv7pa1FIk
v8tlMx09ndd4kEaB6wZcslq1dKBmfHRf1FNrlzW/bHTGM16NUq9evVJ+SXp+
5trp3MOLf5zfpxswCJ8cTQhxpfiMlpTdIvMMXY+hVXdk4BfudAAmGhV9KlsO
A4xO2Xqmic8VyMkLt2gmoPJJcA5tpzA4nD2gLAJPzh1t4bMwgcP4tB/3PKCI
o+zjOApkcu53QFplA0rTL1t4VLIKfhzM+jlqUY2qSRGlIiOUEVylithlUXE9
bHQAS85c8alYWsCEMzk0XrK9UdYaPmhBLnMXzl5jCy7xtaK3vnkj/cfevuXU
mxwXducUmTb4MPzOE/rZp6c0IS7+zNZ4dsQfLCWgLVvqOk3wkNHRYVJwVNvA
PnOD2S/SC4R+2Whj2SWeuxLeUyJCQcr4gjslFJViiNIcHVsPZ49n2FFI4XFv
ksi6kQotPCcow5GUYoMBphvM+kbyMHTaXBLCiMTA4iJGwyXt9j2LCeZLmyfa
dU9ytMC2Zr4oQr15E3VWo23xtRbhAA6LxyGCkNx7S4rNsKQLmOIKINIh4Qbg
c9cIw9HepX5dzybhE7vAnRctofjiFxZmifAHLzdlJvdKNytYACh9Kxelfxrc
j/KE6ZbpjWuupmSOkjxx59bDYWw5T88RETkp77RYqnmDIqvb1f1w4p7/dMfu
3T387H0Va7kfN4KXeNGYvyPO7ce6gAoxMKCOYXipPkL9thYZpWRsOM1pHO9T
UNvF0GO0FVdBkEaStKP3R7kQX83Rx6LWRMi5C7kvnZyJu5PI7PxRth09Ix0L
nEZBdTWusT90cIEOlMomJ8nLsNVF6s9szGvwlP6cmr0iTQtymrObRCcivL3w
XaNERPjgXipHwvAq7ligkyKg5BPPEII7ZM2SVQUfyB/SHsENkmVEn5KJDDcC
KY3vz5liU9aERhrl+IyDq86yZoPRwBp7feFknj69lCMk3FgnT5gqVpVEmCm9
VjnR9yYXlAI5uTUQdsNnKeYXvHGdHU1QDm3zuYWIKy/nX2H3FSz4MZ4xJNkt
DRTksMh1lHNNlVqqBvya4jYiPLDyXmwSGUFDKR7NTpDGuKOhSYMj5bc33lx3
GPID6msG/Ofaqb7wndY4/RFqoXCpoSmcooM23EF2aTJfQ4WxQjrQgHq7r3Oz
/f6v/+E08Px07mMfl9iEgyLY9nWv/IH6e9jKDR4x7TsbTAAHI0ltLocsZF8i
31TttJUIPSkoDVZT643b2oXA0XIMbYbhpi5EVTzxwSl4DZvMUFZ6xUhotgRT
TBhyXd8RPbmChSMpsbuc9HdSeDdV/NzVVFWUF6tNF3UL6S2drZGNEZaWgy/w
kls87eQGPNNX0Xvwo9hP5wwCNeGALZhQuzyfNMAj1q33Dt0hVj6JhA46xcbM
ncEuUYZqBgEOOaKiQXRUBTwB2h91W49pD8DBwMENVj2EWEDavu/7v/4nvp72
Qv2e8VlUX/XV93/9r/t8lRAPDOU6FFC27zUHUcRVpuwBxuBmnPEJLcTml799
AYv+7fX1RD+bX19N9BdmeWMY9hEhHoPHODRYlNXEheoq1LoEX9rySSw62YeR
i8WfMFVERWviocFwLhRHEEyBrcJEHfxvouV3INqWnsFfwgVaLDgBVGcDMyI+
XAyIbhxLKj7kDK+Jiuqx+KtGX2RtJY5Le8dIPRyPo0YADYXuMPm0tx8axe6w
nOksFqexvHCDw9BnzGWmEn4XHSiKzXd0AfTXDD1lylaY38amTVJ47ZNRS1NN
4b5j/H9ReYjE7H++RqatVuzV+l6PkXZ6hPkRjpqF6SQtHMVT2i+eo+NwhfSy
i3zqzE9BkscvRd28dOrmHHOVpc8cX44Cebxp0YbljgfJKWMPOfQoIWOHuU9/
dFx6YFy4EEnBvXK8+68yNwEss3dH0xle8QjItEuQJznTJi5OBBRYWUuZJgp9
g4VesqksZk8jgXze5sSm6XIpXIQBETr+z3SkeJs0y5KQSyzZO4tHK59hC6Zc
5CAgIwpQslzGGo8aDL3GnIWLHOJs05Db/m3BibLETaifAItpDjrZ12JN1MZQ
LSEoH3Q9igx7A4G2x3J8QzCNdJIQEFQmsLKclMQGHdLjrseqC+pvNNJdV15U
CHdEfUJxylchWJp0SdL37Gw1A3URn9VRAilseywoxD9zn6UmcL0PHGXAmsuh
jFO1mN+jB5XPxgD7LEx2g1UNnW8mFjc1DVjVFezALDt+a7eGd+QqZaY0xx2n
o3HdT5LyEGrH6VLWqLjxGAL7jArV1I3lo8LI6gQa8d0TgR/YV8uHqyWaFYWr
2CdWcc8MLHVuQ+KCO/ME9Cn9Y6dc5ncoI472llpfBVThAzlJY8vORgom6VBJ
vSowCDBRcQ+3lBHixHHaOms3K87yOdlpjZomMATrCPrYh8u60JtLWm6Ls1+5
Xjm+7dOB5xnY+e6HcOOob5gKZIsiMD51n3a1cz3ddg+kkSEh85VEWtB47bGH
0qxs1NlJ8gzUwnNaFjdYMB/vQDAzB+jvu9BMohZG0rrL76wXJmQwn/edOuz7
rjIfDORHzamIK6SHX5qSk0idxORIbqS4OOSpxUAsYX1lYVpFjUsdJeNCn6Gi
NqG4ne7gfWDNiSii+AqKWaKvwoe+EmhfNzXsWpk7aZxwMB00Fg8Ydz9Fb25J
63ZnopNNX3FCx7m8oh/Q+6TqdmmgtbAVEIk0LoUjpMPaoVZaO7H+paUDIi7B
goVpn8klNVL4SFlR8KTriZmc4OCMiPaB2TZcdJRU4nvWJ6fanawPrO/csdCx
m8uZAPjRbnrquS5PvsVbWZpFLUFIT1nB24FX9bVjbrKwzgjgsUc5ShTW4KOe
Pj8LVoFEBdxZWFBpfVNaSfmgVQYMQUAS7lu7Vg7FhoSS7Bh7cv6EfLaN7Ivl
VuvpV4Z4Wofer7LJl0+vRKu7PVbUP3Jcroh7w6q9LEcwy1W9S9PZUW4E1ht1
OcrYIY7qabjLBC/Au8mPCKB01DR5FcoTXf+QPPTrTlIJ1DnT8JGc0EeKpXs8
dqRiYauo3dW2cZhk3NNSSaDapV35tQ2AOjrO6lLq0bE6UUqYVnAI1kr7OH8Y
x3/1A9MMKEKEYcVyLNqkLBYtxcKla4VQJKqyJAZKspfoonl1IgrQRUZCGEMd
IgwLA6p/6pjCVYwUshL3MT4FwtME+zAsOhcjpfSs3xTAtBiLFO/HdYcflfwE
10u6RgZzG0BUQBiehnGpflJIE8lgrMKJb6TSzVcniQqZiKvt6i1i7BF3zpPS
ui4cfQahGLUkNjl6Pl3UsDLRoa7+ICpZdMiN+2JH6nW3eJEFDlgvkwwlFeZy
qEu0my8pe8TKnZ1U/61CkZGkXFIAYAK/RpArLV9K+puGSOhuFdDusVukCLmU
z0Pr42DoOMgJ9zWRZRPZ82ibrdooljvVT5whKPELJuR8DxB5QN83jr/GddQy
CmqikrSo9zdjQzGJbElkJepqr9UNzVdmvhhmufWSS2VLO19uIEo4RIat+14a
aoeKBAenDGOPPTBNx5lOjxTaejF0/biru0v08Qap3aOp+EVJvsckJxqa+s7S
YRnh2h/s2c7thl1tBcqrJO8R+aPzx5PnHCdVU0zjbkD4NyuMUJQjSXSHLF2K
RHkAmEuxVNIveV8D7nFVni8zg/1q0EH15UPsHNI6d2tkBJWBrhkoAe7KvOJ8
J1CAjjsndYWjs+OhqJjmL3n4Eg+IbSm1lHbGdg7GhiWkpiNWyyAIUZefeweS
IZOQ/kCPiug+iYL2xyGxdGO3rnUxfvdDldN0eGumdFKUrGkHVgKz/ZxIdVsZ
1e/SwbyNb8Xtk6Fx4AV1EbG0zyNejc1TYuTF9R+bqvs+a0VNBqk/bEvfZSIN
f6lhmQ8nSNOJlnwm7CNGmm2v/0Qq6kuC+9//27/zb8kVhrQo32we4ruiS/Lr
vcQJuM8Hyy3FUB3z5xYD7eScUkcKn4MRdSu2WEo56Gt53HHXHryaKuonJYuQ
fOsb2PwbYNe3szcy4tvpG3nrW06CPuGI9Zn+TYGVQQJRFsNSy7P6lQS1/yhD
vEqyLa+uQZO/IlkKhH8loxJV6J9Xk/QiEye6yhfkXpVe9TdTslSIkXvyEQ0I
+dHWjaY7wwlOdyb0Pjf6jX7XndHE3+tOGZRVI0JljeY+d/Uf0ZL4aIXk4Ooq
si7YCJzJ39nVhtLikuJFta6D7ogPjukLvgWwBCh1I7fFOquiPqRBs7zKvi6+
eSWEpfz91w++Oc6+PsF/TvGfh98wF0WnTzHI4t8dJe7c0hawlo3t9o44fb+9
S15cSJl3qOfYFrYkDZaTkc3AOMaqVY6ESNo5KtYAKBsUky8vtjQXEa9Rp3wq
7fNJSCmGCsF1zDe4OrLdY0FRmnyW1spSyo+CJhxwYaAzqgxOujGii+ZKiRyh
aWK/YDeB/D/yJrb+9AwH43ab2tDRbSBbvYlK9DqXDqbQO0UeCb44YVQ+ADIs
wuGXxBnxzhAHOGN2J9iPskNGHxuFU/cI/1VNhoMDE2+y2RwnPkJa5uyhL8lF
+IIFYHc837LGg5iPXWeejiJjEgag03xT7OSCxRM9oRRhCR5jRk2frJxrSWoj
4sqHSPR06q3PuTO4fCFHVNWt6atKpoAmG7aT8l7fB4WwrmDvKNBqcni6Lzqm
Lje+4C9+02HmEayKsCnGlQV5ewfbf9MWJqtzF5q1d367GpcycoEMhZ96a0/K
ayayGUNfhJbIiRGH4uC02YI59307CKFMtXtuLo2K+kJDR/Q0KU7atjW4ES4o
4bwXF4ZQ/wtcKug3fHYAAA==

-->

</rfc>
