<?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-rfc2629 version 1.5.25 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-spinella-event-streaming-open-network-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.0 -->
  <front>
    <title abbrev="ESON">Event Streaming Open Network</title>
    <seriesInfo name="Internet-Draft" value="draft-spinella-event-streaming-open-network-02"/>
    <author initials="E." surname="Spinella" fullname="Emiliano Spinella">
      <organization>Syndeno</organization>
      <address>
        <email>emiliano.spinella@syndeno.com</email>
      </address>
    </author>
    <date year="2022" month="January" day="27"/>
    <area>TBD</area>
    <workgroup>TBD</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes the vision, architecture and network protocol for an Event Streaming Open Network over the Internet.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://example.com/LATEST"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-spinella-event-streaming-open-network/"/>.
      </t>
      <t>
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/syndeno/draft-spinella-event-streaming-open-network"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Society is rapidly digitalizing and automating the exchanges of value that constitute the economy. Also, considerable time and energy is spent to assure that key transactions can be executed with reduced human involvement with better, faster, and more accurate results. In this context, Event Streaming can play a key role in how the economic system evolves.</t>
      <t>However, most of the application layer integrations executed today across organizational boundaries are not in real time. Also, they currently require employing a variety of formats and protocols. Some industries have adopted data formats for exchanging information between organizations, such as Electronic Data Interchange (EDI). However, those integrations are limited to specific use cases and represent a small fraction of all demanded organizational integrations.</t>
      <t>Thus, there is no consistent and common consensus on a mechanism for the exchange of events across organizations. This results in a completely custom landscape for each real-time cross-organization integration. In this scenario, development teams must invest plenty of time into understanding and defining a common interface for events exchange.</t>
      <t>In this context, we can now introduce how this landscape could change with the introductiopn of an Event Streaming Open Network over the Internet. When needing to connect real-time event flows across organizations, developers would have a common basis for finding, publishing, and subscribing to event streams. Also, given a set of standard formats to encode and transmit events, developers could use the programming language of their choice. Overall, this set of standards would drastically reduce the cost of real-time integration, which would also enable experimentation by users.</t>
      <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>
    </section>
    <section anchor="an-open-network-for-event-streaming-over-the-internet">
      <name>An Open Network for Event Streaming over the Internet</name>
      <t>In this section, we will argue how Internet standards are developed and why this could be the case for an Event Streaming Open Network.</t>
      <t>An interesting example of this phenomenon is the case of ISDN (Integrated Services Digital Network), a set of communications standards for the transmission of voice, video, and data over the PSTN (Public Switched Telephone Network) developed by the ITU-T (Telecommunication Standardization Sector) in 1988. ISDN pretended to use the existing public telephone network to transmit digital data in a time when the Internet connectivity access was not as broadly available as it is today. The main competitor of this standard was the incipient Internet itself, which could be used to transmit the same data.</t>
      <t>The Internet alternative needed a protocol to support the same services offered by ISDN, which was initially developed by the conjoint effort of the academic and private sector. Consequently, in 1992 the Mbone (Multicast Bone) was created. This project was an experimental network backbone built over the Internet for carrying multicast IP traffic, which could be used for multimedia content. After some important milestones of this project, the SIP (Session Initiation Protocol) was defined in 1996 and was published as a standard protocol in IETF's <xref target="RFC3261"/>. The reality today is that SIP has completely won the standards battle for multimedia transmission over the Internet, and ISDN usage has been on continuous decline.</t>
      <t>As for Event Streaming, we see a similar scenario set-up today. There are currently several open specifications and implementations for Event Streaming, like AMQP (Advanced Messaging Queueing Protocol), supported by RabbitMQ. However, while AMQP can be used for several purposes, Kafka Protocol specializes on Event Streaming Processing and its specialized features make it more convenient than RabbitMQ (i.e. ordering).</t>
      <t>In the case of an Event Streaming Open Network over the Internet, if we guide ourselves by the history of the most widely adopted protocols on the Internet, the governance should be similar to that of the WWW or Email. Both the WWW and Email have open specifications as well as open-source implementations. We can mention the Apache Web Server as an open-source implementation of the HTTP protocol; Postfix for SMTP; and Bind for DNS. Nevertheless, the governance for these protocols' specifications relies on the IETF.</t>
      <t>In order to define the characteristics of an Event Streaming Open Network, we will focus on the definition of shared and openly accessible infrastructure. First, we will review the principles of Free, Open &amp; Neutral Networks and why they should be followed for an Event Streaming Open Network. Then, we will show how DNS complies with the criteria to be considered an infrastructure resource. Finally, we will demonstrate how this is also true for Event Streaming.</t>
      <section anchor="free-open-neutral-networks-fonn">
        <name>Free, Open &amp; Neutral Networks (FONN)</name>
        <t>The main principles of a Free, Open &amp; Neutral Network are:</t>
        <ul spacing="normal">
          <li>It is open because it is universally open to the participation of everybody without any kind of exclusion nor discrimination, and because it is always described how it works and its components, enabling everyone to improve it.</li>
          <li>It is free because everybody can use it for whatever purpose and enjoy it independently of his network participation degree.</li>
          <li>it is neutral because the network is independent of the contents, it does not influence them and they can freely circulate; the users can access and produce contents independently to their financial capacity or their social condition. The new contents produced are orientated to stimulate new ones, or for the network administration itself, or simply in exercise of the freedom of adding new contents, but not to replace or to to block other ones.</li>
          <li>It is also neutral with regard to the technology, the network can be built with whatever technology chosen by the participants with the only limitations resulting of the technology itself.</li>
        </ul>
      </section>
      <section anchor="non-discriminatory-and-open-access">
        <name>Non-discriminatory and open access</name>
        <t>Services such as DNS, the World Wide Web and Email do not discriminate and are open-accessible. Basically, people and organizations can access these networks as long as they can register an Internet Domain and host the required server components. Nowadays, there are alternatives to avoid having to register a domain name to have a web page or an email, such as Cloud WordPress Hosting or Gmail. However, we will focus on the network participants that provide services to end-users.</t>
        <t>In the case of Guifi.net, we can highlight how this principle has been adopted in the fact that everybody can take part in the project without discrimination. Moreover, an emphasis is made in easing the participation of the disadvantaged collectives, with less resources or less opportunities to access information technologies, telecommunications, and the Internet.</t>
        <t>An Event Streaming Open Network should provide resources in a similar way than the most widely adopted Internet Services. Thus, individuals and organizations must be able to register Flow address spaces for which the existing DNS infrastructure could be leveraged. Moreover, the specification of the protocols that implement the Metadata and Payload formats must also be openly accessible.</t>
      </section>
      <section anchor="open-participation">
        <name>Open participation</name>
        <t>Internet Services like DNS, WWW and Email provide individuals and organizations with different ways of participation. First, anybody can obtain the protocols' specification and build a custom implementation, which would result in a new product compatible with the protocols. Secondly, anybody can register a domain name and set up servers using compatible products. Thirdly, anybody can join and participate in the IETF, the institution that governs the specifications for these protocols.</t>
        <t>As for Guifi.net, not only anybody can extend the network with new nodes but also can also participate in existing projects of network extension. Also, the participants can add services on top of the network such as VoIP, FTP servers, broadcast radios, etc.</t>
        <t>Regarding active participation on an Event Streaming Open Network, we can highlight the possibility for individuals and organizations to expand the services provided by the open network. This extensibility could be made possible by different uses of the event payloads and will vary significantly depending on the sector. Since we have already proved how Flow is an infrastructure resource, innovation would play its part and its results would be materialized in services expansion.</t>
        <t>We can conclude that the same kind of openness of DNS, WWW and Email is necessary for an Event Streaming Open Network. Anybody should be able to obtain the specifications to build an implementation of the service. Also, since it should leverage the DNS infrastructure, anybody would be able to register Flow address spaces. Lastly, the specification could be governed by an institution such as the IETF, due the dependency of Flow with other Internet Services governed by this institution.</t>
      </section>
      <section anchor="open-access-infrastructure-resources">
        <name>Open Access Infrastructure Resources</name>
        <t>The literature about Commons Infrastructure (Frischmann, 2007) defines a set of criteria to evaluate if a resource can be considered an infrastructure resource. This analysis is relevant since it can provide some arguments to prove the need of an infrastructure of commons for Event Streaming, which could then be materialized in an Open Network for Event Streaming. The demand-side criteria for evaluating if a given resource can be considered as an infrastructure resource are:</t>
        <ol spacing="normal" type="1"><li>The resource can be consumed nonrivalrously.</li>
          <li>Social demand for the resource is driven primarily by downstream productive activity that requires the resource as an input.</li>
          <li>The resource is used as an input into a wide range of goods and services, including private goods, public goods and/or non-market goods.</li>
        </ol>
        <t>First, a nonrival good describes the "shareable" nature of a given good. Infrastructures are shareable in the sense that the resources can be accessed and used by multiple users at the same time. However, infrastructure resources vary in their capacity to accommodate multiple users, and this variance in the capacity differentiates nonrival resources from partially rival resources. A nonrival resource represents those resources with infinite capacity, while a partially rival resource has finite but renewable capacity. As an example, Broadcast Television is a nonrival resource since additional users do not affect the capacity of the resource. On the other hand, natural oil resources are completely rival since its availability is limited and it is not renewable. In the middle, we have partially rival resources like a highway, which may be congested. This last characteristic is also true for the Internet since it supports additional users without degrading the service to existing users to a certain extent.</t>
        <t>Secondly, infrastructure resources consumption is primarily driven by downstream activities that require this resource as an input. This means that the broad audience consumes infrastructure resources indirectly. For instance, highway infrastructure is used to transport every kind of physical good which people and organizations purchase. This facilitates the generation of positive externalities for society through the downstream production of public goods and non-market goods. These positive externalities might be suppressed under a regime where resource availability is driven solely based on individuals' willingness to pay.</t>
        <t>Regarding willingness to pay, it is relevant to analyze this factor more exhaustively. Frischmann states that if infrastructure access is allocated based on individuals' willingness to pay the potential positive externalities of that infrastructure might be stifled. Thus, infrastructure resources behave differently than end-user products: if the former are made available solely based on the end-user demands and willingness to pay, those needed infrastructure resources might never be made available. As an example, we can mention that if airports were built based on individuals' willingness to pay for them, they might not even be built. However, individuals are willing to pay for the airport's downstream activities, such as purchasing a flight or consuming air-transported goods. Then, a whole set of positive externalities are generated by the existence of an airport in a city.</t>
        <t>In the third place, infrastructure resources are used as input for a wide range of outputs. This criterion emphasizes both the variance of the downstream outputs and their nature. Thus, the infrastructure resources possess a high level of genericness which enable productive activities that produce different goods with high variance. If we consider how an airport complies with this criterion, we can mention that not only airports serve individuals that need to travel by air but are also used to transport many kinds of physical goods. These goods then enable other activities throughout the downstream value chain. Then, the output variance of the activities that take airport infrastructure as input is significantly high.</t>
        <section anchor="open-access-dns-resource-example">
          <name>Open Access DNS Resource Example</name>
          <t>Now, we will provide as an example how DNS complies with these criteria and why it can be considered an infrastructure resource.
1. DNS infrastructure is a partially rival resource because individuals and organizations can register domains in the Domain Name addressing space. It is partially rival because not every actor can acquire the same domain name. However, the access to registering domain names is open and non-discriminatory. Moreover, DNS is also prone to congestion, which emphasizes its partially rival nature.
2. DNS infrastructure demand is driven principally by downstream products and services. An average Internet user is not paying directly for this infrastructure, but all the Internet services the user consumes pay for DNS infrastructure. This is true for all the Internet services due to the ubiquitous nature of DNS infrastructure.
3. All Internet services take as input DNS infrastructure and produce a broad variety of outputs, which then generate positive externalities to society as a whole by means of private goods, public goods and/or non-market goods.</t>
          <t>We can conclude that DNS complies with Frischmann criteria for being considered as an infrastructure resource. The resource is represented both by the domain name that can be and by the querying capacity of DNS servers.</t>
        </section>
        <section anchor="flow-event-streaming-internet-resource">
          <name>Flow: Event Streaming Internet Resource</name>
          <t>In this section, we will describe an Event Streaming Internet Resources. For this, we will consider the previously described guidelines for FONN as well as the characteristics of DNS as a resource. This Event Streaming Internet Resource shall be refered to as "flow" from now onwards.</t>
          <t>To begin with, we need to define what elements could be considered as infrastructure resources in an Event Streaming Open Network. First, the resource must be capable of delivering streams of events to consumers. Secondly, it must also permit producers to write events to the stream. Thirdly, each stream must be identifiable (i.e., URI) and able to be located (i.e., URL). From now on, we will use "Flow" to refer to the infrastructure resource of an Event Streaming Open Network.
The first Frischmann criterion requires the resource to be consumed nonrivalrously. Complete nonrivalrously for any Internet Service cannot be achieved due to the possibility of congestion and potential unavailability of different elements of the network. The same would be true for a Flow resource. Moreover, the public naming addressing space for Flows would be limited to the same level as that of domain names.</t>
          <t>We will continue now with the third criterion. To illustrate the potential of Flow being used as inputs for downstream activities, we will refer to Urquhart's vision for Event Streaming. He lists two areas in which significant changes can happen:</t>
          <ol spacing="normal" type="1"><li>The use of time-critical data for customer experience and efficiency. This is driven because today's consumers are increasingly expecting great experiences, and organizations are almost always motivated to improve the efficiency of their operations.</li>
            <li>The emergence of new businesses and business models. Businesses and institutions will quickly discover use cases where data processed in a timely manner will change the economics of a process or transaction. They may even experiment with new processes, made possible by this timely data flow. Thus, flow resources will also enable innovation. These innovations are responsible for generating positive externalities.</li>
          </ol>
          <t>Then, we have demonstrated why Flow resources can be considered as infrastructure resources using Frischmann's Demand-side Theory of Infrastructure. These resources can be managed in an open manner to maximize positive externalities, which basically means maintaining its open access, not discriminating, and eliminating the need to obtain licenses to use the resources. Consequently, managing infrastructure resources in this manner eliminates the need to rely on either market actors or governments.</t>
          <t>Lastly, the adoption of an Event Streaming Open Network implies taking Flow resources as inputs for productive activities. These inputs would then be used downstream to generate private goods, public goods and/or non-market goods. Additionally, we can assure that most of the consumers of Flow would not directly consume Flow resources. They would consume the outputs of downstream activities that use Flow as input. Again, the consumers may not be willing to pay for Flow resources directly.</t>
          <t>We can conclude this section mentioning that an Event Streaming Open Network would enable one infrastructure resource called Flow. The access to this resource can be managed in an openly manner: maintaining open access, not discriminating users or different uses of the resource, and eliminating the need to obtain approval or a license to use the resource.</t>
        </section>
      </section>
    </section>
    <section anchor="necessities-for-an-event-streaming-open-network-over-the-internet">
      <name>Necessities for an Event Streaming Open Network over the Internet</name>
      <t>In this section, we will describe the main needs for the broad adoption of Event Streaming. The focus will be made on detecting and describing the missing capabilities that could not only enable but also accelerate the event data integration among different organizations. The different necessities detailed in this section will serve as input for an architecture design.</t>
      <section anchor="necessity-1-event-streaming-internet-resource-public-registry">
        <name>Necessity 1: Event Streaming Internet Resource Public Registry</name>
        <t>A public registry of an organization's available event streams does not exist. We will argue in this section why this is the core component that an Event Streaming Open Network can provide.</t>
        <t>Nowadays, when an organization needs to publish an event stream or event flow, they usually follow some form of the following steps:</t>
        <ol spacing="normal" type="1"><li>Develop and deploy a producer application that writes events to a queue.</li>
          <li>Create all necessary networking permissions for external public access to the queue.</li>
          <li>Inform the remote user the access information (i.e., Hostname/IP, protocol, and port) together with the required client details and technology for accessing the stream (i.e., Apache Kafka Protocol, RabbitMQ API, etc.).</li>
          <li>Create credentials for consumer authentication and authorization access to the queue.
5.Develop and deploy a consumer application that reads the queue.</li>
        </ol>
        <t>Now, we can compare this process to a simple email interaction:
1. Sender opens a graphical Mail User Agent application and sends an email to an email address formatted as user@domain.
2. The message is sent to an SMTP server that routes it to the destination SMTP servers for the given domain. Once received, the message is put into the user mailbox.
3. When the recipient checks its mailbox by IMAP or POP3, the new email is transferred to the Mail User Agent.</t>
        <t>In these two scenarios, we can see that the information needed to be exchanged offline by the actors is completely different in size and content.</t>
        <t>First, in the case of email, there is a shared naming space given by the Domain Name Service (DNS). The email format has been standardized by the IETF in <xref target="RFC5321"/>, section 2.3.11. Thus, there is a common naming space that is used for referencing mailboxes in the format user@domain. Thus, the offline details communicated by the peers is only the recipient email address. There is no analogous standard nor an open alternative for Event Streaming.</t>
        <t>Therefore, in the case of Event Streaming, users need to perform plenty of offline communication to agree not only on the technology to use but also on the queue to use. For instance, two organizations may be currently using Apache Kafka and need to share an event stream among themselves. The organization having the source of the stream should provide the following details to the consumer organization:
* Bootstrap servers: Fully Qualified Domain Name list of the Apache Kafka brokers to start the connection to the Apache Kafka Brokers. Example: tcp://kf1.cluster.emiliano.ar:9092, tcp://kf2.cluster.emiliano.ar:9092, tcp://kf3.cluster.emiliano.ar:9092
* Topic or Queue name: name of the topic resource in the Apache Kafka Cluster
* Authentication information: User and password, TLS Certificate, etc.</t>
        <t>In the case these organizations were not both using Apache Kafka, the use case cannot be simply solved without incurring in development or complex configurations as well as adopting proprietary components.</t>
        <t>We can conclude that an Event Streaming Open Network should provide a global accessible URI for streams in a similar fashion than email, to reduce offline developers' interactions. This means being able to name event streams in a common naming space like DNS, as well as providing a mechanism for users to discover the location and connections requirements.</t>
      </section>
      <section anchor="necessity-2-establishment-of-a-user-space-for-events">
        <name>Necessity 2: Establishment of a User Space for Events</name>
        <t>Another need for broad adoption is due to the inexistence of a common and agreed user convention. In the general literature, we cannot find reference to the types of users that would consume or produce events to and from an event stream.</t>
        <t>In this sense, it is also appropriate to consider the email use case. Basically, an email user only needs to know the email address, the password, the URL of a web mail client or the details of IMAP/POP3 server connection. Once the user has this information, it's possible to access an email space or mailbox where the user can navigate the emails in it. Also, IMAP provides the possibility for the user to create folders and optionally share them with other users.</t>
        <t>There is no analogous service currently available for Event Streaming analogous to the email case. This means that the user concept in Event Streaming is limited to authentication and authorization. Thus, the user does not have access to a "streambox". The result is the impossibility for a person or an application to possess a home directory containing all the streams owned by the user.</t>
        <t>As a conclusion for this section, we can mention that it is necessary to embrace a user space resource for Event Streaming. This resource should not only solve the users' motivations and requirements but also reduce the offline verbal communications and custom development dependencies. In the next sections, we will refer to this component as the Event User Space Service.</t>
      </section>
      <section anchor="necessity-3-an-agnostic-subscription-protocol">
        <name>Necessity 3: An Agnostic Subscription Protocol</name>
        <t>A third need for wide adoption is an agnostic protocol to manage subscriptions to event streams. For this need to be solved, it would be necessary first to count with an Event User Space Service. Then, in case a user has created a stream and wants to enable public subscriptions by other users, there is no general protocol to inform other parties of this subscription intention nor its confirmation.</t>
        <t>The result is the inability for the users to seamlessly subscribe to an event stream. They either must employ protocols like MQTT or, in the need of employing other application protocols like Apache Kafka, hardcode the subscription details in the different software implementations. This means that there is no general subscription protocol for Event Streaming that is agnostic of the application protocol employed. This protocol implements both the Metadata Payload Format and Payload Format.</t>
        <t>A good example to illustrate the difference between a control protocol that implements a Metadata Payload Format from a payload protocol that implements a Payload Format is how SIP (Session Initiation Protocol) works with RTP (Real Time Protocol) to provide VoIP capabilities. The former is a control protocol that initiates and maintains a session or call while the latter is the one responsible for carrying the payloads, which in the case of VoIP it would be coded audio.</t>
        <t>Consequently, a similar definition of protocols could potentially mitigate this limitation for Event Streaming. If a protocol can be used to establish and maintain the subscriptions relationships while another different protocol is used for the events payload, all the current application protocols implementations could be supported.</t>
        <t>Additionally, by counting also with an Event Streaming Public Registry, it would be possible to provide URI for streams in a similar way as email works with the "mailto" URI. For instance, in web pages one can find that email addresses are linked to mailto URIs which, when clicked, open the default email user application (i.e., Microsoft Outlook) to send an email to the referenced email address.</t>
        <t>If a user counts with a user space or streambox, then a user application like an email client could provide access to it. Then, if the user clicks on a link of a stream URI (i.e. "stream:myeventflow"), the streambox application would open and subscribe to the given stream.</t>
        <t>Currently, the Metadata Payload Format as well as the Payload Format are both provided by the queue or log application protocol. In the case of Apache Kafka, both formats are implemented within the Apache Kafka Protocol. This introduces a barrier for interoperability among different technologies, meaning that flows of event data cannot be seamlessly connected, without relying on custom development or proprietary software licensing.</t>
        <t>We can conclude that there is an actual need for an open specification of an Event Subscription Service for event streams, which implements what Urquhart calls Metadata Payload Format. This specification could be materialized in a network protocol that introduces an abstraction for the event queue or log technologies implemented by different organizations.</t>
      </section>
      <section anchor="necessity-4-an-open-cross-sector-payload-format">
        <name>Necessity 4: An Open Cross-sector Payload Format</name>
        <t>Currently, the different implementations of Event Streaming combine both the Payload Format with the Metadata Format. This means that the same protocol utilized for payload transport is used for subscription management.</t>
        <t>When a producer intends to publish events to a queue or, using Apache Kafka terminology, when a producer intends to write records to a topic, first it needs to initiate a connection to at least one of the Apache Kafka Brokers. In that initial exchange of TCP packages, the producer is authenticated, authorized, and informed with topic details. This set of transactions would belong to a protocol that implements a Metadata Payload Format. Afterwards, when the Producer starts writing the events to the topic, it encapsulates the event payload in a Kafka Protocol message. This latter behavior makes use of a Payload Format. Thus, we can observe how both theoretical formats are coupled in a single protocol. Similar behavior of a coupled Metadata and Payload Format in one single protocol happens also in AMQP, MQTT and RabbitMQ.</t>
        <t>As for the consumer, the behavior is the same with the difference that the initial intention is to subscribe to a queue or, in Apache Kafka terminology, to consume records of a topic. Then, a set of TCP packages encapsulating the Apache Kafka protocol authenticates, authorizes, and informs the Consumer with topic details for consumption. Afterwards, the consumer can start polling for new records in the different partitions of the topic. It is worth mentioning that the consumer needs to implement more queue management logic than the Producer, especially when multiple replicas of a consumer type are deployed.</t>
        <t>If we focus on the Payload Format, there is the need for an implementation-agnostic payload format suitable for Event Streaming. In this sense, CloudEvents project of the CNCF proposes a specification and a set of libraries for this purpose. The goal is to use CloudEvents specification as a Payload Format regardless of the Payload Protocol being used. For instance, we could transmit events in the CloudEvents format using the Kafka or AMQP Protocol.</t>
        <t>The general structure of the CloudEvents Payload Format includes a standardized methodology to include event data in an event message. For instance, instead of defining a customized JSON structure for sending the events of temperature changes measured by a device, a CloudEvent object could be used. Temperature could be included as an attribute in the CloudEvent object.</t>
        <t>We can then conclude that while there is no current protocol candidate that implements the Metadata Format, CloudEvents is a good candidate for the Payload Format needed in an Event Streaming Open Network. In this way, the different CloudEvents libraries made available in several programming could be leveraged.</t>
      </section>
    </section>
    <section anchor="event-streaming-open-network-architecture">
      <name>Event Streaming Open Network Architecture</name>
      <t>In this section, we will describe the overall architectural proposal for an Event Streaming Open Network. This description will include the different actors in play, the software components required, as well as the network protocols that should be specificized.</t>
      <section anchor="architecture-overview">
        <name>Architecture overview</name>
        <t>In Figure 1 we illustrate a high-level overview of an architecture proposal for the Open Network.</t>
        <figure>
          <name>Figure 1</name>
          <artwork alt="High-level overview of the Event Streaming Open Network" type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure1.svg"/>
        </figure>
        <t>We can identify different Network Participant (NP) in Figure 1 represented by different colors. The different NPs act as equals when consuming or producing events as part of the Flows they own. All of NPs implement the Event Streaming Open Network Protocol, which Is described in the next chapter.</t>
        <t>In the diagram, an initial flow starts on the orange NP to which a user in the blue NP is subscribed. After processing the events received in the first flow, the results are published to a new flow in NP blue, to which the orange NP is subscribed as well. Now, the green participant is subscribed to the same flow, enabling downstream activities across the rest of the network participants.</t>
        <t>It is possible to observe how the high-level architecture allows sharing the streaming of events across different network participants and their users. Also, there is also the need for security, in order to allow or deny the access to write to and read from flows.</t>
        <t>Regarding security, the architecture considers the integration with an Identity &amp; Access Management service, which could implement popular protocols such as OAuth, SAML or SASL. However, the network should also enable anonymous access in the same way FTP does. This means that a given NP could publicly publish flow and allow any party to subscribe to it.</t>
        <t>For example, nowadays the Network Time Protocol (NTP) is used to synchronize the day and time on servers. There are many NTP servers available that allow anonymous access, meaning that the service is openly available. The same must be considered for the Event Streaming Open Network.</t>
        <t>Additionally, the NP must be able to expand the capacity to support any number of flows, as well as extending the network with new services. Not only NP must be able to include any given set of data within events but also, they must be able to build applications and services on top of the network by employing the architecture primitives.</t>
        <figure>
          <name>Figure 2</name>
          <artwork alt="Event Streaming Open Network Architecture components" type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure2.svg"/>
        </figure>
        <t>Now, we provide a brief description of all the components that appear in the diagram of Figure 2. In the next sections further details of the components are provided.</t>
        <ul spacing="normal">
          <li>Flow Events Broker (FEB): a high-available and fault-tolerant service that provide queues to be consumed by network services, by users, and their applications. An example of an Event Queue Broker can be Apache Kafka, AWS SQS or Google Cloud PubSub. The payload format implemented by these tools are what in 3.1.4 we called Event Streaming Payload Format.</li>
          <li>Flow Name Service (FNS): a DNS-based registry that acts as an authoritative server for a set of domain names, which are used to represent flow addresses in a flow namespace. These domains contain all the necessary information to resolve flow names into flow network locations. This component refers to what in 3.1.1 we named Event Streaming Registry.</li>
          <li>Flow Namespace User Agent (FNUA): an application similar to User Mail Agents like Microsoft Outlook or Gmail. This application provides access to flow namespaces to users of the network. 
The definition of this component implies the specification of a dedicated protocol. We will refer to this protocol as FNAP (Flow Namespace Accessing Protocol).</li>
          <li>Flow Namespace Accessing Agent (FNAA): the server-side of the Flow Namespace User Agent. This component is the one that must provide convenient integration methods for GUI. This component refers to what in 3.1.2 we named Event User Space Service.
This component must implement the same protocol selected for the Flow Namespace User Agent: FNAP (Flow Namespace Accessing Protocol).</li>
          <li>Flow Processor (FP): a flow processing instance used to set up subscriptions that connect local or remote flows on demand. This component implements the processing part of what in 3.1.3 we called Event Subscription Service. This component will be created and managed by a FNAA instance, and the communication is held through an Inter-process Communications (IPC) interface. Also, this service must implement an Event Payload Format, for which we will mainly consider CNCF's CloudEvents and Protobuf.</li>
          <li>Flow Namespace Accessing Protocol (FNAP): the protocol implemented in the Flow Namespace Accessing Agent as well as in the Flow Namespace User Agent. The former will act both as a server and a client while the latter only as a client. This protocol is described in the next chapter.</li>
        </ul>
        <section anchor="flow-events-broker-feb">
          <name>Flow Events Broker (FEB)</name>
          <t>The FEB implementation that we will mostly consider is Apache Kafka. This open-source project is quickly becoming a commodity platform, and major cloud providers are building utilities for it. However, as a design decision, it should be possible to use the same protocols to support other applications, such as RabbitMQ, Apache Pulsar or the cloud-based options like AWS SQS or Azure Events Hub.</t>
          <t>Apache Kafka is the ecosystem leader in the Event Streaming space, considering mainly adoption. There is a growing set of tools and vendors supporting its installation, operation, and consumption. This fact makes Apache Kafka much more appealing to enterprise developers. However, the broker should provide a common set of functionalities which can be seen in the diagram of Figure 3.</t>
          <figure>
            <name>Figure 3</name>
            <artwork type="svg" alt="Event Streaming Open Network Architecture components" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure3.svg"/>
          </figure>
          <t>The selection of the Events Broker will impact on the implementation of the Flow Namespace Accessing Agent. This last component will be responsible for knowing how to set up and manage flows on top of different Events Brokers.</t>
        </section>
        <section anchor="flow-name-service-fns">
          <name>Flow Name Service (FNS)</name>
          <t>FNS is a core component for the overall proposed architecture. This component provides all needed functionalities for obtaining Flow connection details based on a Flow URI (Uniform Resource Identifier). Thus, it is required to define a URI format for Flow resources and to specify mechanisms for resource location resolution.</t>
          <t>In this section, we will focus on describing both the URI for Flow as well as the DNS mechanism for obtaining Flow network location details.</t>
          <section anchor="leveraging-dns-infrastructure">
            <name>Leveraging DNS infrastructure</name>
            <t>As mentioned previously, this component must maximize its leverage on the existing Internet DNS infrastructure. The reason for this requirement is to avoid defining new protocols and services that prevent broad adoption. Currently, DNS is the de facto name resolution protocol for the Internet, and there exist libraries for its usage on every programming language.</t>
            <t>Whereas DNS is mainly used to resolve FQDN (Fully Qualified Domain Names) into IP addresses, there are many other functionalities provided by the global DNS infrastructure. Theoretically, DNS is an open network of a distributed database. Individuals and organizations that want to participate in the network need to register a domain name and set up Authoritative DNS servers for domains.</t>
            <t>It is not in the scope of this work to detail the different available usages of DNS functionalities, but we can mention that it provides special Resource Records (i.e., types of information for a FQDN) that are solely used by special protocols. For instance, the MX Resource Records are used by SMTP servers to exchange email messages.</t>
            <t>For the Flow Open Network, it will be required to define a URI format for flows as well as the mechanism to resolve an URI into all the needed information to connect to a flow. In the case of email, a URI is the email address while the connection details will be the SMTP server responsible for receiving emails for that account. For instance, an email URI could be user@domain.com while its connection details could be smtp://mail.domain.com. The way in which the connection details are obtained is by resolving the MX DNS Resource Records of domain.com, which in this example is mail.domain.com.</t>
          </section>
          <section anchor="flow-uri">
            <name>Flow URI</name>
            <t>As we mentioned previously, the first needed element is a URI definition for flow resources. These resources identification must capture the following details:
* Domain, a registered domain in which create flow resources references. For example, airport.com.
* Flow Namespace, a subdomain which is solely used by users to host flow names. This subdomain must be delegated to the Flow Name Server component and desirable should not be used for any other purpose other than flow.
* Flow Name, a name for each flow that must be unique within its domain. The combination of flow name and flow domain results in an FQDN. For instance, we could have a flow named arrivals of the domain flow.airport.com. Thus, the FQDN of the flow would be arrivals.flow.airport.com. Also, the name can contain dots so that the following FQDN could be also used: airline.arrivals.flow.airport.com.</t>
            <t>Thus, the general syntax of a flow URI would be:</t>
            <t>flow://flow_name.flow_namespace.domain</t>
            <t>This URI has the advantage that is similar to "mailto" URI and could be implemented in HTML to refer to flow resources. Some examples:</t>
            <ul spacing="normal">
              <li>flow://entrances.building.company.com</li>
              <li>flow://exits.building.company.com</li>
              <li>flow://temperature.house.mydomain.com</li>
              <li>flow://pressure.room1.office.mydomain.com</li>
            </ul>
            <t>The flow URI must unequivocally identify a flow resource and provide, by means of DNS resolution mechanisms, all the information required to use the flow. Among these parameters, at least the following should be resolvable:</t>
            <ul spacing="normal">
              <li>Event Queue Broker protocol utilized by the flow. For instance, if Apache Kafka is used, the protocol would be "kafka"; In case RabbitMQ is used by the flow, "amqp". Also, it must be informed if the protocol is protected by TLS.</li>
              <li>Event Queue Broker FQDN or list of FQDNs that resolve to the IP address of one or a set of the Event Queue Brokers. For instance, kafka-1.mycompany.com, kafka-2.mycompany.com.</li>
              <li>Event Queue Broker Port used by the Event Queue Brokers. For instance, in the case of Kafka: 9092, 9093.</li>
              <li>Event Queue Broker Transport Security Layer can be implemented. Thus, it is needed to know if the connection uses TLS before establishing it.</li>
              <li>Queue Name hosted in the Event Queue Broker, which must be equal to that of the corresponding flow name.</li>
            </ul>
            <t>The general syntax of the Flow URI would be as follows:</t>
            <t>flow://flowName.flowCategory.myNameSpace.domain.tld</t>
            <ul spacing="normal">
              <li>Flow Namespace FQDN: myNameSpace.domain.tld</li>
              <li>Flow Name: flowName.flowCategory</li>
              <li>Flow FQDN: flowName.flowCategory.myNameSpace.domain.tld</li>
            </ul>
            <t>The following are examples of this URI Syntax:</t>
            <t>flow://notifications.calendar.people.syndeno.com</t>
            <ul spacing="normal">
              <li>Flow Namespace FQDN: people.syndeno.com</li>
              <li>Flow Name: notifications.calendar</li>
              <li>Flow FQDN: notifications.calendar.people.syndeno.com</li>
            </ul>
            <t>flow://created.invoice.finance.syndeno.com:</t>
            <ul spacing="normal">
              <li>Flow Namespace FQDN: finance.syndeno.com</li>
              <li>Flow Name: created.invoice</li>
              <li>Flow FQDN: created.invoice.finance.syndeno.com</li>
            </ul>
          </section>
          <section anchor="flow-name-resolution">
            <name>Flow name resolution</name>
            <t>In Figure 4, we can see how a Flow FQDN can be resolved by means of the Flow Name Service.</t>
            <figure>
              <name>Figure 4</name>
              <artwork alt="High-level overview of the interactions with the Flow Name Service component." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure4.svg"/>
            </figure>
            <t>In order to illustrate the Flow Name resolution procedure by the FNAA (Flow Namespace Accessing Agent), we can consider the following flow URI:</t>
            <t>flow://notifications.calendar.people.syndeno.com</t>
            <t>First, the FNAA will perform a query to the DNS resolvers. These will perform a recursive DNS query to obtain the authoritative name servers for the Flow Namespace: people.syndeno.com. Thus, the authoritative name servers for syndeno.com will reply with one or more NS Resource Record containing the FQDN for the authoritative name servers of people.syndeno.com.</t>
            <t>Secondly, once these name servers are obtained, the FNUA will perform a PTR query on the Flow FQDN adding a service discovery prefix. The response of the PTR query will return another FQDN compliant with SRV DNS Resource Records <xref target="RFC2782"/> and DNS Service Discovery <xref target="RFC6763"/>.</t>
            <t>In this case, the query for PTR records would be as follows:
~~~
;; QUESTION SECTION:
;notifications.calendar.people.syndeno.com.             IN      PTR
~~~
The response would be in the following form:
~~~
;; ANSWER SECTION:
notifications.calendar.people.syndeno.com. 21600 IN     PTR _flow._tcp.notifications.calendar.people.syndeno.com.
~~~
Using the FQDN returned by this query, an additional query asking for SRV records is made:
~~~
;; QUESTION SECTION:
;_flow._tcp.notifications.calendar.people.syndeno.com.          IN      SRV</t>
            <t>;; ANSWER SECTION:
_flow._tcp.notifications.calendar.people.syndeno.com. 875 IN    SRV     30 30 65432 fnaa.syndeno.com.
_flow._tcp.notifications.calendar.people.syndeno.com. 875 IN TXT "tls"</t>
            <t>_queue._flow._tcp.notifications.calendar.people.syndeno.com. 875 IN     SRV     30 30 9092 kafka.syndeno.com.
_queue._flow._tcp.notifications.calendar.people.syndeno.com. 875 IN TXT "broker-type=kafka tls"
~~~
First, the response informs the network location of the FNAA server, in this case a connection should be opened to TCP port 65432 of the IP resulting of resolving fnaa.syndeno.com:
~~~
;; QUESTION SECTION:
;fnaa.syndeno.com.              IN      A</t>
            <t>;; ANSWER SECTION:
fnaa.syndeno.com.       21600   IN      A       208.68.163.200
~~~
Secondly, this response offers other relevant information, like the TCP port where the queue service is located (9092). It also includes a TXT Resource Record that establishes the protocol of the Event Queue Broker, defined in the variable "broker-type=kafka".</t>
            <t>Now, using the returned FQDN for the queue, kafka.syndeno.com, the resolver can perform an additional query:
~~~
;; QUESTION SECTION:
;kafka.syndeno.com.             IN      A</t>
            <t>;; ANSWER SECTION:
kafka.syndeno.com.      21600   IN      A       208.68.163.218
~~~</t>
          </section>
        </section>
        <section anchor="flow-namespace-accessing-agent-fnaa">
          <name>Flow Namespace Accessing Agent (FNAA)</name>
          <t>The Flow Namespace Accessing Agent is the core component of a Network Participant. This server application implements the Flow Namespace Accessing Protocol that allows client connections.</t>
          <t>In the diagram of Figure 5 we can see the different methods that the FNAA must support.</t>
          <figure>
            <name>Figure 5</name>
            <artwork alt="High-level overview of the interactions among FNAA servers." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure5.svg"/>
          </figure>
          <t>The clients connecting to a FNAA server can be remote FNAA servers as well as FNUA. The rationale is that users of a NP connect to the FNAA by means of a FNUA. On the other hand, when a user triggers a new subscription creation, the FNAA of his NP must connect as client to a remote FNAA server.</t>
        </section>
        <section anchor="flow-processor-fp">
          <name>Flow Processor (FP)</name>
          <t>Whenever a new subscription creation is triggered and all remote flow connection details are obtained, the FNAA needs to set up a Processor for it. The communications of the FNAA to and from the FP is by means of an IPC interface. This means that there can be different implementations of Processors, one of which will be the Subscription Processor.</t>
          <t>In the diagram of Figure 6, we can see the initial interface methods that should be implemented in a Flow Processor.</t>
          <figure>
            <name>Figure 6</name>
            <artwork alt="High-level overview of the IPC interface for the FNAA server and Flow Processors communications." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure6.svg"/>
          </figure>
          <t>Depending on the use of the processor, different data structures should be added to the different methods. In the case of a Subscription Processor, the minimum information will be the remote and local Flow connection details. Moreover, the interface also should include methods to update the Processor configuration and to destroy it, once a subscription is revoked. Finally, due to the nature of the stream communication, there could also be methods available to pause and to resume a Processor.</t>
          <t>There can be different types of Processors, which we can see in Figure 7.</t>
          <figure>
            <name>Figure 7</name>
            <artwork alt="High-level overview of the IPC interface for the FNAA server and Flow Processors communications." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure7.svg"/>
          </figure>
          <t>In Figure 7, we can see that there are different types of Flow Processors:
* Bridge Processor: Consumes events from a Flow located in an Event Broker (i.e., Apache Kafka) and transcribes them to a single Flow (local or remote).
* Collector Processor: Consumes events from N Flows located in an Event Broker and transcribes the aggregate to a single Flow (local or remote).
* Distributor Processor: Consumes events from a single Flow and transcribes or broadcast to N Flows (local or remote).
* Signal Processor: Consumes events from N Flows and produces new events to N Flows (local or remote)</t>
          <t>To implement the previously described Subscription Processor, we can utilize some form of the Bridge Processor. Although we are initially considering the basic use case of subscription, it must be possible for the network to extend the processor types supported. In any case, the different FNAA servers involved must be aware the supported processor types, with the goal of informing the users the capabilities available in the FNAA server. For instance, the fact that a FNAA supports the Bridge Processor should enable the subscription commands in the FNAA, for users to create subscriptions using the Bridge Processor.</t>
          <t>In summary, the IPC interface should support all the possible processors that the network may need although we are initially considering the subscription use case.</t>
        </section>
        <section anchor="flow-namespace-user-agent-fnua">
          <name>Flow Namespace User Agent (FNUA)</name>
          <t>The FNUA is an application analogous to email clients such as Microsoft Office or Gmail. These applications implement either different network protocols to access mailboxes by means of IMAP and/or POP3. In the case of FNUA, the protocol implemented is the FNAP (Flow Namespace Accessing Protocol).</t>
          <t>The FNUA is an application that acts as a client for the FNAA server. Only users that possess accounts in a Network Participant should be able to login to FNAA to manage Flow Namespaces. The FNUA could be any kind of user application: web application, desktop application, mobile application or even a cli tool.</t>
          <t>In the Diagram of Figure 8 we can see the actions that the user can request to the FNUA.</t>
          <figure>
            <name>Figure 8</name>
            <artwork alt="High-level overview of the interactions between a user and the Flow Namespace User Agent component." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure8.svg"/>
          </figure>
          <t>The main goal of the FNUA is to provide the user with access to Flow Namespaces and the flows hosted in them. A user may have many Flow Namespace and many Flows in each of them. By means of the FNUA, the user can manage the Flow Namespaces and the Flows in them. Also, the FNUA will provide the capabilities required to subscribe to external Flows, whether local to the FNAA, local to the NP or remote (in a different NP FNAA server).</t>
        </section>
      </section>
      <section anchor="communications-examples">
        <name>Communications Examples</name>
        <t>In this section, two usage examples of Network Participants communications are provided. The first one, we call unidirectional, since one NP subscribes to a remote Flow of a different NP. The second one, we call it bidirectional, since now these NP have mutual subscriptions.</t>
        <section anchor="unidirectional-subscription">
          <name>Unidirectional Subscription</name>
          <t>In the diagram of Figure 9, we can see an integration between two NP. In this case, there is a FlowA hosted in the Orange NP to which the FlowB in the Blue NP is subscribed. Both FlowA and FlowB count with a queue hosted in the Flow Events Broker, which could be an Apache Kafka instance for example. However, it must be possible to employ any Flow Events Broker of the NP's choice.</t>
          <figure>
            <name>Figure 9</name>
            <artwork alt="Example of a unidirectional subscription among two Network Participants." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure9.svg"/>
          </figure>
          <t>The steps followed to set up a subscription to a remote flow are:
1. A user of the Blue NP creates a new subscription to remote FlowA by means of the Flow Namespace User Agent (FNUA).
2. The FNUA connects to the Flow Namespace Accessing Agent (FNAA) of the Blue NP to inform the user request.
3. The FNAA in the Blue NP discovers the remote FNAA to which it must connect to obtain the flow connection parameters. First, it needs to authenticate and, if allowed, the connection parameters will be returned.
4. Once the FNAA in the Blue NP has all the necessary information, it will set up a new Processor that connects the flow in the Orange NP to a flow in the Blue NP.
5. Once the subscription is brought up, every time a Producer in the Orange NP writes an event to FlowA, the Flow Processor will receive it, since it is subscribed to it. Then, the Flow Processor will write that event to FlowB in the Blue NP.
6. From now on, every Consumer connected to FlowB will receive the events published on FlowA.</t>
          <t>In case the user owner of FlowA in the Orange NP wishes to revoke the access, it must be able to do so by means of security credentials revoking against the Identity &amp; Access Manager of the Orange NP.</t>
        </section>
        <section anchor="bidirectional-subscription">
          <name>Bidirectional Subscription</name>
          <t>In Figure 10 we can see an example of all the components needed to set up a flow integration between two different NP. In this case, there are two flows being connected:
* FlowA of the Orange NP with FlowB of the Blue NP
* FlowC of the Blue NP with FlowD of the Orange NP</t>
          <figure>
            <name>Figure 10</name>
            <artwork alt="Example of a bidirectional subscription among two Network Participants." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure10.svg"/>
          </figure>
          <t>Each Flow has its corresponding Queue hosted in the NP Flow Events Broker. Also, there is one Flow Processor for each connection, meaning that these components are in charge of reading new events on source flows to write them to the destination flows as soon as received.</t>
          <t>Also, we can see that in order to connect FlowB to FlowA, a connection from the Blue NP's FNAA has been initiated against the Orange NP's FNAA. This connection uses the FNAP to interchange the flow connection details. Analogously, the FNAA connection to set up the integration of FlowC with FlowD has been initiated by the Orange NP's FNAA.</t>
          <t>After the flow connection details are obtained, the different Flow Processors are set up to consume and produce events from and to the corresponding Queue in the different NPs.</t>
          <t>Once the two processors are initialized, all the events produced to FlowA in the Orange NP will be forwarded to FlowB in the Blue NP; and all the events produced to FlowC in the Blue NP will be forwarder to FlowD in the Orange NP.</t>
        </section>
      </section>
    </section>
    <section anchor="event-streaming-open-network-protocol">
      <name>Event Streaming Open Network Protocol</name>
      <t>The protocol to be used in an Event Streaming Open Network is a key component of the overall architecture and design. This chapter is dedicated to thoroughly describe this protocol.</t>
      <section anchor="protocol-definition-methodology">
        <name>Protocol definition methodology</name>
        <t>It is now necessary to specify the protocol needed for the Flow Namespace Accessing Agent or FNAA, which we have named the Flow Namespace Accessing Protocol or FNAP. In the diagram of Figure 11 we can see how an FNAA client connects with a FNAA server by means of the FNAP.</t>
        <figure>
          <name>Figure 11</name>
          <artwork alt="FNAA client and server communicate using FNAP." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure10.svg"/>
        </figure>
        <t>In order to define a finite state machine for the protocol and the different stimuli that cause a change of state, the model presented by M.Wild (Wild, 2013) in her paper "Guided Merging of Sequence Diagrams" will be employed. This model is beneficial since it provides an integrated method both for client and server maintaining the stimuli relationship that trigger a change of state in each component.</t>
        <figure>
          <name>Figure 12</name>
          <artwork alt="Merged Sequence Diagram for SMTP proposed by Wild, 2013." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure12.svg"/>
        </figure>
        <t>In Figure 12 we have the method proposed by Wild for SMTP, in which there are boxes representing states and arrows representing transitions. Each transition has a label composed of the originating stimulus that triggers the transition and a subsequent stimulus effect triggered by the transition itself. For instance, when a client connects to an SMTP Server, the client goes from "idle" state to "conPend" state. The label of this transition includes "uCon" as the stimulus triggering the transition, which triggers the effect "sCon". Then, on the diagram for the server we can see that the "sCon" triggers the transition from "waiting" state to "accepting" state in the server.</t>
        <t>This method will be used to define the states and transitions for the Flow Namespace Accessing Protocol both for client and server.</t>
      </section>
      <section anchor="flow-namespace-accessing-protocol-fnap">
        <name>Flow Namespace Accessing Protocol (FNAP)</name>
        <t>Using the model proposed by Wild described previously, we define the finite-state machine for the FNAA Server, which we can see in Figure 13.</t>
        <figure>
          <name>Figure 13</name>
          <artwork alt="Finite-state machine for the Flow Namespace Accessing Protocol." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure13.svg"/>
        </figure>
        <t>The model in right side of Figure 13 shows that the FNAA server starts in a "waiting" state, which basically means that the server has successfully set up the networking requirements to accept client connections. Then, when a client connects, a transition is made to "accepting" state, in which internally the authentication procedure is made. If the authentication is successful, a transition is made to "ready" state, meaning that the client can now execute commands on the FNAA server.</t>
        <t>For each command that the client executes, a transition is made to "cmdRecvd" state. Then, a response is returned to the client, transitioning again to "waiting" state. When the client executes the "Quit" command, a transition is made to the "waiting" state and the server must free all used networking resources for the now closed connection.</t>
        <t>On the left side of Figure 13, we also have the client state machine with its corresponding transitions. The client triggers a connection to the server and once established, an authentication is needed. Once the authentication is correctly done, the client can start requesting commands to the server. For each command executed by the client, a transition is made to "cmdPend" state, until a response is returned by the server.</t>
        <t>Eventually, a "Quit" command will be executed by the client and the connection will be closed.</t>
      </section>
      <section anchor="implementation">
        <name>Implementation</name>
        <t>In this section, we provide an approach for the overall implementation of the proposed Event Streaming Open Network. Considering the components defined previously for the architecture, we will define which existing tools can be leveraged and those that require development.</t>
        <section anchor="objectives">
          <name>Objectives</name>
          <t>The objective of this implementation is to provide specifications for an initial implementation of the overall architecture for the Event Streaming Open Network. Whenever it is possible, existing tools should be leveraged. For those components that need development, a thorough specification is to be provided.</t>
          <section anchor="implementation-overview">
            <name>Implementation overview</name>
            <t>In Figure 14, we have a diagram of the overall implementation proposal. The components that have the Kubernetes Deployment icon are the ones to be managed by the FNAA server instance. Then, we have a Kafka Cluster that provides a Topic instance for each flow. Finally, the DNS Infrastructure is leveraged.</t>
            <figure>
              <name>Figure 14</name>
              <artwork alt="Implementation overview using Kubernetes, Apache Kafka, DNS Bind9 and the Flow CLI tool." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure14.svg"/>
            </figure>
          </section>
        </section>
      </section>
      <section anchor="existing-components">
        <name>Existing components</name>
        <t>In this section, we describe the existing software components that can be leveraged for implementation.</t>
        <section anchor="flow-events-broker-feb-1">
          <name>Flow Events Broker (FEB)</name>
          <t>Since there are currently many implementations for this component, it is necessary to develop the needed integrations of other components of the architecture to the main market leaders. Thus, we will consider the following Flow Events Broker for the implementation: Apache Kafka, AWS SQS and Google Compute PubSub.</t>
          <t>In summary, this component does not need to be developed from scratch. However, the FNAA will need to be able to communicate with the different Flow Events Broker, meaning that it must implement their APIs as a client.</t>
        </section>
        <section anchor="flow-name-service-fn">
          <name>Flow Name Service (FN)</name>
          <t>This component can be completely implemented by leveraging on the ISC Bind9 software component, which is the de facto leader for DNS servers. A given NP will need to deploy a Bind9 Nameserver and enable both DNSSEC and DNS Dynamic Update.</t>
          <t>The impact of adopting Bind9 for the implementation means that the FNAA component needs to be able to use a remote DNS Server to manage the Flow URI registration, deregistration and execute recursive DNS resolution.</t>
        </section>
        <section anchor="components-to-be-developed">
          <name>Components to be developed</name>
          <t>In this section, we describe a set of tools that require development. These components, especially the FNAA, are the core components of every Network Participant. Moreover, these are the components that implement the network protocol FNAP.</t>
          <t>Since these are the core components of the network, they are the natural candidates for validation. In the next chapter, we will show the feasibility of the core network components in the form of a Proof of Concept.</t>
          <section anchor="flow-namespace-accessing-agent-fnaa-1">
            <name>Flow Namespace Accessing Agent (FNAA)</name>
            <t>The Flow Namespace Accessing Agent is a server component that triggers the creation of child processes that implement the different Flow Processors. This means that the instance running the FNAA will bring up new processes for each processor. One way of implementing this functionality can be a parent process that creates new child processes for each processor. However, this would imply the need of creating and managing different threads in a single FNAA instance.</t>
            <t>The problem with the approach of a parent process and child processes for the FNAA is on the infrastructure level. The more processor a FNAA needs to manage, the more compute resources the FNAA would need. In the current cloud infrastructure context, this is problem because it means that additional compute resources should be assigned to the FNAA, depending on the quantity of processors and the required resources for each of them. In summary, this approach would be vertically scalable but not horizontally scalable.</t>
            <t>Then, to avoid the scalability issue, the approach we propose is by implementing a Cloud Native application. By leveraging on Kubernetes, it is possible to trigger the creation of Deployments, which are composed of Pods. Each Pod can contain a given quantity of containers, which are processes running in a GNU/Linux Operating System. In this way, we can dedicate a Pod to run the FNAA server and different Pods to run the Processors. This approach provides a convenient process isolation and enables both horizontal and vertical scalability.</t>
            <t>Moreover, the way in which the FNAA would bring up and manage Processor instances would be though an integration with the underlaying Kubernetes instance, by means of the Kubernetes API. The result is a Cloud Native application that leverages the power and flexibility of Kubernetes to manage the Processor instances.</t>
            <t>On the other hand, the programming language for the FNAA must also be defined. For this, we consider that it must be possible to implement the FNAA and the Flow Processors in different programming languages. For the FNAP it is recommended to employ Golang, since Kubernetes CLI tool is implemented in this language and there are several libraries available for integration. As for the Flow Processors, it must be possible to use any programming language as long as the IPC interface is correctly implemented.</t>
            <t>Regarding the IPC interface for the communications between the FNAA and the Flow Processors, the recommendation is to employ gRPC together with Protobuf. The rationale for choosing this this technology is the fact that gRPC enables binary communications, which are the desired type of communication for systems integration. Then, both the FNAA and the Flow Processors must share this Protobuf interface definition and implement it accordingly through gRPC.</t>
            <t>Finally, the FNAA must implement the protocol we have named FNAP, which provides the main set of functionalities for the Event Streaming Open Network. The implementation of FNAP must be stateful, in the sense that it is connection-based. Additionally, the implementation must be text-based, with the goal that humans can interact with FNAA servers in the same way that it is possible for SMTP servers. The transport protocol must be TCP with no special definition for a port number, since the port should be able to be discovered by means of DNS SRV Resource Records.</t>
            <t>Regarding security for the FNAA servers, TLS must be supported. This means that any client can start a TLS handshake with the FNAA servers before issuing any command.</t>
            <t>In conclusion, the implementation of the FNAA over Kubernetes provides the needed flexibility and set of capabilities required for this component. It is recommended to implement the FNAA in Golang and enable the implementation of Flow Processors in any programming language as long as the Protobuf interface is correctly implemented. Finally, the FNAA must implement the protocol FNAP in a connection-based and text-based manner.</t>
          </section>
          <section anchor="flow-namespace-user-agent-fnua-1">
            <name>Flow Namespace User Agent (FNUA)</name>
            <t>The Flow Namespace User Agent (FNUA) can have different implementations as long as they comply with the protocol FNAP.</t>
            <t>We propose the initial availability of a CLI tool that acts as a Flow Namespace User Agent. This CLI tool must provide a client implementation of all the functionalities available in the FNAA server. Among the functionalities to be implemented as a must, we can mention:
* Discover the FNAA server for a given Flow URI.
* Connect to the FNAA server to manage Flow Namespaces and Flows, as exemplified in Figure 8.</t>
            <t>Additionally, the FNUA should be able to discover the Authoritative FNAA server for a given Flow Namespace. This discovery shall be performed by leveraging on the DNS-SD specification. Refer to Annex D to review the discovery process.</t>
            <t>Regarding the implementation of the CLI tool, it is recommended to employ Golang together with Cobra, a library specialized to create CLI tools. In Figure 15 we have a diagram that shows the different functionalities that the CLI tool should implement.</t>
            <figure>
              <name>Figure 15</name>
              <artwork alt="Flow CLI parameters diagram." type="svg" src="https://raw.githubusercontent.com/syndeno/draft-spinella-event-streaming-open-network/main/images/Figure15.svg"/>
            </figure>
          </section>
        </section>
      </section>
    </section>
    <section anchor="proof-of-concept">
      <name>Proof of Concept</name>
      <t>In this section, we will focus on providing a minimum implementation of the main Event Streaming Open Network component: the Flow Namespace Accessing Agent. This implementation should serve as a Proof of Concept of the overall Event Streaming Open Network proposal.</t>
      <t>As described in the previous section, the Flow Namespace Accessing Agent (FNAA) is the main and core required component for the Open Network. All Network Participants must deploy an FNAA server instance in order to be part of the network. The FNAA actually implements a server-like application for the Flow Namespace Accessing Protocol (FNAP). Then, the first objective of this Proof of Concept is to show an initial implementation of the FNAA server component.</t>
      <t>On the other hand, the FNAA is accessed by means of a Flow Namespace User Agent (FUA). This component acts as a client application that connects to a FNAA. Also, this component can take different forms: it could be a web-based application, a desktop application or even a command line tool. For the purposes of this Proof of Concept, we will implement a CLI tool that acts as a client application for the FNAA. Thus, the second objective of this PoC is to provide an initial implementation of the FNUA client component.</t>
      <t>In the following sections, we will first describe the minimum functionalities considered for validating the overall proposal for the Event Streaming Open Network. This minimum set of requirements for both the FNAA and the FNUA will compose the Proof of Concept.</t>
      <t>Afterwards, we will describe the technology chosen for the initial implementation of both the FNAA and the FNUA. Then, a description of how these tools work in isolation will be provided. Subsequently, we will review different use cases to prove how the network could be used by network participants and its users.</t>
      <t>Lastly, we will provide a conclusion for this Proof of Concept, where we mentioning if and how the minimum established requirements have been met or not.</t>
      <section anchor="minimum-functionalities">
        <name>Minimum functionalities</name>
        <t>Network Participants system administrators must be able to run a Server Application that acts as FNAA.</t>
        <t>Users using a Client Application actiong as a FNUA must be able to:
1. Access the flow account and operate its flows.
2. Create a new flow.
3. Describe an existing flow.
4. Subscribe to an external flow.</t>
      </section>
      <section anchor="fnaa-server-application">
        <name>FNAA - Server application</name>
        <t>The FNAA server application must implement FNAP as described in Section 6. Basically, the FNAA will open a TCP port on all the IP addresses of the host to listen for new FNUA client connections.</t>
        <t>The chosen language for the development of the FNAA is GoLang. The reason for choosing GoLang is because Kubernetes is written in this language and there is a robust set of libraries available for integration. Although there is no integration built with Kubernetes for this Proof of Concept, the usage of GoLang will enable a seamless evolution of the FNAA application. In future versions of the FNAA codebase, new functionalities leveraging Kubernetes will be easier to implement than if using a different programming language.</t>
        <t>When the FNAA server application is initialized, it provides debug log messages describing all client interactions. In order to start the server application, a Network Participant system administrator can download the binary and execute it in a terminal:</t>
        <artwork><![CDATA[
ignatius ~ 0$./fnaad 
server.go:146: Listen on [::]:61000
server.go:148: Accept a connection request.
]]></artwork>
        <t>Now that the 61000 TCP port is open, we can test the behaviour by means of a raw TCP using telnet command in a different terminal:
~~~
ignatius ~ 1$telnet localhost 61000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 fnaa.unix.ar FNAA
~~~
We can now see that the server has provided the first message in the connection: a welcome message indicating its FQDN fnaa.unix.ar.</t>
        <t>On the other hand, the server application starts providing debug information for the new connection established:</t>
        <artwork><![CDATA[
ignatius ~ 0$./fnaad 
server.go:146: Listen on [::]:61000
server.go:148: Accept a connection request.
server.go:154: Handle incoming messages.
server.go:148: Accept a connection request.
]]></artwork>
      </section>
      <section anchor="fnua-client-application">
        <name>FNUA - Client application</name>
        <t>In order to test the FNAA server application, a CLI-based FNUA application has been developed. The chosen language for this CLI tool is also GoLang. The reason for choosing GoLang for the FNUA is because of its functionalities for building CLI tools, leveraging on the Cobra library.
Thus, the FNUA for the PoC is an executable file that complies with the diagram in Figure 14.</t>
        <t>One of the requirements for the flow CLI tool is a configuration file that defines the different FNAA servers together with the credentials to use. An example of this configuration file follows:</t>
        <artwork><![CDATA[
ignatius ~/ 0$cat .flow.yml 
agents:
  -
    name: fnaa-unix
    fqdn: fnaa.unix.ar
    username: test
    password: test
    prefix: unix.ar-
  -
    name: fnaa-emiliano
    fqdn: fnaa.emiliano.ar
    username: test
    password: test
    prefix: emiliano.ar-

namespaces:
  -
    name: flows.unix.ar
    agent: fnaa-unix
  -
    name: flows.emiliano.ar
    agent: fnaa-emiliano

]]></artwork>
        <t>In this file, we can see that there are two FNAA instances described with FQDN fnaa.unix.ar and fnaa.emiliano.ar. Then, there are two namespaces: one called flow.unix.ar hosted on fnaa-unix and second namespace flows.emiliano.ar hosted on fnaa-emiliano. This configuration enables the FNUA to interact with two different FNAA, each of which is hosting different Flow Namespaces.</t>
        <t>Once the configuration file has been saved, the flow CLI tool can now be used. In the following sections, we will show how to use the minimum functionalities required for the Open Network using this CLI tool.</t>
      </section>
      <section anchor="use-cases">
        <name>Use cases</name>
        <t>### Use case 1: Authenticating a user
After the connection is established, the first command that the client must execute is the authentication command. As previously defined in Chapter 5, every FNAA client must first authenticate in order to execute commands. Thus, the authentication challenge must be supported both by the FNAA as well as the FNUA.</t>
        <t>It is worth mentioning that the chosen authentication mechanism for this PoC is SASL Plain. This command can be extended furtherly with other mechanisms in later versions. However, this simple authentication mechanism is sufficient to demonstrate the authentication step in the FNAP.</t>
        <t>The SASL Plain Authentication implies sending the username and the password encoded in Base64. The way to obtain the Base64 if we consider a user test with password test, is as follows:</t>
        <artwork><![CDATA[
ignatius ~ 0$echo -en "\0test\0test" | base64
AHRlc3QAdGVzdA==
]]></artwork>
        <t>Now, we can use this Base64 string to authenticate with the FNAA. First, we need to launch the FNAA server instance:</t>
        <artwork><![CDATA[
ignatius~/ $./fnaad --config ./fnaad_flow.unix.ar.yaml
main.go:41: Using config file: ./fnaad_flow.unix.ar.yaml
main.go:57:     Using config file: ./fnaad_flow.unix.ar.yaml
server.go:103: Listen on [::]:61000
server.go:105: Accept a connection request.
]]></artwork>
        <t>Then, we can connect to the TCP port in which the FNAA is listening:</t>
        <artwork><![CDATA[
ignatius ~ 1$telnet localhost 61000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 fnaa.unix.ar FNAA
AUTHENTICATE PLAIN
220 OK
AHRlc3QAdGVzdA==
220 Authenticated
]]></artwork>
        <t>Once the client is authenticated, it can start executing FNAP commands to manage the Flow Namespace of the authenticated user. For simplicity purposes, in this Proof of Concept, we will be using a single user.</t>
        <t>In the case of the CLI tool, there is no need to perform an authentication step, since every command the user executes will be preceded by an authentication in the server.</t>
        <section anchor="use-case-2-creating-a-flow">
          <name>Use case 2: Creating a flow</name>
          <t>Once the authentication is successful, the client can now create a new Flow.  The way to do this using the CLI tool would be:</t>
          <artwork><![CDATA[
ignatius ~/ 0$./fnua create flow time.flow.unix.ar
Resolving SRV for fnaa.unix.ar. using server 172.17.0.2:53
Executing query fnaa.unix.ar. IN 33 using server 172.17.0.2:53
Executing successful: [fnaa.unix.ar.    604800  IN      SRV     0 0 61000 fnaa.unix.ar.]
Resolving A for fnaa.unix.ar. using server 172.17.0.2:53
Executing query fnaa.unix.ar. IN 1 using server 172.17.0.2:53
Executing successful: [fnaa.unix.ar.    604800  IN      A       127.0.0.1]
Resolved A to 127.0.0.1 for fnaa.unix.ar. using server 172.17.0.2:53
C: Connecting to 127.0.0.1:61000
C: Got a response: 220 fnaa.unix.ar FNAA
C: Sending command AUTHENTICATE PLAIN
C: Wrote (20 bytes written)
C: Got a response: 220 OK
C: Authentication string sent: AHRlc3QAdGVzdA==
C: Wrote (18 bytes written)
C: Got a response: 220 Authenticated
C: Sending command CREATE FLOW time.flow.unix.ar
C: Wrote (31 bytes written)
C: Server sent OK for command CREATE FLOW time.flow.unix.ar
C: Sending command QUIT
C: Wrote (6 bytes written)
]]></artwork>
          <t>The client has discovered the FNAA server for Flow Namespace flow.unix.ar by means of SRV DNS records. Thus, it obtained both the FQDN of the FNAA together with the TCP port where it is listening, in this case 61000. Once the resolution process ends, the FNUA connects to the FNAA. First, the FNUA authenticates with the FNAA and then it executes the create flow command.</t>
          <t>If we were to simulate the same behavior using a raw TCP connection, the following steps would be executed:
~~~
ignatius ~ 1$telnet localhost 61000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 fnaa.unix.ar FNAA
AUTHENTICATE PLAIN
220 OK
AHRlc3QAdGVzdA==
220 Authenticated
CREATE FLOW time.flows.unix.ar
220 OK time.flows.unix.ar
~~~</t>
          <t>Now, the client has created a new flow called time.flows.unix.ar located in the flows.unix.ar namespace. The FNAA in background has created a Kafka Topic as well as the necessary DNS entries for name resolution.</t>
        </section>
        <section anchor="use-case-3-describing-a-flow">
          <name>Use case 3: Describing a flow</name>
          <t>Once a flow has been created, we can obtain information of if by executing the following command using the CLI tool:</t>
          <artwork><![CDATA[
ignatius ~/ 1$./fnua describe flow time.flow.unix.ar
Resolving SRV for fnaa.unix.ar. using server 172.17.0.2:53
Executing query fnaa.unix.ar. IN 33 using server 172.17.0.2:53
Executing successful: [fnaa.unix.ar.    604800  IN      SRV     0 0 61000 fnaa.unix.ar.]
Nameserver to be used: 172.17.0.2
Resolving A for fnaa.unix.ar. using server 172.17.0.2:53
Executing query fnaa.unix.ar. IN 1 using server 172.17.0.2:53
Executing successful: [fnaa.unix.ar.    604800  IN      A       127.0.0.1]
Resolved A to 127.0.0.1 for fnaa.unix.ar. using server 172.17.0.2:53
C: Connecting to 127.0.0.1:61000
C: Got a response: 220 fnaa.unix.ar FNAA
C: Sending command AUTHENTICATE PLAIN
C: Wrote (20 bytes written)
C: Got a response: 220 OK
C: Authentication string sent: AHRlc3QAdGVzdA==
C: Wrote (18 bytes written)
C: Got a response: 220 Authenticated
C: Sending command DESCRIBE FLOW time.flow.unix.ar
C: Wrote (33 bytes written)
C: Server sent OK for command DESCRIBE FLOW time.flow.unix.ar
Flow time.flow.unix.ar description:
flow=time.flow.unix.ar
type=kafka
topic=time.flow.unix.ar
server=kf1.unix.ar:9092
Flow time.flow.unix.ar described successfully
Quitting
C: Sending command QUIT
C: Wrote (6 bytes written)
]]></artwork>
          <t>In the output of the describe command we can see all the necessary information to connect to the Flow called time.flow.unix.ar: (i) the type of Event Broker is Kafka, (ii) the Kafka topic has the same name of the flow and (iii) the Kafka Bootstrap server with port is provided. If we were to obtain this information using a manual connection, the steps would be:</t>
          <artwork><![CDATA[
ignatius ~ 1$telnet localhost 61000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 fnaa.unix.ar FNAA
AUTHENTICATE PLAIN
220 OK
AHRlc3QAdGVzdA==
220 Authenticated
DESCRIBE FLOW time.flows.unix.ar
220 DATA 
flow=time.flows.unix.ar
type=kafka
topic=time.flows.unix.ar
server=kf1.unix.ar:9092
220 OK 
]]></artwork>
          <t>Now, we can use this information to connect to the Kafka topic and start producing or consuming events.</t>
        </section>
        <section anchor="use-case-4-subscribing-to-a-remote-flow">
          <name>Use case 4: Subscribing to a remote flow</name>
          <t>In this section, we will show how a subscription can be set up. When a user commands the FNAA to create a new subscription to a remote Flow, the local FNAA server first needs to discover the remote FNAA server. Once the server is discovered by means of DNS resolution, the local FNAA contacts the remote FNAA, authenticates the user and then executes a subscription command.</t>
          <t>Thus, the initial communication between the FNUA and the FNAA, in which the user indicates to subscribe to a remote flow, would be as follows:
~~~
ignatius ~ 1$telnet localhost 61000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 fnaa.unix.ar FNAA
AUTHENTICATE PLAIN
220 OK
AHRlc3QAdGVzdA==
220 Authenticated
SUBSCRIBE time.flows.unix.ar LOCAL emiliano.ar-time.flows.unix.ar
220 DATA
ksdj898.time.flows.unix.ar
220 OK
~~~</t>
          <t>Once the user is authenticated, a SUBSCRIBE command is executed. This command indicates first the remote flow to subscribe to. Then, it also specifies with LOCAL the flow where the remote events will be written. In this example, the remote flow to subscribe to is time.flows.unix.ar, and the local flow is emiliano.ar-time.flows.unix.ar. Basically, a new flow has been created, emiliano.ar-time.flows.unix.ar, where all the events of flow time.flows.unix.ar will be written.</t>
          <t>The server answers back with a new Flow URI, in this case ksdj898.time.flows.unix.ar. This Flow URI indicates a copy of the original flow time.flows.unix.ar created for this subscription. Thus, the remote FNAA has full control over this subscription, being able to revoke it by simply deleting this flow or applying Quality of Service rules.</t>
          <t>The remote FNAA has set up a Bridge Processor to transcribe messages in topic time.flows.unix.ar to the new topic ksdj898.time.flows.unix.ar. Another alternative to a Bridge Processor would be a Distributor Processor, which could be optimized for a Flow with high demand. Moreover, instead of creating a single Bridge Processor per subscription, a Distributor Processor could be used, in order to have a single consumer of the source flow and write the events to several subscription flows.</t>
          <t>The user could use the FNUA CLI tool to execute this command in the following manner:</t>
          <artwork><![CDATA[
ignatius ~ 0$./fnua --config=./flow.yml subscribe time.flows.unix.ar --nameserver 172.17.0.2 -d --agent fnaa-emiliano
Initializing initConfig
    Using config file: ./flow.yml
Subscribe to flow
Agent selected: fnaa-emiliano
Resolving FNAA FQDN fnaa.emiliano.ar
Starting FQDN resolution with 172.17.0.2
Resolving SRV for fnaa.emiliano.ar. using server 172.17.0.2:53
Executing query fnaa.emiliano.ar. IN 33 using server 172.17.0.2:53
FNAA FQDN Resolved to fnaa.emiliano.ar. port 51000
Resolving A for fnaa.emiliano.ar. using server 172.17.0.2:53
Resolved A to 127.0.0.1 for fnaa.emiliano.ar. using server 172.17.0.2:53
C: Connecting to 127.0.0.1:51000
C: Got a response: 220 fnaa.unix.ar FNAA
Connected to FNAA
Authenticating with PLAIN mechanism
C: Sending command AUTHENTICATE PLAIN
C: Wrote (20 bytes written)
C: Got a response: 220 OK
C: Authentication string sent: AHRlc3QAdGVzdA==
C: Wrote (18 bytes written)
C: Got a response: 220 Authenticated
Authenticated
Executing command SUBSCRIBE time.flows.unix.ar LOCAL emiliano.ar-time.flows.unix.ar
C: Sending command SUBSCRIBE time.flows.unix.ar LOCAL emiliano.ar-time.flows.unix.ar
C: Wrote (67 bytes written)
C: Server sent OK for command SUBSCRIBE time.flows.unix.ar LOCAL emiliano.ar-time.flows.unix.ar
Flow emiliano.ar-time.flows.unix.ar subscription created successfully
Server responded: emiliano.ar-time.flows.unix.ar SUBSCRIBED TO ksdj898.time.flows.unix.ar
Quitting
C: Sending command QUIT
C: Wrote (6 bytes written)
Connection closed
]]></artwork>
          <t>This interaction of the FNUA with the FNAA of the Flow Namespace emiliano.ar (fnaa-emiliano) has trigger an interaction with the FNAA of unix.ar Flow Namespace (fnaa-unix). This means that before fnaa-emiliano was able to respond to the FNUA, a new connection was opened to the remote FNAA and the SUBSCRIBE command was executed.</t>
          <t>The log of fnaa-emiliano when the SUBCRIBE command was issued looks as follows:</t>
          <artwork><![CDATA[
server.go:111: Handle incoming messages.
server.go:105: Accept a connection request.
server.go:253: User authenticated
server.go:347: FULL COMMAND: SUBSCRIBE time.flows.unix.ar LOCAL emiliano.ar-time.flows.unix.ar
server.go:401: Flow is REMOTE
client.go:280: **#Resolving SRV for time.flows.unix.ar. using server 172.17.0.2:53
server.go:417: FNAA FQDN Resolved to fnaa.unix.ar. port 61000
client.go:42: C: Connecting to 127.0.0.1:61000
client.go:69: C: Got a response: 220 fnaa.unix.ar FNAA
server.go:435: Connected to FNAA
server.go:436: Authenticating with PLAIN mechanism
client.go:126: C: Sending command AUTHENTICATE PLAIN
client.go:133: C: Wrote (20 bytes written)
client.go:144: C: Got a response: 220 OK
client.go:154: C: Authentication string sent: AHRlc3QAdGVzdA==
client.go:159: C: Wrote (18 bytes written)
client.go:170: C: Got a response: 220 Authenticated
server.go:444: Authenticated
client.go:82: C: Sending command SUBSCRIBE time.flows.unix.ar
client.go:88: C: Wrote (30 bytes written)
client.go:112: C: Server sent OK for command SUBSCRIBE time.flows.unix.ar
server.go:456: Flow time.flows.unix.ar subscribed successfully
server.go:457: Server responded: ksdj898.time.flows.unix.ar
server.go:459: Quitting
]]></artwork>
          <t>We can see how fnaa-emiliano had to trigger a client subroutine to contact the remote fnaa-unix. Once the server FQDN, IP and Port is discovered by means of DNS, a new connection is established and the SUBSCRIBE command is issued. Here we can see the log of fnaa-unix:</t>
          <artwork><![CDATA[
server.go:111: Handle incoming messages.
server.go:105: Accept a connection request.
server.go:253: User authenticated
server.go:139: Received command: subscribe
server.go:348: [SUBSCRIBE time.flows.unix.ar]
server.go:367: Creating flow endpoint time.flows.unix.ar
server.go:368: Creating new topic ksdj898.time.flows.unix.ar in Apache Kafka instance kafka_local
server.go:369: Creating Flow Processor src=time.flows.unix.ar dst=ksdj898.time.flows.unix.ar
server.go:370: Adding DNS Records for ksdj898.time.flows.unix.ar
server.go:372: Flow enabled ksdj898.time.flows.unix.ar
server.go:139: Received command: quit
]]></artwork>
          <t>Thus, we were able to set up a new subscription in fnaa-emiliano that trigger a background interaction with fnaa-unix.</t>
        </section>
      </section>
      <section anchor="results-of-the-poc">
        <name>Results of the PoC</name>
        <t>We can confirm the feasibility of the overall Event Streaming Open Network architecture. The test of the proposed protocol FNAP and its implementation, both in the FNAA and FNUA (CLI application), show that the architecture can be employed for the purpose of distributed subscription management among Network Participants.</t>
        <t>The minimum functionalities defined both for the Network Participants and the Users were met. Network Participants can run this type of service by means of a server application, the FNAA server. Also, the CLI-tool resulted in a convenient low-level method to interact with a FNAA server.</t>
        <t>In further implementations, the server application should be optimized as well as secured, for instance with a TLS handshake. Also, the CLI-tool could be enhanced by a web-based application with a friendly user interface.</t>
        <t>Nevertheless, the challenge for a stable implementation of both components is the possibility of supporting different Event Brokers and their evolution. Not only Apache Kafka should be supported but also the main Public Cloud providers events solutions, such as AWS SQS or Google Cloud Pub/Sub. Since the Event Brokers are continuously evolving, the implementation of the FNAA component should keep up both with the API and new functionalities of these vendors.</t>
        <t>Regarding the protocol design, it would be needed to enhance the serialization of the exchanged data. In this sense, it could be convenient to define a packet header for the overall interaction between the FNAA both with remote FNAA as well as with FNUA.</t>
        <t>Regarding the subscription use case, it would be necessary to establish a convenient format for the server response. Currently, the server is returning a key/value structure with the details of the Flow. This structure may not be the most adequate, since it may differ depending on the Event Broker used.</t>
        <t>Also, the security aspect needs further analysis and design since its fragility could lead to great economical damage for organizations. Thus, it would be recommended to review the different security controls needed for this solution as part of an Information Security Management System.</t>
        <t>Finally, the implementation should leverage the Cloud Native functionalities provided by the Kubernetes API. For example, the FNAA should trigger the deployment of Flow Processors on demand, in order to provide isolated computing resources for each subscription. Also, a Kubernetes resource could be developed to use the kubectl CLI tool for management, instead of a custom CLI tool.</t>
      </section>
    </section>
    <section anchor="summary-conclusions">
      <name>Summary &amp; Conclusions</name>
      <t>In this chapter we will provide a summary of everything that has been described in this document as well as some conclusions about it.</t>
      <t>We have identified a use case for which there is currently no adequate solution provided by existing tools. This use case is based on the cross-organization integration of real-time event streams. Nowadays, organizations intending to integrate these kind of data streams struggle with offline communication to achieve a common interface for integration. In this context, we proposed an Open Network for Event Streaming as a possible solution for this difficulty.</t>
      <t>For this Open Network, we have followed the main necessities from the technical perspective. While there already exist many components that can be leveraged, some components require analysis, design, and implementation. Then, we referred to the Commons Infrastructure literature in order to show how Event Streaming can be considered an Infrastructure Resource that can enable downstream productive activities. Finally, we established the main guidelines that an Open Network should follow, basing these definitions on Free, Open &amp; Neutral Networks.</t>
      <t>Using the previous definitions, we have designed an architecture for the Event Streaming Open Network, establishing the components that the different Network Participants should implement in order to participate in the network. After providing a thorough description of all the components, we showed some use cases of integration among different Network Participants.</t>
      <t>Once the architecture was defined, we proposed an implementation approach which describes the existing components that can be leveraged as well as those that need to be developed from scratch. The outcome was that a server-side application called FNAA had to be developed. This application implements the protocol FNAP and can be accessed by a client application, which we named FNUA.</t>
      <t>Finally, we proved the feasibility of the proposed architecture by providing an implementation of the minimum functionalities required, in the form of a Proof of Concept. The results of this PoC were encouraging since it was possible to implement the initial functionalities for the FNAA and FNUA components.</t>
      <t>As conclusion, we can mention that there is great potential for an Open Network for Event Streaming among organizations. In the same way the email infrastructure acts as an open network for electronic communications among people, this kind of network would enable developers to integrate real-time event streams while minimizing offline agreement of interfaces and technologies.</t>
      <t>However, there are many difficulties that could be furtherly worked on. First, a robust implementation for the Event Streaming Open Network main components must be provided, mainly for the FNAA and FNUA. In order to achieve an acceptable level of quality and stability, the development of a community around the project is needed.</t>
      <t>Secondly, we found that the proposed architecture is a convenient starting point. However, it can suffer modifications based on the learning process during the implementation. For example, while designing the architecture, we avoided the need of a database for the FNAA component, leveraging on the DNS infrastructure. While this can be sufficient for the minimum functionalities described, it will most probably be necessary for the FNAA to persist data in a database of its own. In this sense, we believe that leveraging the Kubernetes resources model could be a convenient alternative.</t>
      <t>Thirdly, during the PoC execution, we identified some difficulties implementing the security functionalities of authentication and authorization. Although we were able to implement an authentication mechanism, the reality indicates that integration with well-established protocols is needed (i.e., OAuth, GSSAPI, etc.).</t>
      <t>Finally, there is also the need to leverage on the Cloud Native architecture, basically Kubernetes, to provide hyper-scalability and enable Network Participants to agnostically choose the underlaying infrastructure. The selection of Golang for the PoC implementation showed to be convenient, given the vast number of available libraries for integration of third-party components and services.</t>
      <t>Notwithstanding the difficulties, we firmly believe that cross-organization real-time event integration can provide great benefits for society. It would enhance the efficiency of business processes throughout organizations. Also, it would provide broad visibility to the final users, enabling experimentation and entrepreneurship. New business models for existing productive activities could be developed, as well as enabling innovation, which in turn would conform the positive externalities of the Event Streaming Open Network.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <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">
            <organization/>
          </author>
          <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="RFC3261">
        <front>
          <title>SIP: Session Initiation Protocol</title>
          <author fullname="J. Rosenberg" initials="J." surname="Rosenberg">
            <organization/>
          </author>
          <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne">
            <organization/>
          </author>
          <author fullname="G. Camarillo" initials="G." surname="Camarillo">
            <organization/>
          </author>
          <author fullname="A. Johnston" initials="A." surname="Johnston">
            <organization/>
          </author>
          <author fullname="J. Peterson" initials="J." surname="Peterson">
            <organization/>
          </author>
          <author fullname="R. Sparks" initials="R." surname="Sparks">
            <organization/>
          </author>
          <author fullname="M. Handley" initials="M." surname="Handley">
            <organization/>
          </author>
          <author fullname="E. Schooler" initials="E." surname="Schooler">
            <organization/>
          </author>
          <date month="June" year="2002"/>
          <abstract>
            <t>This document describes Session Initiation Protocol (SIP), an application-layer control (signaling) protocol for creating, modifying, and terminating sessions with one or more participants.  These sessions include Internet telephone calls, multimedia distribution, and multimedia conferences.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3261"/>
        <seriesInfo name="DOI" value="10.17487/RFC3261"/>
      </reference>
      <reference anchor="RFC5321">
        <front>
          <title>Simple Mail Transfer Protocol</title>
          <author fullname="J. Klensin" initials="J." surname="Klensin">
            <organization/>
          </author>
          <date month="October" year="2008"/>
          <abstract>
            <t>This document is a specification of the basic protocol for Internet electronic mail transport.  It consolidates, updates, and clarifies several previous documents, making all or parts of most of them obsolete.  It covers the SMTP extension mechanisms and best practices for the contemporary Internet, but does not provide details about particular extensions.  Although SMTP was designed as a mail transport and delivery protocol, this specification also contains information that is important to its use as a "mail submission" protocol for "split-UA" (User Agent) mail reading systems and mobile environments.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5321"/>
        <seriesInfo name="DOI" value="10.17487/RFC5321"/>
      </reference>
      <reference anchor="RFC2782">
        <front>
          <title>A DNS RR for specifying the location of services (DNS SRV)</title>
          <author fullname="A. Gulbrandsen" initials="A." surname="Gulbrandsen">
            <organization/>
          </author>
          <author fullname="P. Vixie" initials="P." surname="Vixie">
            <organization/>
          </author>
          <author fullname="L. Esibov" initials="L." surname="Esibov">
            <organization/>
          </author>
          <date month="February" year="2000"/>
          <abstract>
            <t>This document describes a DNS RR which specifies the location of the server(s) for a specific protocol and domain.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2782"/>
        <seriesInfo name="DOI" value="10.17487/RFC2782"/>
      </reference>
      <reference anchor="RFC6763">
        <front>
          <title>DNS-Based Service Discovery</title>
          <author fullname="S. Cheshire" initials="S." surname="Cheshire">
            <organization/>
          </author>
          <author fullname="M. Krochmal" initials="M." surname="Krochmal">
            <organization/>
          </author>
          <date month="February" year="2013"/>
          <abstract>
            <t>This document specifies how DNS resource records are named and structured to facilitate service discovery.  Given a type of service that a client is looking for, and a domain in which the client is looking for that service, this mechanism allows clients to discover a list of named instances of that desired service, using standard DNS queries. This mechanism is referred to as DNS-based Service Discovery, or DNS-SD.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6763"/>
        <seriesInfo name="DOI" value="10.17487/RFC6763"/>
      </reference>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>SPINELLA E. (2022) [Online] Event Streaming Open Network Master's Thesis https://drive.google.com/file/d/1R9H-4knAztez_yUPlr7aZSkbUjs8jL3j</t>
      <t>URQUHART J. (2021) Flow Architectures</t>
      <t>FRISCHMANN B. (2007) [Online] Infrastructure Commons in Economic Perspective &lt; https://firstmonday.org/article/view/1901/1783&gt;</t>
      <t>WIDL M. (2013), Guided Merging of Sequence Diagrams</t>
      <t>NAVARRO L. (2018) [Online] Network Infrastructures: The commons model for local participation, governance and sustainability <eref target="https://www.apc.org/en/pubs/network-infrastructures-commons-model-local-participation-governance-and-sustainability">https://www.apc.org/en/pubs/network-infrastructures-commons-model-local-participation-governance-and-sustainability</eref></t>
      <t>BRINO A. (2019) Towards an Event Streaming Service for ATLAS data processing.</t>
      <t>GUTTRIDGE, Gartner (2021) "Modern Data Strategies for the Real-time Enterprise" Big Data Quarterly 2021</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIADwL8mEAA+2963Ib2ZUm+h9PkUee6JYcICSKutIux0CUVMVpiWKJlDUz
Hh9HAkiQaQGZqExAFKqnOvwaE9EdMc9yHsVPctZ9r70zQVLlPqe6Z8YzbYtk
5s59WXvd17f29vYG63K9KA6zO68+F9U6O1s3Rb4sq4vs3aqospNifVU3n+4M
8smkKT7jY2fvTu4Mpvm6uKib7WFWVvN6MJjV0ypfwjCzJp+v99pVWRWLRb5X
4KB7rQ66V8OgexUPuvfg4aBcNYfZutm064cPHjyHX+Tw5GF2/uLlAB+5aOrN
in/8VGzhN7PD7LhaFw0MsfcSPzWAD2yKw0GWuWezbL1dFfrvZV4u9N95M73U
f1+U68vN5DBrt9WsqOr7XzF1eHsBO9CuD7PL9XrVHt6/X3zJl6tFMZrWy/tv
xuevzs4Hg3adV7M/5Yu6gslsi3bQLvNm/acfNjW8e5hV9WBVHmZ/WNfTYdbW
DXxq3sK/tkv8xx8Hg3yzvqwbWNwefDDLeIfvvFqWizKv6uxMpnqH/lo3F3lV
/pivy7o6zM54UfSXgnfgTiEvjnSN/1GWjpO+MxhUdbOE1z/Ddg7wWMNPg729
vSyfwGbk0/VgcH5Zthkc+WaJJDMr2mlTToo2W18W2eeyhQkMaafLdTFdb5oi
g23IZOuyVVPDgutFBh+AP2TX0V1Wfy4aGlZPfcRzWZaz2aIYDH6Ff2jq2WaK
yx4MzuppWay3GcyvyVflbLHNZiUcdL4of8TBcSKwqzWuDH7EkYsv08u8uoDp
1/Psc77YFPDrfJ1N66qFu7FZF/wY/Fwvt6NsvGjrIf21nBVNPlnA38slr7Go
iuaCvt6ucFXrOsvbFneAhgQaBmLPqzan6bbZFNY/wSkUU/jOLLsCksyaApYD
P1xulvDnsvpcLz4XtNP050mxhq0YZvO8pf/F7y5r3OTpdNMAVcIA7Waxbkew
N/BdmAxMdl18WQ87e43fXy3ybZbT3JoaFlNW2WV95dZcToEk4VvLrKCptHAG
39VXcD/g68u6XePG4eP5arUop0SAcD22cHIlfPeiyXmxtsp1PcNPTpu6bSOy
zRfZpN5Us7wp4TiAFcAVWeOEYL4L2mXdfvjcNoPlNrAeOOOm+GFTwuMFXMF6
SwcNR9kQKcDkmJRb2iolP9ies3qJy50B96EPXuafYRGzeoWTnOXr3F5EUhU6
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
PU7BTxL3Y5FKQ0e2s0t3QghwI8C+GbY6AckL0744aJsAw2M2KJUC39b4lib0
ul1TYz3z3ipN/aNmRrIdoU8K52GRr8V1SwkFp2T7BhICUyCJ5Pmy/h37xAgC
/c1W0D5aYM6lxFLjOtDI4euRg32P8e5rOsGkPseSXW84LUWLkr33/i45gYv3
8L11fcHFSnStrNtfgnxDcczLum5Ny+H/KqaXFeUuqREWinZpdOMnZYXWf7wU
z0nZgGu5vGrL7VHi/okMeYlMtI3PkgWU9Te6loIZPemSvwhT1vW6bXe5WThK
uB4lN86g4yKNix2KuE4KEXlvWLihaTW6IoNHGVh4WXQ3jF2bc2NHz7Xb+VjP
uxYnFcWOQxdvcvtTYM2C5ZW6mvkGB+c8d9uDC9RpTZ6atTI46lT8Ulo3zr7O
zRIZ9FR4PJZdSnZnXKbO89L+9G5qUa287yHDS18bkLdtvc4MIeW4z3ltHWyS
vh05Y85x/3RlVcz9m75C3EnAJU1Qh8lMf//7DqxoxAMsR7+nYhhuC6KG25mF
Wv/U1KHC/zSYlNPbKF+A+j85D1G0z4JJjjod2w9bDeOMBK8DKGG62LSGRbWj
KR0hVKHS4vh6RNiavuhkp7ZWwpvfW3bZ9S8Sxl9XwvSINKAgFjjep9O/gB6p
d1u+38NOdjL/7OsYBsvTKopRSutLYnZ2zVDlqLQj6W0r/294iAiJ+NVuWKx4
KzjFVuGIOyuh7mTBSmCjkKNMIrVNn8qDQpCU1++ctdwJey/q22zZDd2T1wTn
lNNej1xhLSk67zFH8DoMzRunY7q/dBg6ZFwWYh0dzZ9ZERsl6tZjZJku8lyb
+gL7KqGlTjnHjkioDHDLt5Dj8wwz5Tscnsr8ukxv5qcdN0W7dhE2JzmugOgM
LIojwAJvucs5jN3qz17GIb0RcFZpxDKG3fmSvZSqKQwfsdMoAEfTHe+oYf08
TalpeAutNtGqjmpQSTEKybqpNUyjJiMBeES/wKhgGiB73BNdVOy3qzbxg3Uo
UH1fdhcU20vXuDMw148daeE0V9Uos/olg2sddEjnsu64N2/ROJOZBXsrDHSt
lyxIQ7u26MCk1WFQSW9q2Jp8S5Fk8CYxD0nXlAacr52RhZ8H2Oas09hacxgc
msDNLl6p5y2d3spdkxrnvuq2eo2V1THMvBejgDi4xmmq3th2VCA1KawBvPO9
uwJikCIb7mUUsF7VRb1HqMPe/r991iena/pCVEFP6CRidE6QbbNW6iauT7qI
8ExdcvoOb4L6X7liNFFNrxGksBys80477nYQbjq+kii9WUrIXP/6OCS4RoXU
8TDE2T5ELhsgChCJRrUdDz2T9yHSePQZSUJaUAosZgCYg0J6w7U7DySwhaCS
7VZGenbCa/G+r4OCXXRJoj5KEnJuQQgfXHlNIITjFMJf7rKLijNhRmkFyupS
MaKOJFHCNTol8jJu15wvbm2Zot0iXxTFP0pYxWF2mPUG1iIuXdW+0zAWlfth
8VnrM6/cip0HY4rJROHUdu/77jmFfE7+yEpfuTTMEg5+cjVa5byvmvQWoFfO
rPpAMrmlxJw0mXBdFOnL6KbQr7nYX+jlSXffwpmex5K3g5oLcwfvN3kbfdkp
0GYEBpus5/aQay400ST3+Jw+oxPU03dJlTEJkN5D5Z3LgqrYqpqjk9nbHaQ6
6JUf7DjK8hl+kYLf5g1ymiz60nONpo934XpJJekHwu7ihCR0HdMV9C8xgtSF
2CpIscn3GLVDIJUuFc2D8b844ZSiB9xslQqGCXHjiLVFxnmgTCyExnhpYfYq
ZAfxXx+NtCif4YroCUEs4ieoFAGJeU9X7/jY4DwROJ7HJSYrWal5olOcSV7n
k1H2QvPa04QWavKcB5h/3D+xxnzbaWV71FsUUz2w7ylTIe5GzA09ADuuQS54
x53ukg8i+QpU/W39Bp7udBI3Vyj/nWvXOEroAxEtFYGvqTh5p++aIg9NPSHP
JHPB27mwFRjQhqnqGBVhUy7EmeYmdc2FpZgKdxaf68rocMRdgvpRvlwguRaf
tfWT37AolAcSaL6hyCq6ljSzy56d1rNiQqgMRMbJLXa2npu7pRIDFUlzKucs
QVk5twt5faBixCDnHV0q6gLQxvXVvhgR5r65QNw960utJE9fXyzMyeCw5GhP
TEVlvxzrA+m3UYL0Qv/1sDGOINZX1QL70eN44mz3qT3lmn1HMJklup0OB9SH
ARFZ1yVo+v+UPfgPo/vY62OWDcSxcVEf7j96cpi94TsGO/KHw8M/Hj7Zf/Dg
QfTMs0PiYqt1nEBvwD34Jex8EaxRGiNcdswMWEleKimEhSARTAoQAGCKNInC
CvYkvS3gnMUC6MN0vQRHLSw5WfH+f5AXCZONOAqv7byhkOL+w6ejB/D/9kej
0eDII77YC6PBq3aarwoCh4BT5tLwv/+///j3wKkfPuAuLZuq/DLKuQCb5vCx
sPKTqP7N1faoFuAsCCE062hpG31I6vFiimC14SGKKJPIBeHB7UXcZHabCj0X
QWqWgk3M1J92iWeNI8JUcHL9/1eKc88+fnSYfQerI+cd7BHOP/SS/2oyJkH5
AQXlUUfhj4q2jYZ3sJch2xJi1NCYfs8N1sKS6yRXvFeGlXHUlKLCtxRdwUhh
7EeVY5jatG57g07aiDg4rIY9zjlyeqnHa+R6PNOX9LNi8pBKgqyKZV25KNSO
RO9k0fqMVnaBuYLER0TNhhXfsSFMt4r2KIGtD9/kWHrqWYviJLF7j66jQ1Xi
YDEinXhsIzF8O9+0Zm/J/bgPFwSIIeOG2dvlIhvkaJNT+9U98m9V3BcV7tAe
3mv63fyHWXUY3XX6NSr1/DgSJv1qlbctSJiZ/xW10jvM5M29vi8VyxLb5dXp
1/T3P++L7u29wcAaeHcXS2qwXxltSrwL3RfSyfmXbEF8w9U5iIdzHSo9wrFE
WXNe6+UQZsp1OV0k2SznK3Ijux0gGCNUmgvuJm+jCSQSEpIuXoJo5F+wIbp7
kL5qfzKcH0elGsO3u6toPxarjXG3OMVNc9MsRRs/GechpvDEDuum554YR2zB
JhRhFd9qFapi6Fra33VOEHK3kTkaOo3v8oIkgcjYeWlA4Y4Xw4pQYHwwC50h
SRUCfv+QwiWFlAaS2oq3xoEUOTkE40a1h0Ez2FWTSraZaYDSKyCuRbTo7riN
kfKts9mRQN48VhA8j67CVZ80iQgS0bti0wrbtMOpnw3GfQpE4OiEudnp4kub
XK+m4H4ZCIYOnAg87hwPYW9YgCZftob0zj5iyXQ2PnuTnS6wabS5QWm3JbGX
8fiRKDYNXmHrwEryITS6xz1Z5LiTag6l6bwtGTO7Z0ZF0Aivru2dZsUShgmt
eZM3EVDUBSxPxQoOC4qor+a2Z0jnreSmsj3IXNzcXMrDgS2gCUc0AlZ98eQR
qxqUnhFha/Jf0TbzKWna9QrVJNowGxh/NSQR3e4UjiAbYV/qbA+O8s5/e4Cv
8H/fyf47Fs/DBwfj794vpgffj2ff/v7H2fibb8wOCX0eWkkDkiliWwzpGOap
OcqVMDzQq8IKSBY5cIpOOoUJhmT2INlN893bY06XyS/+5Bn8aAvW9oD6lYOC
+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
wo98V8qTjsQm5l0FBvju5Tv7KyLLZcfjk3H3scglhW6rquYnFYYY3t3b26Og
Ko4ynn6q6iuwHC7IEhj84yGTfTH75s4cWERx5yeQ5afHJ6/evBlnr0aYm/Pw
4b3sD+8q1K7+eL0S8xbuUdH8fUtdvREGUFrCzBpk6xcURaFOMJhafX92f//9
8+/2Hn2qxj+uix//tP1wumie5v/17NPkw5/bZ39+c/BnMKTff//hu/H78+w/
8Vz277Ffc+wYVIsd+d4fnx1993Z8cpK9oCcfPHWzTpwM6s/Abi7ihc5OgyMm
+63NnKp44NlZvh0B4d8nFgZzR6fz/f3nD/bv7z99dvC7weDj8cs32Vv68v7B
PWDIG1IW3hYNi34sokB8f7hwLxnVFI7vZPz78fv377I3/N4zN2Pd0njm7SED
w8r8WaDiFeAKnWCtExFfYCiloktOTAlUStAhlUP/Vtd4dXU1yldTWl9R3V9t
Ju190dH3Yv7b7smX9+jLe/TVveire+Gje/DRvfijsFEv3h+fvMvGvOLn97Lz
mlo2oPRMaUvLTnCB4/M34zPWUYQrwRNA3d9+OD9/f/zy21ew5TCPCji4kMlf
//LPb2GWcH1f4ltnhJ134c2y98ZOX6GdsGrKtvjrX/4le1Fe8Dvfb2BI0vZx
yMHg/wW65JAs0G0BAA==

-->

</rfc>
