<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-coserv-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="CoSERV">Concise Selector for Endorsements and Reference Values</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-coserv-00"/>
    <author initials="P." surname="Howard" fullname="Paul Howard">
      <organization>Arm</organization>
      <address>
        <email>paul.howard@arm.com</email>
      </address>
    </author>
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization>Linaro</organization>
      <address>
        <email>Thomas.Fossati@linaro.org</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization>Fraunhofer SIT</organization>
      <address>
        <email>henk.birkholz@ietf.contact</email>
      </address>
    </author>
    <author initials="S." surname="Kamal" fullname="Shefali Kamal">
      <organization>Fujitsu</organization>
      <address>
        <email>Shefali.Kamal@fujitsu.com</email>
      </address>
    </author>
    <author initials="G." surname="Mandyam" fullname="Giridhar Mandyam">
      <organization>AMD</organization>
      <address>
        <email>gmandyam@amd.com</email>
      </address>
    </author>
    <author initials="D." surname="Ma" fullname="Ding Ma">
      <organization>Alibaba Cloud</organization>
      <address>
        <email>xynnn@linux.alibaba.com</email>
      </address>
    </author>
    <date year="2025" month="September" day="23"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS</workgroup>
    <keyword>RATS</keyword>
    <keyword>attestation</keyword>
    <keyword>endorsement</keyword>
    <keyword>reference value</keyword>
    <abstract>
      <?line 84?>

<t>In the Remote Attestation Procedures (RATS) architecture, Verifiers require Endorsements and Reference Values to assess the trustworthiness of Attesters.
This document specifies the Concise Selector for Endorsements and Reference Values (CoSERV), a structured query/result format designed to facilitate the discovery and retrieval of these artifacts from various providers.
CoSERV defines a query language and corresponding result structure using CDDL, which can be serialized in CBOR format, enabling efficient interoperability across diverse systems.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-rats-wg.github.io/draft-ietf-rats-coserv/draft-ietf-rats-coserv.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-rats-coserv/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Remote ATtestation ProcedureS Working Group mailing list (<eref target="mailto:rats@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/rats/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/rats/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-rats-wg/draft-ietf-rats-coserv"/>.</t>
    </note>
  </front>
  <middle>
    <?line 90?>

<section anchor="sec-intro">
      <name>Introduction</name>
      <t>Remote Attestation Procedures (RATS) enable Relying Parties to evaluate the trustworthiness of remote Attesters by appraising Evidence.
This appraisal necessitates access to Endorsements and Reference Values, which are often distributed across multiple providers, including hardware manufacturers, firmware developers, and software vendors.
The lack of standardized methods for querying and retrieving these artifacts poses challenges in achieving seamless interoperability.</t>
      <t>The Concise Selector for Endorsements and Reference Values (CoSERV) addresses this challenge by defining a query language and a corresponding result structure for the transaction of artifacts between a provider and a consumer.
The query language format provides Verifiers with a standard way to specify the environment characteristics of Attesters, such that the relevant artifacts can be obtained from Endorsers and Reference Value Providers.
In turn, the result format allows those Endorsers and Reference Value Providers to package the artifacts within a standard structure.
This facilitates the efficient discovery and retrieval of relevant Endorsements and Reference Values from providers, maximising the re-use of common software tools and libraries within the transactions.</t>
      <t>The CoSERV query language is intended to form the input data type for tools and services that provide access to Endorsements and Reference Values.
The CoSERV result set is intended to form the corresponding output data type from those tools and services.</t>
      <t>Both the query language and the result set are designed for extensibility.
This addresses the need for a common baseline format to optimise for interoperability and software reuse, while maintaining the flexibility demanded by a dynamic and diverse ecosystem.</t>
      <t>The environment characteristics of Endorsements and Reference Values are derived from the equivalent concepts in CoRIM <xref target="I-D.ietf-rats-corim"/>.
CoSERV therefore borrows heavily from CoRIM, and shares some data types for its fields.
And, like CoRIM, the CoSERV schema is defined using CDDL <xref target="RFC8610"/>. A CoSERV query can be serialized in CBOR <xref target="STD94"/> format.</t>
      <t>In addition to the CBOR-based data formats for CoSERV queries and responses, this specification also defines API bindings and behaviours for the exchange of CoSERV queries and responses.
This is to facilitate standard interactions between CoSERV producers and consumers.
Standard API endpoints and behaviours will encourage the growth of interoperable software tools and modules, not only for parsing and emitting CoSERV-compliant data, but also for implementing the clients and services that need to exchange such data when acting in the capacity of the relevant RATS roles.
This will be of greater benefit to the software ecosystem than the CoSERV data format alone.
See <xref target="secapibindings"/> for the API binding specifications.</t>
      <section anchor="terminology-and-requirements-language">
        <name>Terminology and Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>This document uses terms and concepts defined by the RATS architecture.
For a complete glossary, see <xref section="4" sectionFormat="of" target="RFC9334"/>.</t>
        <t>This document uses terms and concepts defined by the CoRIM specification.
For a complete glossary, see <xref section="1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>.</t>
        <t>This document uses the terms <em>"actual state"</em> and <em>"reference state"</em> as defined in <xref section="2" sectionFormat="of" target="I-D.ietf-rats-endorsements"/>.</t>
        <t>The terminology from CBOR <xref target="STD94"/>, CDDL <xref target="RFC8610"/> and COSE <xref target="STD96"/> applies;
in particular, CBOR diagnostic notation is defined in <xref section="8" sectionFormat="of" target="STD94"/>
and <xref section="G" sectionFormat="of" target="RFC8610"/>. Terms and concepts are always referenced as proper nouns, i.e., with Capital Letters.</t>
      </section>
    </section>
    <section anchor="secaggregation">
      <name>Aggregation and Trust Models</name>
      <t>The roles of Endorser or Reference Value Provider might sometimes be fulfilled by aggregators, which collect from multiple supply chain sources, or even from other aggregators, in order to project a holistic view of the endorsed system.
The notion of such an aggregator is not explicit in the RATS architecture.
In practice, however, supply chains are complex and multi-layered.
Supply chain sources can include silicon manufacturers, device manufacturers, firmware houses, system integrators, service providers and more.
In practical terms, an Attester is likely to be a complex entity, formed of components from across such supply chains.
Evidence would be likewise structured, with contributions from different segments of the Attester's overall anatomy.
A Verifier for such Evidence may find it convenient to contact an aggregator as a single source of truth for Endorsements and Reference Values.
An aggregator would have intelligence about the Attester's complete anatomy and supply chain.
It would have the ability to contact all contributing supply chain actors for their individual Endorsements and Reference Values, before collecting them into a cohesive set, and delivering them to the Verifier as a single, ergonomic package.
In pure RATS terms, an aggregator is still an Endorser or a Reference Value Provider - or, more likely, both.
It is not a distinct role, and so there is no distinctly-modeled conveyance between an aggregator and a Verifier.
However, when consuming from an aggregator, the Verifier may need visibility of the aggregation process, possibly to the extent of needing to audit the results by inspecting the individual inputs that came from the original supply chain actors.
CoSERV addresses this need, catering equally for both aggregating and non-aggregating supply chain sources.</t>
      <t>To support deployments with aggregators, CoSERV allows for flexible trust models as follows.</t>
      <ul spacing="normal">
        <li>
          <t><strong>Shallow Trust</strong>: in this model, the consumer trusts the aggregator, solely and completely, to provide authentic descriptions of the endorsed system.
The consumer does not need to audit the results of the aggregation process.</t>
        </li>
        <li>
          <t><strong>Deep Trust</strong>: in this model, the consumer has a trust relationship with the aggregator, but does not deem this to be sufficient.
The consumer can still use the collected results from the aggregation process, where it is convenient to do so, but also needs to audit those results.</t>
        </li>
      </ul>
      <t>Any given CoSERV transaction can operate according to either model.
The consumer decides which model to use when it forms a query.
The CoSERV result payload can convey both the aggregated result and the audit trail as needed.
The payload size may be smaller when the shallow model is used, but the choice between the two models is a question for implementations and deployments.</t>
      <t>Although CoSERV is designed to support aggregation, it is not a requirement.
When aggregation is not used, CoSERV still fulfills the need for a standard conveyance mechanism between Verifiers and Endorsers or Reference Value Providers.</t>
    </section>
    <section anchor="secinfomodel">
      <name>CoSERV Information Model</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>CoSERV is designed to facilitate query-response transactions between a producer and a consumer.
In the RATS model, the producer is either an Endorser or a Reference Value Provider, and the consumer is a Verifier.
CoSERV defines a single top-level data type that can be used for both queries and result sets.
Queries are authored by the consumer (Verifier), while result sets are authored by the producer (Endorser or Reference Value Provider) in response to the query.
A CoSERV data object always contains a query.
When CoSERV is used to express a result set, the query is retained alongside the result set that was yielded by that query.
This allows consumers to verify a match between the query that was sent to the producer, and the query that was subsequently returned with the result set.
Such verification is useful because it mitigates security threats arising from any untrusted infrastructure or intermediaries that might reside between the producer and the consumer.
An example of this is caching in HTTP <xref target="STD98"/> and CoAP <xref target="RFC7252"/>.
It might be expensive to compute the result set for a query, which would make caching desirable.
However, if caching is managed by an untrusted intermediary, then there is a risk that such an untrusted intermediary might return incorrect results, either accidentally or maliciously.
Pairing the original query with each result set provides an end-to-end contract between the consumer and producer, mitigating such risks.
The transactional pattern between the producer and the consumer would be that the consumer begins the transaction by authoring a query and sending it to the producer as a CoSERV object.
The producer receives the query, computes results, and returns a new CoSERV object formed from the results along with the original query.
Notionally, the producer is "adding" the results to the query before sending it back to the consumer.</t>
      </section>
      <section anchor="secartifacts">
        <name>Artifacts</name>
        <t>Artifacts are what the consumer (Verifier) needs in order to verify and appraise Evidence from the Attester, and therefore they form the bulk of the response payload in a CoSERV transaction.
The common CoSERV query language recognises three artifact types.
These correspond to the three categories of endorsement artifact that can be identified natively in the RATS architecture:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Trust Anchor</strong>: A trust anchor is as defined in <xref target="RFC6024"/>.
An example of a trust anchor would be the public part of the asymmetric signing key that is used by the Attester to sign Evidence, such that the Verifier can verify the cryptographic signature.</t>
          </li>
          <li>
            <t><strong>Endorsed Value</strong>: An endorsed value is as defined in <xref section="1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>.
This represents a characteristic of the Attester that is not directly presented in the Evidence, such as certification data related to a hardware or firmware module.</t>
          </li>
          <li>
            <t><strong>Reference Value</strong>: A reference value is as defined in <xref section="1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>.
A reference value specifies an individual aspect of the Attester's desired state.
Reference values are sometimes informally called "golden values".
An example of a reference value would be the expected hash or checksum of a binary firmware or software image running in the Attester's environment.
Evidence from the Attester would then include claims about the Attester's actual state, which the Verifier can then compare with the reference values at Evidence appraisal time.</t>
          </li>
        </ul>
        <t>When artifacts are produced by an aggregator (see <xref target="secaggregation"/>), the following additional classifications apply:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Collected Artifacts</strong>: these refer to artifacts that were derived by the aggregator by collecting and presenting data from original supply chain sources, or from other aggregators.
Collected artifacts form a single holistic package, and provide the most ergonomic consumption experience for the Verifier.</t>
          </li>
          <li>
            <t><strong>Source Arfifacts</strong>: these refer to artifacts that were obtained directly from the original supply chain sources, and used as inputs into the aggregation process, allowing the aggregator to derive the collected artifacts.</t>
          </li>
        </ul>
        <t>In the shallow trust model of aggregation, only the collected artifacts are used by the consumer.
In the deep trust model, both the collected artifacts and the source artifacts are used.
The source artifacts allow the consumer to audit the collected artifacts and operate the trust-but-verify principle.</t>
      </section>
      <section anchor="secenvironments">
        <name>Environments</name>
        <t>The environment defines the scope (or scopes) in which the endorsement artifacts are applicable.
Given that the consumer of these artifacts is likely to be a Verifier in the RATS model, the typical interpretation of the environment would be that of an Attester that either has produced evidence, or is expected to produce evidence, that the Verifier needs to appraise.
The Verifier consequently needs to query the Endorser or Reference Value Provider for artifacts that are applicable in that environment.
There are three mutually-exclusive methods for defining the environment within a CoSERV query.
Exactly one of these three methods <bcp14>MUST</bcp14> be used for the query to be valid.
All three methods correspond to environments that are also defined within CoRIM <xref target="I-D.ietf-rats-corim"/>.</t>
        <ul spacing="normal">
          <li>
            <t><strong>Class</strong>: A class is an environment that is expected to be common to a group of similarly-constructed Attesters, who might therefore share the same set of endorsed characteristics.
An example of this might be a fleet of computing devices of the same model and manufacturer.</t>
          </li>
          <li>
            <t><strong>Instance</strong>: An instance is an environment that is unique to an individual and identifiable Attester, such as a single computing device or component.</t>
          </li>
          <li>
            <t><strong>Group</strong>: A group is a collection of common Attester instances that are collected together based on some defined semantics.
For example, Attesters may be put into groups for the purpose of anonymity.</t>
          </li>
        </ul>
        <section anchor="secstateful">
          <name>Stateful Environments</name>
          <t>In addition to specifying the Attester environment by class, instance, or group, it is sometimes necessary to constrain the target environment further by specifying aspects of its state.
This is because the applicability of Endorsements and Reference Values might vary, depending on these stateful properties.
Consider, for example, an Attester instance who signs Evidence using a derived attestation key, where the derivation algorithm is dependent on one or more aspects of the Attester's current state, such as the version number of an upgradable firmware component.
This example Attester would, at different points in its lifecycle, sign Evidence with different attestation keys, since the keys would change upon any firmware update.
To provide the correct public key to use as the trust anchor for verification, the Endorser would need to know the configured state of the Attester at the time the Evidence was produced.
Specifying such an Attester solely by its instance identifier is therefore insufficient for the Endorser to supply the correct artifact.
The environment specification would need to include these critical stateful aspects as well.
In CoRIM <xref target="I-D.ietf-rats-corim"/>, stateful environments are modeled as an environment identifier plus a collection of measurements, and CoSERV takes the same approach.
Therefore, any environment selector in a CoSERV query can optionally be enhanced with a collection of one or more measurements, which specify aspects of the target environment state that might materially impact the selection of artifacts.</t>
        </section>
      </section>
      <section anchor="queries">
        <name>Queries</name>
        <t>The purpose of a query is to allow the consumer (Verifier) to specify the artifacts that it needs.
The information that is conveyed in a CoSERV query includes the following:</t>
        <ul spacing="normal">
          <li>
            <t>A specification of the required artifact type: Reference Value, Endorsed Value or Trust Anchor.
See <xref target="secartifacts"/> for definitions of artifact types.
A single CoSERV query can only specify a single artifact type.</t>
          </li>
          <li>
            <t>A specification of the Attester's environment.
Environments can be selected according to Attester instance, group or class.
Additional properties of the environment state can be specified by adding one or more measurements to the selector.
See <xref target="secenvironments"/> for full definitions.
To facilitate efficient transactions, a single query can specify either multiple instances, multiple groups or multiple classes.
However, it is not possible to mix instance-based selectors, group-based selectors and class-based selectors in a single query.</t>
          </li>
          <li>
            <t>A timestamp, denoting the time at which the CoSERV query was sent.</t>
          </li>
          <li>
            <t>A switch to select the desired supply chain depth.
A CoSERV query can request collected artifacts, source artifacts, or both.
This switch is especially relevant when the CoSERV query is fulfilled by an aggregator.
The collected artifacts are intended for convenient consumption (according to the shallow trust model), while the source artifacts are principally useful for auditing (according to the deep trust model).
It is possible for a query to select for source artifacts only, without the collected artifacts.
This might happen when the consumer needs to inspect or audit artifacts from across the deep supply chain, while not requiring the convenience of the aggregated view.
It could also happen when the consumer is acting as an intermediate broker, gathering artifacts for delivery to another aggregator.
See <xref target="secaggregation"/> for details on aggregation, auditing and trust models.</t>
          </li>
        </ul>
      </section>
      <section anchor="result-sets">
        <name>Result Sets</name>
        <t>The result set contains the artifacts that the producer collected in response to the query.
The top-level structure of the result set consists of the following three items:</t>
        <ul spacing="normal">
          <li>
            <t>A collection of one or more result entries.
This will be a collection of either reference values, endorsed values or trust anchors.
See <xref target="secartifacts"/> for definitions of artifact types.
In the future, it may be possible to support additional artifact types via an extension mechanism.
Artifact types are never mixed in any single CoSERV result set.
The artifacts in the result collection therefore <bcp14>MUST</bcp14> match the single artifact type specified in the original CoSERV query.</t>
          </li>
          <li>
            <t>A timestamp indicating the expiry time of the entire result set.
Consumers <bcp14>MUST NOT</bcp14> consider any part of the result set to be valid after this expiry time.</t>
          </li>
          <li>
            <t>A collection of the original source materials from which the producer derived the correct artifacts to include in the result set.
These source materials are optional, and their intended purpose is auditing.
They are included only when requested by the original CoSERV query.
Source materials would typically be requested in cases where the consumer is not willing to place sole trust in the producer, and therefore needs an audit trail to enable additional verifications.</t>
          </li>
        </ul>
        <t>Each individual result entry combines a CoMID triple with an authority delegation chain.
CoMID triples are exactly as defined in <xref section="5.1.4" sectionFormat="of" target="I-D.ietf-rats-corim"/>.
Each CoMID triple will demonstrate the association between an environment matching that of the CoSERV query, and a single artifact such as a reference value, trust anchor or endorsed value.
The authority delegation chain is composed of one or more authority delegates.
Each authority delegate is represented by a public key or key identifier, which the consumer can check against its own set of trusted authorities.
The authority delegation chain serves to establish the provenance of the result entry, and enables the Verifier to evaluate the trustworthiness of the associated artifact.
The purpose of the authority delegation chain is to allow CoSERV responses to support decentralized trust models, where Verifiers may apply their own policy to determine which authorities are acceptable for different classes of artifact.</t>
        <t>Because each result entry combines a CoMID triple with an authority delegation chain, the entries are consequently known as quadruples (or "quads" for short).</t>
      </section>
    </section>
    <section anchor="secdatamodel">
      <name>CoSERV Data Model</name>
      <t>This section specifies the CBOR data model for CoSERV queries and result sets.</t>
      <t>CDDL is used to express rules and constraints of the data model for CBOR.
These rules must be strictly followed when creating or validating CoSERV data objects.</t>
      <t>The top-level CoSERV data structure is given by the following CDDL:</t>
      <sourcecode type="cddl"><![CDATA[
;# import comid-autogen

coserv = {
  &(profile: 0) => profile
  &(query: 1) => query
  ? &(results: 2) => results
}

profile = comid.oid-type / ~uri
]]></sourcecode>
      <section anchor="common-data-types">
        <name>Common Data Types</name>
        <t>CoSERV inherits the following types from the CoRIM data model <tt>class-map</tt>, <tt>$class-id-type-choice</tt>, <tt>$instance-id-type-choice</tt> and <tt>$group-id-type-choice</tt>.</t>
        <t>The collated CDDL is in <xref target="collated-cddl"/>.</t>
      </section>
      <section anchor="profile">
        <name>Profile</name>
        <t>In common with EAT and CoRIM, CoSERV supports the notion of profiles.
As with EAT and CoRIM, profiles are a way to extend or specialize the structure of a generic CoSERV query in order to cater for a specific use case or environment.</t>
        <t>In a CoSERV query, the profile can be identified by either a Uniform Resource Identifier (URI) or an Object Identifier (OID).
This convention is identical to how EAT profiles are identified using the <tt>eat_profile</tt> claim as described in <xref section="4.3.2" sectionFormat="of" target="I-D.ietf-rats-eat"/>.</t>
      </section>
      <section anchor="query-structure">
        <name>Query Structure</name>
        <t>The CoSERV query language enables Verifiers to specify the desired characteristics of Endorsements and Reference Values based on the environment in which they are applicable.</t>
        <t>The top-level structure of a CoSERV query is given by the following CDDL:</t>
        <sourcecode type="cddl"><![CDATA[
query = {
  &(artifact-type: 0) => artifact-type
  &(environment-selector: 1) => environment-selector-map
  &(timestamp: 2) => tdate ; RFC3339 date
  &(result-type: 3) => result-type
}

artifact-type = &(endorsed-values: 0)
                / &(trust-anchors: 1)
                / &(reference-values: 2)

result-type = &(collected-artifacts: 0)
              / &(source-artifacts: 1)
              / &(both: 2)
]]></sourcecode>
        <t>The meanings of these fields are detailed in the following subsections.</t>
        <section anchor="artifact-type">
          <name>Artifact Type</name>
          <t>The <tt>artifact-type</tt> field is the foremost discriminator of the query.
It is a top-level category selector. Its three permissible values are <tt>trust-anchors</tt> (codepoint 1), <tt>endorsed-values</tt> (codepoint 0) and <tt>reference-values</tt> (codepoint 2).</t>
          <t>See <xref target="secartifacts"/> for full definitions of artifact types.</t>
          <t>It is expected that implementations might choose to store these different categories of artifacts in different top-level stores or database tables.
Where this is the case, the <tt>artifact-type</tt> field serves to narrow the query down to the correct store or table.
Even where this is not the case, the discriminator is useful as a filter for the consumer, resulting in an efficiency gain by avoiding the transfer of unwanted data items.</t>
        </section>
        <section anchor="environment-selector">
          <name>Environment Selector</name>
          <t>The environment selector forms the main body of the query, and its CDDL is given below:</t>
          <sourcecode type="cddl"><![CDATA[
;# import comid-autogen

environment-selector-map = { selector }

stateful-class = [
  class: comid.class-map
  ? measurements: [ + comid.measurement-map ]
]

selector //= ( &(class: 0) => [
  + stateful-class
] )

stateful-instance = [
  instance: comid.$instance-id-type-choice
  ? measurements: [ + comid.measurement-map ]
]

selector //= ( &(instance: 1) => [
  + stateful-instance
] )

stateful-group = [
  group: comid.$group-id-type-choice
  ? measurements: [ + comid.measurement-map ]
]

selector //= ( &(group: 2) => [
  + stateful-group
] )
]]></sourcecode>
          <t>Environments can be specified according to instance, group or class. See <xref target="secenvironments"/> for details.</t>
          <t>Although these three environment definitions are mutually-exclusive in a CoSERV query, all three support multiple entries.
This is to gain efficiency by allowing the consumer (Verifier) to query for multiple artifacts in a single transaction.
For example, where artifacts are being indexed by instance, it would be possible to specify an arbitrary number of instances in a single query, and therefore obtain the artifacts for all of them in a single transaction.
Likewise for classes and groups.
However, it would not be possible for a single query to specify more than one kind of environment.
For example, it would not be possible to query for both class-level and instance-level artifacts in a single CoSERV transaction.</t>
          <t>All three environment selector types can optionally be enhanced with one or more <tt>measurement-map</tt> entries, which are used to express aspects of the environment state.
See <xref target="secstateful"/> for a description of stateful environments.</t>
          <section anchor="selector-semantics">
            <name>Selector Semantics</name>
            <t>When multiple environment selectors are present in a single query, such as multiple instances or multiple groups, the implementation of the artifact producer <bcp14>MUST</bcp14> consider these to be alternatives, and hence use a logical <tt>OR</tt> operation when applying the query to its internal data stores.</t>
            <t>Below is an illustrative example of how a CoSERV query for endorsed values, selecting for multiple Attester instances, might be transformed into a semantically-equivalent SQL database query:</t>
            <sourcecode type="sql"><![CDATA[
SELECT *
  FROM endorsed_values
 WHERE ( instance-id = "At6tvu/erQ==" ) OR
       ( instance-id = "iZl4ZVY=" )`
]]></sourcecode>
            <t>The same applies for class-based selectors; however, since class selectors are themselves composed of multiple inner fields, the implementation of the artifact producer <bcp14>MUST</bcp14> use a logical <tt>AND</tt> operation in consideration of the inner fields for each class.</t>
            <t>Also, for class-based selectors, any unset fields in the class are assumed to be wildcard (<tt>*</tt>), and therefore match any value.</t>
            <t>Below is an illustrative example of how a CoSERV query for reference values, selecting for multiple Attester classes, might be transformed into a semantically-equivalent SQL database query:</t>
            <sourcecode type="sql"><![CDATA[
SELECT *
  FROM reference_values
 WHERE ( class-id = "iZl4ZVY=" AND class-vendor = "ACME Inc." ) OR
       ( class-id = "31fb5abf-023e-4992-aa4e-95f9c1503bfa" )
]]></sourcecode>
          </section>
        </section>
        <section anchor="timestamp">
          <name>Timestamp</name>
          <t>The <tt>timestamp</tt> field records the date and time at which the query was made, formatted according to <xref section="3.4.1" sectionFormat="of" target="STD94"/>.
Implementations <bcp14>SHOULD</bcp14> populate this field with the current date and time when forming a CoSERV query.</t>
        </section>
        <section anchor="result-type">
          <name>Result Type</name>
          <t>The <tt>result-type</tt> field selects for either <tt>collected-artifacts</tt> (codepoint 0), <tt>source-artifacts</tt> (codepoint 1) or <tt>both</tt> (codepoint 2).
See <xref target="secaggregation"/> for definitions of source and collected artifacts.</t>
        </section>
      </section>
      <section anchor="result-set-structure">
        <name>Result Set Structure</name>
        <t>The result set structure is given by the following CDDL:</t>
        <sourcecode type="cddl"><![CDATA[
;# import cmw-autogen
;# import comid-autogen

results = {
  result-set
  &(expiry: 10) => tdate ; RFC3339 date
  ? &(source-artifacts: 11) => [ + cmw.cbor-record ]
}

result-set //= reference-values
result-set //= endorsed-values
result-set //= trust-anchors
result-set //= $$result-set-extensions

refval-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(rv-triple: 2) => comid.reference-triple-record
}

reference-values = (
  &(rvq: 0) => [ * refval-quad ]
)

endval-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(ev-triple: 2) => comid.endorsed-triple-record
}

cond-endval-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(ce-triple: 2) => comid.conditional-endorsement-triple-record
}

endorsed-values = (
  &(evq: 1) => [ * endval-quad ]
  &(ceq: 2) => [ * cond-endval-quad ]
)

ak-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(ak-triple: 2) => comid.attest-key-triple-record
}

cots-stmt = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(cots: 2) => cots
}

trust-anchors = (
  &(akq: 3) => [ * ak-quad ]
  &(tas: 4) => [ * cots-stmt ]
)

;
; import CoTS
;
cots = "TODO COTS"
]]></sourcecode>
      </section>
      <section anchor="secencoding">
        <name>Encoding Requirements</name>
        <t>Implementations may wish to use serialized CoSERV queries as canonical identifiers for artifact collections.
For example, a Reference Value Provider service may wish the cache the results of a CoSERV query to gain efficiency when responding to a future identical query.
For these use cases to be effective, it is essential that any given CoSERV query is always serialized to the same fixed sequence of CBOR bytes.
Therefore, CoSERV queries <bcp14>MUST</bcp14> always use CBOR deterministic encoding as specified in <xref section="4.2" sectionFormat="of" target="STD94"/>.
Further, CoSERV queries <bcp14>MUST</bcp14> use CBOR definite-length encoding.</t>
      </section>
      <section anchor="signed-coserv">
        <name>Cryptographic Binding Between Query and Result Set</name>
        <t>CoSERV is designed to ensure that any result set passed from a producer to a consumer is precisely the result set that corresponds to the consumer's original query.
This is the reason why the original query is always included along with the result set in the data model.
However, this measure is only sufficient in cases where the conveyance protocol guarantees that CoSERV result sets are always transacted over a secure channel without any untrusted intermediaries.
Wherever this is not the case, producers <bcp14>MUST</bcp14> create an additional cryptographic binding between the query and the result.
This is achieved by transacting the result set within a cryptographic envelope, with a signature added by the producer, which is verified by the consumer.
A CoSERV data object can be signed using COSE <xref target="STD96"/>.
A <tt>signed-coserv</tt> is a <tt>COSE_Sign1</tt> with the following layout:</t>
        <sourcecode type="cddl"><![CDATA[
signed-coserv = #6.18([
  protected: bytes .cbor signed-coserv-protected-hdr
  unprotected: signed-coserv-unprotected-hdr
  payload: bytes .cbor coserv
  signature: bytes
])
]]></sourcecode>
        <t>The payload <bcp14>MUST</bcp14> be the CBOR-encoded CoSERV.</t>
        <sourcecode type="cddl"><![CDATA[
signed-coserv-protected-hdr = {
  1 => int                            ; alg
  2 => "application/coserv+cbor" / 10000 ; cty
  * cose.label => cose.values
}

signed-coserv-unprotected-hdr = {
  * cose.label => cose.values
}

cose.label = int / text
cose.values = any
]]></sourcecode>
        <t>The protected header <bcp14>MUST</bcp14> include the signature algorithm identifier.
The protected header <bcp14>MUST</bcp14> include either the content type <tt>application/coserv+cbor</tt> or the CoAP Content-Format TBD1.
Other header parameters <bcp14>MAY</bcp14> be added to the header buckets, for example a <tt>kid</tt> that identifies the signing key.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="query-data-examples">
        <name>Query Data Examples</name>
        <t>This section provides some illustrative examples of valid CoSERV query objects.</t>
        <t>The following example shows a query for Reference Values scoped by a single class.
The <tt>artifact-type</tt> is set to 2 (<tt>reference-values</tt>), indicating a query for Reference Values.
The <tt>profile</tt> is given the example value of <tt>tag:example.com,2025:cc-platform#1.0.0</tt>.
Finally, the <tt>environment-selector</tt> uses the key 0 to select for class, and the value contains a single entry with illustrative settings for the identifier, vendor and model.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [ [
        {
          / class-id /  0: 560(h'00112233'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        }
      ] ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 1 / source-material /
  }
}
]]></sourcecode>
        <t>The next example is similar, but adds a second entry to the set of classes in the <tt>environment-map</tt>, showing how multiple classes can be queried at the same time.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [
        [ {
          / class-id /  0: 560(h'8999786556'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        } ],
        [ {
          / class-id /  0:
            37(h'31FB5ABF023E4992AA4E95F9C1503BFA')  / UUID /
        } ]
      ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 2 / both collected and source material /
  }
}
]]></sourcecode>
        <t>The following example shows a query for Reference Values scoped by instance.
Again, the <tt>artifact-type</tt> is set to 2, and <tt>profile</tt> is given a demonstration value. The <tt>environment-selector</tt> now uses the key 1 to select for instances, and the value contains two entries with example instance identifiers.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type / 0: 2, / reference-values /
    / environment-selector /  1: {
      / instance / 1: [
        [ 550(h'02DEADBEEFDEAD') ], / UEID /
        [ 560(h'8999786556') ]      / tagged-bytes /
      ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 0 / collected material /
  }
}
]]></sourcecode>
      </section>
      <section anchor="result-data-examples">
        <name>Result Data Examples</name>
        <t>This section provides some illustrative examples of valid CoSERV queries with their corresponding result sets.</t>
        <t>In this next example, the query is a reference value query based on class.</t>
        <t>The top-level structure is a map with three entries: <tt>profile</tt> (codepoint 0), <tt>query</tt> (codepoint 1) and <tt>results</tt> (codepoint 2).</t>
        <t>The profile and query structures are the same as in the previous examples.
The result structure is a map with two entries: <tt>expiry</tt> (codepoint 10) and <tt>rvq</tt> (codepoint 0).
The <tt>rvq</tt> (reference value quad) entry comprises the asserting authority and the asserted triples.
A single reference-value triple is shown in this example.
Its <tt>environment-map</tt>, as expected, is the same as the <tt>environment-map</tt> that was supplied in the query.
The rest of the structure is the <tt>measurement-map</tt> as defined in CoRIM <xref target="I-D.ietf-rats-corim"/>.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query / 1: {
    0: 2,
    1: {
      0: [ [
        {
          0: 560(h'8999786556')
        }
      ] ]
    },
    2: 0("2030-12-01T18:30:01Z"),
    3: 0
  },
  / results / 2: {
    0: [
      {
        1: [ 560(h'abcdef') ],
        2: [
          {
            0: {
              0: 560(h'8999786556')
            }
          },
          [
            {
              0: 37(h'31FB5ABF023E4992AA4E95F9C1503BFA'),
              1: {
                / version / 0: {
                  0: "1.2.3",
                  1: 16384
                },
                / svn / 1: 553(2)
              }
            }
          ]
        ]
      }
    ],
    10: 0("2030-12-13T18:30:02Z")
  }
}
]]></sourcecode>
        <t>The following example is for a query that requested the results be provided in the "source artifacts" format.
This means one or more original signed manifests containing information that satisfies the query criteria.</t>
        <t>Compared with the previous example, the <tt>rvq</tt> entry is empty, while the <tt>source-artifacts</tt> (codepoint 11) contain two CMW records <xref target="I-D.ietf-rats-msg-wrap"/>, each of which contains a (made up) manifest with the type "application/vnd.example.refvals".</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [ [
        {
          / class-id /  0: 560(h'00112233'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        }
      ] ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 1 / source-artifacts /
  },
  / results / 2: {
    / rvq / 0: [ ],
    / expiry / 10: 0("2030-12-13T18:30:02Z"),
    / source artifacts / 11: [
      [ "application/vnd.example.refvals", h'afaeadac' ],
      [ "application/vnd.example.refvals", h'adacabaa' ]
    ]
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="secapibindings">
      <name>API Bindings</name>
      <t>This section sets out the ways in which CoSERV queries and responses can be exchanged between software components and services using APIs.
The CoSERV data format itself is agnostic of any particular API model or transport.
The API bindings provided here are intended to complement the data format.
They will allow implementations to build the complete functionality of a CoSERV producer or consumer, in a way that is well-suited to any transport or interaction model that is needed.</t>
      <t>It is intended that these API definitions carry minimal additional semantics, since these are largely the preserve of the CoSERV query language itself.
The API definitions are merely vehicles for the exchange of CoSERV queries and responses.
Their purpose is to facilitate standard interactions that make the most effective use of available transports and protocols.</t>
      <t>The only API binding that is specified in this document is a request-response protocol that uses HTTP for transport.
This is a simple pattern, and likely to be a commonly occurring one for a variety of use cases.
Future specifications may define other API bindings.
Such future bindings may introduce further HTTP-based protocols.
Alternatively, they may define protocols for use with other transports, such as CoAP <xref target="RFC7252"/>.</t>
      <section anchor="secrrapi">
        <name>Request Response over HTTP</name>
        <t>This section defines and mandates the API endpoint behaviours for CoSERV request-response transactions over HTTP.
Implementations <bcp14>MUST</bcp14> provide all parts of the API as specified in this section.
The API is a simple protocol for the execution of CoSERV queries.
It takes a single CoSERV query as input, and produces a corresponding single CoSERV result set as the output.
It is a RESTful API because the CoSERV query serves as a unique and stable identifier of the target resource, where that resource is the set of artifacts being selected for by the query.
The encoding rules for CoSERV are deterministic as set out in <xref target="secencoding"/>.
This means that any given CoSERV query will always encode to the same sequence of bytes.
The Base64Url encoding (<xref section="2" sectionFormat="of" target="RFC7515"/>) of the byte sequence becomes the rightmost path segment of the URI used to identify the target resource.
The HTTP <tt>GET</tt> verb is then used with this URI to execute the query.
Further details are provided in the subsections below.</t>
        <t>Authentication is out of scope for this document.
Implementations <bcp14>MAY</bcp14> authenticate clients, for example for authorization or for preventing denial of service attacks.</t>
        <section anchor="secrrapidisco">
          <name>Discovery</name>
          <t>Clients discover CoSERV HTTP API endpoints by means of a well-known URI that is formed using the <tt>/.well-known/</tt> path prefix as defined in <xref target="RFC8615"/>.
This URI supplies a single discovery document that clients can use to locate the URIs of other API endpoints, in addition to finding out other relevant information about the configuration and capabilities of the service.</t>
          <t>Implementations that provide CoSERV HTTP API endpoints <bcp14>MUST</bcp14> also provide the discovery endpoint at the path <tt>/.well-known/coserv-configuration</tt>.
This endpoint <bcp14>MUST</bcp14> be available via an HTTP GET method with no additional query parameters, and <bcp14>MUST</bcp14> return an HTTP 200 (OK) response code unless prevented by an error condition outside the scope of this specification.</t>
          <t>The response body can be formatted using either JSON or CBOR, governed by standard HTTP content-type negotiation.
The media types defined for this purpose are <tt>application/coserv-discovery+json</tt> (for JSON-formatted documents) or <tt>application/coserv-discovery+cbor</tt> (for CBOR-formatted documents).
In either case, the endpoint implementation <bcp14>MUST</bcp14> provide a document that conforms to the CDDL schema as follows:</t>
          <sourcecode type="cddl"><![CDATA[
;# import rfc9711 as eat
;# import cmw-autogen as cmw
;# import rfc9052 as cose
;# import jwk-autogen as jwk

coserv-well-known-info = {
  version-label => version,
  capabilities-label => [ + capability ],
  api-endpoints-label => [ + endpoint ],
  result-verification-key-label => eat.JC<jwk.JWK_Set, cose.COSE_KeySet>
}

version-label = eat.JC<"version", 1>
capabilities-label = eat.JC<"capabilities", 2>
api-endpoints-label = eat.JC<"api-endpoints", 3>
result-verification-key-label = eat.JC<"result-verification-key", 4>

version = tstr

capability = {
  media-type-label => cmw.media-type,
  artifact-support-label => artifact-support
}

media-type-label = eat.JC<"media-type", 1>
artifact-support-label = eat.JC<"artifact-support", 2>

non-empty-array<M> = (M) .and ([ + any ])
artifact-support = non-empty-array<[ ? "source", ? "collected" ]>

endpoint = {
  name-label => tstr,
  path-label => tstr
}

name-label = eat.JC<"name", 1>
path-label = eat.JC<"path", 2>
]]></sourcecode>
          <section anchor="discovery-document-contents">
            <name>Discovery Document Contents</name>
            <t>This section defines how to populate and interpret the data fields in the discovery document.</t>
            <section anchor="version">
              <name>Version</name>
              <t>The version field is denoted by the label <tt>"version"</tt> in JSON documents and by the codepoint <tt>1</tt> in CBOR documents.
It is a Semantic Versioning (semver) string, which denotes the version and patch level of the service that is providing the API endpoints described by the document.
The semver string <bcp14>MUST</bcp14> conform to the ABNF defined in <xref target="SEMVER"/>.
Version numbers and patch levels are otherwise implementation-defined.</t>
            </section>
            <section anchor="capabilities">
              <name>Capabilities</name>
              <t>The capabilities field is denoted by the label <tt>"capabilities"</tt> in JSON documents and by the codepoint <tt>2</tt> in CBOR documents.
This field allows clients to discover the profiled variants of CoSERV for which the service implementation can satisfy queries and provide artifacts.
This field is structured as an array, which allows for service implementations that support more than one profile.
Each supported profile is indicated according to its parameterized media type, along with the categories of artifact that can be provided for the profile.
The artifact categories are <tt>source</tt> and <tt>collected</tt>, as described in <xref target="secartifacts"/>.
Each profile is paired with a non-empty set of artifact categories, allowing the service implementation to indicate whether it supports the retrieval of source artifacts, collected artifacts, or both.
This pairing caters for situations where the service implementation might support different combinations of artifact category for different profiles.</t>
            </section>
            <section anchor="api-endpoints">
              <name>API Endpoints</name>
              <t>The API endpoints field is denoted by the label <tt>"api-endpoints"</tt> in JSON documents and by the codepoint <tt>3</tt> in CBOR documents.
This field allows clients to derive the correct URL for making HTTP API calls.
The field is conceptually a map whose keys are the symbolic names of the APIs, and whose values are the URL path for the API endpoint.
The symbolic name <tt>CoSERVRequestResponse</tt> is defined for services that offer the transactional API described in <xref target="secrrapiquery"/>.
Service implementations that offer this API <bcp14>MUST</bcp14> include an entry with this name in the endpoints map field.</t>
            </section>
            <section anchor="result-verification-key">
              <name>Result Verification Key</name>
              <t>The result verification key is denoted by the label <tt>"result-verification-key"</tt> in JSON documents and by the codepoint <tt>4</tt> in CBOR documents.
This field provides one or more public keys that can be used for the cryptographic verification of CoSERV query results that are returned by the service implementation.
In JSON-formatted discovery documents, each key is a JSON Web Key (JWK) as defined in <xref target="RFC7517"/>.
In CBOR-formatted discovery documents, each key is a COSE Key as defined in <xref target="STD96"/>.</t>
            </section>
          </section>
          <section anchor="discovery-document-examples">
            <name>Discovery Document Examples</name>
            <t>In the following examples, the contents of bodies are informative examples only.</t>
            <t>Example HTTP request for retrieving the discovery document in JSON format:</t>
            <sourcecode type="http-message"><![CDATA[
GET /.well-known/coserv-configuration HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv-discovery+json
]]></sourcecode>
            <t>Corresponding HTTP response:</t>
            <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/coserv-discovery+json

Body (JSON)

=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "version": "1.2.3-beta",
  "capabilities": [
    {
      "media-type": "application/coserv+cose; profile=\"tag:vendor.\
                                       com,2025:cc_platform#1.0.0\"",
      "artifact-support": [
        "source",
        "collected"
      ]
    }
  ],
  "api-endpoints": [
    {
      "name": "CoSERVRequestResponse",
      "path": "endorsement-distribution/v1/coserv"
    }
  ],
  "result-verification-key": [
    {
      "alg": "ES256",
      "crv": "P-256",
      "kty": "EC",
      "x": "usWxHK2PmfnHKwXPS54m0kTcGJ90UiglWiGahtagnv8",
      "y": "IBOL-C3BttVivg-lSreASjpkttcsz-1rb7btKLv8EX4",
      "kid": "key1"
    }
  ]
}
]]></sourcecode>
            <t>Example HTTP request for retrieving the discovery document in CBOR format:</t>
            <sourcecode type="http-message"><![CDATA[
GET /.well-known/coserv-configuration HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv-discovery+cbor
]]></sourcecode>
            <t>Corresponding HTTP response:</t>
            <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/coserv-discovery+cbor

Body (in CBOR Extended Diagnostic Notation (EDN))

=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  / version / 1: "1.2.3-beta",
  / capabilities / 2: [
    {
      / media-type / 1: "application/coserv+cose; profile=\"tag:\
                                vendor.com,2025:cc_platform#1.0.0\"",
      / artifact-support / 2: [
        "source",
        "collected"
      ]
    }
  ],
  / api-endpoints / 3: [
    {
      / name / 1: "CoSERVRequestResponse",
      / path / 2: "endorsement-distribution/v1/coserv"
    }
  ],
  / result-verification-key / 4: [
    {
      / kty / 1: 2,
      / alg / 3: -7,
      / crv / -1: 1,
      / x / -2: h'1A2B3C4D',
      / y / -3: h'5E6F7A8B',
      / kid / 2: h'ABCDEF1234'
    }
  ]
}
]]></sourcecode>
          </section>
        </section>
        <section anchor="secrrapiquery">
          <name>Execute Query</name>
          <t>This endpoint executes a single CoSERV query and returns a CoSERV result set.</t>
          <t>The HTTP method is <tt>GET</tt>.</t>
          <t>The URL path is formed of the discovered <tt>coserv</tt> endpoint (as set out in <xref target="secrrapidisco"/>), followed by a path separator ('/'), followed by the CoSERV query to be executed, which is represented as a Base64Url encoding of the query's serialized CBOR byte sequence.</t>
          <t>There are no additional URL query parameters.</t>
          <t>Clients <bcp14>MUST</bcp14> set the HTTP <tt>Accept</tt> header to a suitably-profiled <tt>application/coserv+cose</tt> or <tt>application/coserv+cbor</tt> media type.</t>
          <t>Endpoint implementations <bcp14>MUST</bcp14> respond with an HTTP status code and response body according to one of the subheadings below.</t>
          <section anchor="responses">
            <name>Responses</name>
            <section anchor="successful-transaction-200">
              <name>Successful Transaction (200)</name>
              <t>This response indicates that the CoSERV query was executed successfully.</t>
              <t>Example HTTP request:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

GET /coserv/ogB4I3R... HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv+cose; \
        profile="tag:vendor.com,2025:cc_platform#1.0.0"
]]></sourcecode>
              <t>Example HTTP response:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/coserv+cose; \
              profile="tag:vendor.com,2025:cc_platform#1.0.0"

Body (in CBOR Extended Diagnostic Notation (EDN))

/ signed-coserv / 18([
  / protected / << {
    / alg / 1: -7 / ECDSA 256 /,
    / cty / 2 : "application/coserv+cbor"
  } >>,
  / unprotected / {},
  / payload / <<
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [ [
        {
          / class-id /  0: 560(h'00112233'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        }
      ] ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 0 / collected-material /
  },
  / results / 2: {
    / rvq / 0: [
      {
        / authorities / 1: [ 560(h'abcdef') ],
        / reference-triple / 2: [
          / environment-map / {
            / class / 0: {
              / class-id /  0: 560(h'00112233'),
              / vendor /    1: "Example Vendor",
              / model /     2: "Example Model"
            }
          },
          [
            / measurement-map / {
              / mval / 1: {
                / name / 11: "Component A",
                / digests / 2: [
                  [ 1, h'aa' ],
                  [ 2, h'bb' ]
                ]
              }
            },
            / measurement-map / {
              / mval / 1: {
                / name / 11: "Component B",
                / digests / 2: [
                  [ 1, h'cc' ],
                  [ 2, h'dd' ]
                ]
              }
            }
          ]
        ]
      }
    ],
    / expiry / 10: 0("2030-12-13T18:30:02Z")
  }
}
  >>,
  / signature / h'face5190'
])
]]></sourcecode>
            </section>
            <section anchor="failure-to-validate-query-400">
              <name>Failure to Validate Query (400)</name>
              <t>This response indicates that the supplied query is badly formed.</t>
              <t>Example HTTP request:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

GET /coserv/badquery... HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv+cose; \
        profile="tag:vendor.com,2025:cc_platform#1.0.0"
]]></sourcecode>
              <t>Example HTTP response:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 400 Bad Request
Content-Type: application/concise-problem-details+cbor

Body (in CBOR Extended Diagnostic Notation (EDN))

{
  / title /  -1: "Query validation failed",
  / detail / -2: "The query payload is not in CBOR format"
}
]]></sourcecode>
            </section>
            <section anchor="failure-to-negotiate-profile-406">
              <name>Failure to Negotiate Profile (406)</name>
              <t>This response indicates that the client has specified a CoSERV profile that is not understood or serviceable by the receiving endpoint implementation.</t>
              <t>Example HTTP request:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

GET /coserv/ogB4I3R... HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv+cose; \
        profile="tag:vendor.com,2025:cc_platform#2.0.0"
]]></sourcecode>
              <t>Example HTTP response:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 406 Not Acceptable
Content-Type: application/concise-problem-details+cbor

Body (in CBOR Extended Diagnostic Notation (EDN))

{
  / title /  -1: "Unsupported profile",
  / detail / -2: "Profile tag:vendor.com,2025:cc_platform#2.0.0 \
                  not supported",
}
]]></sourcecode>
            </section>
          </section>
        </section>
        <section anchor="secrrapicaching">
          <name>Caching</name>
          <t>In practical usage, the artifacts transacted via CoSERV queries (such as trust anchors and reference values) may change significantly less often than they are used.
For example, a Verifier needs to use the artifacts whenever it needs to verify or appraise Evidence from an Attester.
This might be a very frequent operation, for which a low latency is desirable.
By contrast, the artifacts themselves would vary only as a consequence of impactful changes to the Attester's desired state or environment.
One example of such an impactful change might be the roll-out of a firmware update, which would result in a new reference value for the impacted firmware component(s).
Such changes would tend to be relatively infrequent.
The caching of CoSERV artifacts is therefore beneficial for overall system performance.</t>
          <t>CoSERV is designed to facilitate both client-side and server-side caching by use of the standard HTTP caching mechanisms specified in <xref target="STD98"/>.
This includes use of the HTTP <tt>Cache-Control</tt> header and its associated directives.
It also includes the use of entity-tags (ETags).
The following features of CoSERV and its HTTP binding are specifically designed to favor caching implementations:</t>
          <ul spacing="normal">
            <li>
              <t>CoSERV queries form stable URL paths.
As specified in <xref target="secencoding"/>, any given CoSERV query will always serialize to the same fixed sequence of bytes.
This allows queries to be used as canonical and stable resource identifiers, which in turn allows them to function effectively as cache keys.</t>
            </li>
            <li>
              <t>The result set is cryptographically bound to the query.
As specified in <xref target="signed-coserv"/>, the origin server is required to return a signed response that combines the result set with the client's original query, in any deployment where untrusted intermediaries might exist.
This means that the client can always verify the integrity of the result on an end-to-end basis, even in the presence of caching infrastructure.</t>
            </li>
            <li>
              <t>The use of safe HTTP methods.
CoSERV queries are executed as read-only operations using HTTP <tt>GET</tt>.
The execution of a query does not modify any state on the server, which creates more opportunities for the re-use of cached results.</t>
            </li>
          </ul>
          <section anchor="http-caching-and-result-set-expiry">
            <name>HTTP Caching and Result Set Expiry</name>
            <t>CoSERV's data model includes a mandatory expiration timestamp on every result set.
This is an authoritative marker of the point in time at which the entire result set becomes invalid, and the query must be re-executed to obtain fresh results.
This timestamp is established by the origin server.</t>
            <t>In the presence of HTTP caching infrastructure, the origin server <bcp14>MUST NOT</bcp14> set HTTP cache directives (e.g. <tt>Cache-Control: max-age</tt>, <tt>Expires</tt>) such that the freshness lifetime of the HTTP response exceeds the result set expiry timestamp contained within the CoSERV result set payload.</t>
          </section>
          <section anchor="example-http-messages-with-caching">
            <name>Example HTTP Messages with Caching</name>
            <t>This section illustrates a caching scenario.</t>
            <t>In this example, the CoSERV HTTP API server endpoint is hosted by an HTTP origin (coserv.example), while a reverse proxy (cache.example) operates a public cache in front of the origin.</t>
            <t>Client A sends a request using a specific CoSERV query.
As the reverse proxy has a "cache miss" for the resource, it forwards the request to the origin.
The origin then constructs the response and returns it to the proxy.
The response includes cache-control headers that are compatible with the time-to-live associated with the computed result set.
For the purposes of this example, the HTTP response <tt>max-age</tt> has been set to 10 minutes and the <tt>s-maxage</tt> to 1 hour.
This means that the origin allows intermediaries (e.g., its CDN) to cache this resource for longer than the client.
The result is different caching behaviours between clients and intermediaries, which reduces the load on the origin by enabling CDNs to cache content for longer, while ensuring that clients receive fresher content.
Before forwarding it to the client, the proxy stores the response in its cache using the request URI as the cache key alongside the entry's time-to-live value.</t>
            <aside>
              <t>This "differential caching" strategy could be useful if the origin and its CDN have control plane APIs that the origin owner can use to instruct the CDN operator to purge certain cached entries <xref target="RFC8007"/>. For instance, in CoSERV, this feature could be used in case of an unexpected revocation.</t>
            </aside>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="576" width="576" viewBox="0 0 576 576" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 40,64 L 40,560" fill="none" stroke="black"/>
                  <path d="M 200,64 L 200,96" fill="none" stroke="black"/>
                  <path d="M 224,112 L 224,560" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,96" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,560" fill="none" stroke="black"/>
                  <path d="M 216,48 L 232,48" fill="none" stroke="black"/>
                  <path d="M 216,80 L 232,80" fill="none" stroke="black"/>
                  <path d="M 216,112 L 232,112" fill="none" stroke="black"/>
                  <path d="M 40,144 L 216,144" fill="none" stroke="black"/>
                  <path d="M 224,160 L 248,160" fill="none" stroke="black"/>
                  <path d="M 232,192 L 248,192" fill="none" stroke="black"/>
                  <path d="M 224,256 L 400,256" fill="none" stroke="black"/>
                  <path d="M 408,272 L 432,272" fill="none" stroke="black"/>
                  <path d="M 416,304 L 432,304" fill="none" stroke="black"/>
                  <path d="M 232,384 L 408,384" fill="none" stroke="black"/>
                  <path d="M 224,432 L 248,432" fill="none" stroke="black"/>
                  <path d="M 232,464 L 248,464" fill="none" stroke="black"/>
                  <path d="M 48,544 L 224,544" fill="none" stroke="black"/>
                  <path d="M 216,48 C 207.16936,48 200,55.16936 200,64" fill="none" stroke="black"/>
                  <path d="M 232,48 C 240.83064,48 248,55.16936 248,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 399.16936,48 392,55.16936 392,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 416.83064,48 424,55.16936 424,64" fill="none" stroke="black"/>
                  <path d="M 216,80 C 207.16936,80 200,72.83064 200,64" fill="none" stroke="black"/>
                  <path d="M 232,80 C 240.83064,80 248,72.83064 248,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 399.16936,80 392,72.83064 392,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 416.83064,80 424,72.83064 424,64" fill="none" stroke="black"/>
                  <path d="M 216,112 C 207.16936,112 200,104.83064 200,96" fill="none" stroke="black"/>
                  <path d="M 232,112 C 240.83064,112 248,104.83064 248,96" fill="none" stroke="black"/>
                  <path d="M 248,160 C 256.83064,160 264,167.16936 264,176" fill="none" stroke="black"/>
                  <path d="M 248,192 C 256.83064,192 264,184.83064 264,176" fill="none" stroke="black"/>
                  <path d="M 432,272 C 440.83064,272 448,279.16936 448,288" fill="none" stroke="black"/>
                  <path d="M 432,304 C 440.83064,304 448,296.83064 448,288" fill="none" stroke="black"/>
                  <path d="M 248,432 C 256.83064,432 264,439.16936 264,448" fill="none" stroke="black"/>
                  <path d="M 248,464 C 256.83064,464 264,456.83064 264,448" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="424,304 412,298.4 412,309.6" fill="black" transform="rotate(180,416,304)"/>
                  <polygon class="arrowhead" points="408,256 396,250.4 396,261.6" fill="black" transform="rotate(0,400,256)"/>
                  <polygon class="arrowhead" points="240,464 228,458.4 228,469.6" fill="black" transform="rotate(180,232,464)"/>
                  <polygon class="arrowhead" points="240,384 228,378.4 228,389.6" fill="black" transform="rotate(180,232,384)"/>
                  <polygon class="arrowhead" points="240,192 228,186.4 228,197.6" fill="black" transform="rotate(180,232,192)"/>
                  <polygon class="arrowhead" points="224,144 212,138.4 212,149.6" fill="black" transform="rotate(0,216,144)"/>
                  <polygon class="arrowhead" points="56,544 44,538.4 44,549.6" fill="black" transform="rotate(180,48,544)"/>
                  <circle cx="40" cy="64" r="6" class="opendot" fill="white" stroke="black"/>
                  <g class="text">
                    <text x="28" y="36">client</text>
                    <text x="64" y="36">A</text>
                    <text x="224" y="36">cache.example</text>
                    <text x="412" y="36">coserv.example</text>
                    <text x="80" y="132">GET</text>
                    <text x="144" y="132">ogB4I3RhZ..</text>
                    <text x="312" y="148">lookup(obB4I3RhZ..)</text>
                    <text x="252" y="212">MISS</text>
                    <text x="264" y="244">GET</text>
                    <text x="328" y="244">ogB4I3RhZ..</text>
                    <text x="488" y="276">compute</text>
                    <text x="484" y="292">result</text>
                    <text x="472" y="308">set</text>
                    <text x="256" y="324">200</text>
                    <text x="284" y="324">OK</text>
                    <text x="448" y="324">(expiry</text>
                    <text x="488" y="324">=</text>
                    <text x="512" y="324">now</text>
                    <text x="536" y="324">+</text>
                    <text x="560" y="324">1h)</text>
                    <text x="260" y="340">C-C:</text>
                    <text x="332" y="340">max-age=600,</text>
                    <text x="336" y="356">s-maxage=3600</text>
                    <text x="292" y="372">#6.18([...])</text>
                    <text x="316" y="420">store(K=obB4I3RhZ..,</text>
                    <text x="340" y="436">V=#6.18([...],</text>
                    <text x="320" y="452">TTL=3600)</text>
                    <text x="72" y="484">200</text>
                    <text x="100" y="484">OK</text>
                    <text x="76" y="500">C-C:</text>
                    <text x="148" y="500">max-age=600,</text>
                    <text x="152" y="516">s-maxage=3600</text>
                    <text x="108" y="532">#6.18([...])</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
client A             cache.example          coserv.example
                         .---.                   .-.
    o                   |     |                 |   |
    |                   |'---'|                  '+'
    |                   |     |                   |
    |                    '-+-'                    |
    |   GET ogB4I3RhZ..    |                      |
    +--------------------->| lookup(obB4I3RhZ..)  |
    |                      +---.                  |
    |                      |    |                 |
    |                      |<--'                  |
    |                      | MISS                 |
    |                      |                      |
    |                      |   GET ogB4I3RhZ..    |
    |                      +--------------------->|
    |                      |                      +---.  compute
    |                      |                      |    | result
    |                      |                      |<--'  set
    |                      |  200 OK              | (expiry = now + 1h)
    |                      |  C-C: max-age=600,   |
    |                      |       s-maxage=3600  |
    |                      |  #6.18([...])        |
    |                      |<---------------------+
    |                      |                      |
    |                      | store(K=obB4I3RhZ.., |
    |                      +---.   V=#6.18([...], |
    |                      |    |  TTL=3600)      |
    |                      |<--'                  |
    |  200 OK              |                      |
    |  C-C: max-age=600,   |                      |
    |       s-maxage=3600  |                      |
    |  #6.18([...])        |                      |
    |<---------------------+                      |
    |                      |                      |
]]></artwork>
            </artset>
            <t>At a later point, after 2 minutes, a different client B makes the same request.
This time, the request generates a "cache hit" event on the proxy.
The response is therefore served from the public cache, bypassing the origin.
This reduces the load on the origin, where computing the result set is generally costly, as well as reducing the overall latency of the transaction.
Client B operates a local cache, where it stores a copy of the response.</t>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="472" viewBox="0 0 472 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 24,80 L 24,96" fill="none" stroke="black"/>
                  <path d="M 40,112 L 40,400" fill="none" stroke="black"/>
                  <path d="M 56,80 L 56,96" fill="none" stroke="black"/>
                  <path d="M 200,64 L 200,96" fill="none" stroke="black"/>
                  <path d="M 224,112 L 224,400" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,96" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,400" fill="none" stroke="black"/>
                  <path d="M 216,48 L 232,48" fill="none" stroke="black"/>
                  <path d="M 216,80 L 232,80" fill="none" stroke="black"/>
                  <path d="M 216,112 L 232,112" fill="none" stroke="black"/>
                  <path d="M 40,144 L 216,144" fill="none" stroke="black"/>
                  <path d="M 224,160 L 248,160" fill="none" stroke="black"/>
                  <path d="M 232,192 L 248,192" fill="none" stroke="black"/>
                  <path d="M 48,304 L 224,304" fill="none" stroke="black"/>
                  <path d="M 40,352 L 64,352" fill="none" stroke="black"/>
                  <path d="M 48,384 L 64,384" fill="none" stroke="black"/>
                  <path d="M 216,48 C 207.16936,48 200,55.16936 200,64" fill="none" stroke="black"/>
                  <path d="M 232,48 C 240.83064,48 248,55.16936 248,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 399.16936,48 392,55.16936 392,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 416.83064,48 424,55.16936 424,64" fill="none" stroke="black"/>
                  <path d="M 40,64 C 31.16936,64 24,71.16936 24,80" fill="none" stroke="black"/>
                  <path d="M 40,64 C 48.83064,64 56,71.16936 56,80" fill="none" stroke="black"/>
                  <path d="M 216,80 C 207.16936,80 200,72.83064 200,64" fill="none" stroke="black"/>
                  <path d="M 232,80 C 240.83064,80 248,72.83064 248,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 399.16936,80 392,72.83064 392,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 416.83064,80 424,72.83064 424,64" fill="none" stroke="black"/>
                  <path d="M 40,96 C 31.16936,96 24,88.83064 24,80" fill="none" stroke="black"/>
                  <path d="M 40,96 C 48.83064,96 56,88.83064 56,80" fill="none" stroke="black"/>
                  <path d="M 40,112 C 31.16936,112 24,104.83064 24,96" fill="none" stroke="black"/>
                  <path d="M 40,112 C 48.83064,112 56,104.83064 56,96" fill="none" stroke="black"/>
                  <path d="M 216,112 C 207.16936,112 200,104.83064 200,96" fill="none" stroke="black"/>
                  <path d="M 232,112 C 240.83064,112 248,104.83064 248,96" fill="none" stroke="black"/>
                  <path d="M 248,160 C 256.83064,160 264,167.16936 264,176" fill="none" stroke="black"/>
                  <path d="M 248,192 C 256.83064,192 264,184.83064 264,176" fill="none" stroke="black"/>
                  <path d="M 64,352 C 72.83064,352 80,359.16936 80,368" fill="none" stroke="black"/>
                  <path d="M 64,384 C 72.83064,384 80,376.83064 80,368" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="240,192 228,186.4 228,197.6" fill="black" transform="rotate(180,232,192)"/>
                  <polygon class="arrowhead" points="224,144 212,138.4 212,149.6" fill="black" transform="rotate(0,216,144)"/>
                  <polygon class="arrowhead" points="56,384 44,378.4 44,389.6" fill="black" transform="rotate(180,48,384)"/>
                  <polygon class="arrowhead" points="56,304 44,298.4 44,309.6" fill="black" transform="rotate(180,48,304)"/>
                  <g class="text">
                    <text x="28" y="36">client</text>
                    <text x="64" y="36">B</text>
                    <text x="224" y="36">cache.example</text>
                    <text x="412" y="36">coserv.example</text>
                    <text x="80" y="132">GET</text>
                    <text x="144" y="132">ogB4I3RhZ..</text>
                    <text x="312" y="148">lookup(obB4I3RhZ..)</text>
                    <text x="248" y="212">HIT</text>
                    <text x="72" y="228">200</text>
                    <text x="100" y="228">OK</text>
                    <text x="76" y="244">C-C:</text>
                    <text x="148" y="244">max-age=480,</text>
                    <text x="152" y="260">s-maxage=3480</text>
                    <text x="80" y="276">Etag:</text>
                    <text x="128" y="276">"xyz"</text>
                    <text x="108" y="292">#6.18([...])</text>
                    <text x="132" y="340">store(K=obB4I3RhZ..,</text>
                    <text x="156" y="356">V=#6.18([...],</text>
                    <text x="132" y="372">TTL=480)</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
client B             cache.example          coserv.example
                         .---.                   .-.
   .-.                  |     |                 |   |
  |   |                 |'---'|                  '+'
  |'-'|                 |     |                   |
   '+'                   '-+-'                    |
    |   GET ogB4I3RhZ..    |                      |
    +--------------------->| lookup(obB4I3RhZ..)  |
    |                      +---.                  |
    |                      |    |                 |
    |                      |<--'                  |
    |                      | HIT                  |
    |  200 OK              |                      |
    |  C-C: max-age=480,   |                      |
    |       s-maxage=3480  |                      |
    |  Etag: "xyz"         |                      |
    |  #6.18([...])        |                      |
    |<---------------------+                      |
    |                      |                      |
    | store(K=obB4I3RhZ.., |                      |
    +---.   V=#6.18([...], |                      |
    |    |  TTL=480)       |                      |
    |<--'                  |                      |
    |                      |                      |
]]></artwork>
            </artset>
            <t>After 9 more minutes, B is instructed to make the same request again.
The request generates a "cache hit" event on the local cache.
However, the cached resource is become stale and needs to be revalidated.
Therefore, B sends a conditional request to the proxy.
The request generates a "cache hit" event on the proxy where the resource is still fresh due to the differential caching behaviour dictated by the original response from the origin.
The proxy returns a 304 (Not modified) status code, which instructs the client to reuse its local copy of the response.</t>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="480" viewBox="0 0 480 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 24,80 L 24,96" fill="none" stroke="black"/>
                  <path d="M 40,112 L 40,400" fill="none" stroke="black"/>
                  <path d="M 56,80 L 56,96" fill="none" stroke="black"/>
                  <path d="M 200,64 L 200,96" fill="none" stroke="black"/>
                  <path d="M 224,112 L 224,400" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,96" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,400" fill="none" stroke="black"/>
                  <path d="M 216,48 L 232,48" fill="none" stroke="black"/>
                  <path d="M 216,80 L 232,80" fill="none" stroke="black"/>
                  <path d="M 216,112 L 232,112" fill="none" stroke="black"/>
                  <path d="M 40,144 L 64,144" fill="none" stroke="black"/>
                  <path d="M 48,176 L 64,176" fill="none" stroke="black"/>
                  <path d="M 40,256 L 216,256" fill="none" stroke="black"/>
                  <path d="M 224,272 L 248,272" fill="none" stroke="black"/>
                  <path d="M 232,304 L 248,304" fill="none" stroke="black"/>
                  <path d="M 48,384 L 224,384" fill="none" stroke="black"/>
                  <path d="M 216,48 C 207.16936,48 200,55.16936 200,64" fill="none" stroke="black"/>
                  <path d="M 232,48 C 240.83064,48 248,55.16936 248,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 399.16936,48 392,55.16936 392,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 416.83064,48 424,55.16936 424,64" fill="none" stroke="black"/>
                  <path d="M 40,64 C 31.16936,64 24,71.16936 24,80" fill="none" stroke="black"/>
                  <path d="M 40,64 C 48.83064,64 56,71.16936 56,80" fill="none" stroke="black"/>
                  <path d="M 216,80 C 207.16936,80 200,72.83064 200,64" fill="none" stroke="black"/>
                  <path d="M 232,80 C 240.83064,80 248,72.83064 248,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 399.16936,80 392,72.83064 392,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 416.83064,80 424,72.83064 424,64" fill="none" stroke="black"/>
                  <path d="M 40,96 C 31.16936,96 24,88.83064 24,80" fill="none" stroke="black"/>
                  <path d="M 40,96 C 48.83064,96 56,88.83064 56,80" fill="none" stroke="black"/>
                  <path d="M 40,112 C 31.16936,112 24,104.83064 24,96" fill="none" stroke="black"/>
                  <path d="M 40,112 C 48.83064,112 56,104.83064 56,96" fill="none" stroke="black"/>
                  <path d="M 216,112 C 207.16936,112 200,104.83064 200,96" fill="none" stroke="black"/>
                  <path d="M 232,112 C 240.83064,112 248,104.83064 248,96" fill="none" stroke="black"/>
                  <path d="M 64,144 C 72.83064,144 80,151.16936 80,160" fill="none" stroke="black"/>
                  <path d="M 64,176 C 72.83064,176 80,168.83064 80,160" fill="none" stroke="black"/>
                  <path d="M 248,272 C 256.83064,272 264,279.16936 264,288" fill="none" stroke="black"/>
                  <path d="M 248,304 C 256.83064,304 264,296.83064 264,288" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="240,304 228,298.4 228,309.6" fill="black" transform="rotate(180,232,304)"/>
                  <polygon class="arrowhead" points="224,256 212,250.4 212,261.6" fill="black" transform="rotate(0,216,256)"/>
                  <polygon class="arrowhead" points="56,384 44,378.4 44,389.6" fill="black" transform="rotate(180,48,384)"/>
                  <polygon class="arrowhead" points="56,176 44,170.4 44,181.6" fill="black" transform="rotate(180,48,176)"/>
                  <g class="text">
                    <text x="28" y="36">client</text>
                    <text x="64" y="36">B</text>
                    <text x="232" y="36">cache.example</text>
                    <text x="420" y="36">coserv.example</text>
                    <text x="128" y="132">lookup(obB4I3RhZ..)</text>
                    <text x="64" y="196">HIT</text>
                    <text x="112" y="196">(stale)</text>
                    <text x="64" y="228">GET</text>
                    <text x="128" y="228">ogB4I3RhZ..</text>
                    <text x="128" y="244">If-None-Match:"xyz"</text>
                    <text x="248" y="324">HIT</text>
                    <text x="72" y="340">304</text>
                    <text x="104" y="340">Not</text>
                    <text x="156" y="340">modified</text>
                    <text x="76" y="356">C-C:</text>
                    <text x="140" y="356">max-age=0,</text>
                    <text x="152" y="372">s-maxage=3060</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
client B              cache.example          coserv.example
                         .---.                   .-.
   .-.                  |     |                 |   |
  |   |                 |'---'|                  '+'
  |'-'|                 |     |                   |
   '+'                   '-+-'                    |
    | lookup(obB4I3RhZ..)  |                      |
    +---.                  |                      |
    |    |                 |                      |
    |<--'                  |                      |
    | HIT (stale)          |                      |
    |                      |                      |
    | GET ogB4I3RhZ..      |                      |
    | If-None-Match:"xyz"  |                      |
    +--------------------->|                      |
    |                      +---.                  |
    |                      |    |                 |
    |                      |<--'                  |
    |                      | HIT                  |
    |  304 Not modified    |                      |
    |  C-C: max-age=0,     |                      |
    |       s-maxage=3060  |                      |
    |<---------------------+                      |
    |                      |                      |
]]></artwork>
            </artset>
          </section>
        </section>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t><cref anchor="rfced">RFC Editor:</cref> please remove this section prior to publication.</t>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>.
The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.
Please note that the listing of any individual implementation here does not imply endorsement by the IETF.
Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a catalog of available implementations or their features.
Readers are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.
It is up to the individual working groups to use this information as they see fit".</t>
      <section anchor="veraison">
        <name>Veraison</name>
        <t>Responsible Organisation: Veraison (open source project within the Confidential Computing Consortium).</t>
        <t>Location: https://github.com/veraison</t>
        <t>Description: Veraison provides components that can be used to build a Verifier, and also exemplifies adjacent RATS roles such as the Relying Party.
There is an active effort to extend Veraison so that it can act in the capacity of an Endorser or Reference Value Provider, showing how CoSERV can be used as a query language for such services.
This includes library code to assist with the creation, parsing and manipulation of CoSERV queries.</t>
        <t>Level of Maturity: This is a proof-of-concept prototype implementation.</t>
        <t>License: Apache-2.0.</t>
        <t>Coverage: This implementation covers all aspects of the CoSERV query language.</t>
        <t>Contact: Thomas Fossati, Thomas.Fossati@linaro.org</t>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>The CoSERV data type serves an auxiliary function in the RATS architecture.
It does not directly convey Evidence, Endorsements, Reference Values, Policies or Attestation Results.
CoSERV exists only to facilitate the interactions between the Verifier and the Endorser or Reference Value Provider roles.
Consequently, there are fewer security considerations for CoSERV, particularly when compared with data objects such as EAT or CoRIM.</t>
      <t>Certain security characteristics are desirable for interactions between the Verifier and the Endorser or Reference Value Provider.
However, these characteristics would be the province of the specific implementations of these roles, and of the transport protocols in between them.
They would not be the province of the CoSERV data object itself.
Examples of such desirable characteristics might be:</t>
      <ul spacing="normal">
        <li>
          <t>The Endorser or Reference Value Provider is available to the Verifier when needed.</t>
        </li>
        <li>
          <t>The Verifier is authorised to query data from the Endorser or Reference Value Provider.</t>
        </li>
        <li>
          <t>Queries cannot be intercepted or undetectably modified by an entity that is interposed between the Verifier and the Endorser or Reference Value Provider.</t>
        </li>
      </ul>
      <section anchor="forming-native-database-queries-from-coserv">
        <name>Forming Native Database Queries from CoSERV</name>
        <t>Implementations should take care when transforming CoSERV queries into native query types that are compatible with their underlying storage technology (such as SQL queries).
There is a risk of injection attacks arising from poorly-formed or maliciously-formed CoSERV queries.
Implementations must ensure that suitable sanitization procedures are in place when performing such translations.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>A CoSERV query can potentially contain privacy-sensitive information.
Specifically, the <tt>environment-selector</tt> field of the query may reference identifiable Attester instances in some cases.
This concern naturally also extends to the data objects that might be returned to the consumer in response to the query, although the specifications of such data objects are beyond the scope of this document.
Implementations should ensure that appropriate attention is paid to this.
Suitable mitigations include the following:</t>
      <ul spacing="normal">
        <li>
          <t>The use of authenticated secure channels between the producers and the consumers of CoSERV queries and returned artifacts.</t>
        </li>
        <li>
          <t>Collating Attester instances into anonymity groups, and referencing the groups rather than the individual instances.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t><cref anchor="rfced_1">RFC Editor:</cref> replace "RFCthis" with the RFC number assigned to this document.</t>
      <section anchor="media-types-registrations">
        <name>Media Types Registrations</name>
        <t>IANA is requested to add the following media types to the "Media Types" registry <xref target="IANA.media-types"/>.</t>
        <table anchor="tab-mc-regs">
          <name>CoSERV Media Types</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>coserv+cbor</tt></td>
              <td align="left">
                <tt>application/coserv+cbor</tt></td>
              <td align="left">
                <xref target="secdatamodel"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv+cose</tt></td>
              <td align="left">
                <tt>application/coserv+cose</tt></td>
              <td align="left">
                <xref target="signed-coserv"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv-discovery+cbor</tt></td>
              <td align="left">
                <tt>application/coserv-discovery+cbor</tt></td>
              <td align="left">
                <xref target="secrrapidisco"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv-discovery+json</tt></td>
              <td align="left">
                <tt>application/coserv-discovery+json</tt></td>
              <td align="left">
                <xref target="secrrapidisco"/> of RFCthis</td>
            </tr>
          </tbody>
        </table>
        <section anchor="applicationcoservcbor">
          <name><tt>application/coserv+cbor</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv+cbor</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>"profile" (CoSERV profile in string format.  OIDs must use the dotted-decimal notation.)</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (CBOR)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/cbor". (No fragment identification syntax is currently defined for "application/cbor".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoservcose">
          <name><tt>application/coserv+cose</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t><tt>application</tt></t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t><tt>coserv+cose</tt></t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a (cose-type is explicitly not supported, as it is understood to be "cose-sign1")</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>"profile" CoSERV profile in string format.
OIDs must use the dotted-decimal notation.
Note that the <tt>cose-type</tt> parameter is explicitly not supported, as it is understood to be <tt>"cose-sign1"</tt>.</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration?</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoserv-discoverycbor">
          <name><tt>application/coserv-discovery+cbor</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv-discovery+cbor</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (CBOR)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/cbor". (No fragment identification syntax is currently defined for "application/cbor".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoserv-discoveryjson">
          <name><tt>application/coserv-discovery+json</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv-discovery+json</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (JSON is UTF-8-encoded text)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/json". (No fragment identification syntax is currently defined for "application/json".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="coap-content-formats">
        <name>CoAP Content-Formats</name>
        <t>IANA is requested to register the following Content-Format IDs in the "CoAP Content-Formats" registry, within the "Constrained RESTful Environments (CoRE) Parameters" registry group <xref target="IANA.core-parameters"/>:</t>
        <table align="left">
          <name>New CoAP Content Formats</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/coserv+cbor</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">
                <xref target="secdatamodel"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">application/coserv+cose</td>
              <td align="left">-</td>
              <td align="left">TBD2</td>
              <td align="left">
                <xref target="signed-coserv"/> of RFCthis</td>
            </tr>
          </tbody>
        </table>
        <t>If possible, TBD1 and TBD2 should be assigned in the 256..9999 range.</t>
      </section>
      <section anchor="well-known-uri-for-coserv-configuration">
        <name>Well-Known URI for CoSERV Configuration</name>
        <t>IANA is requested to register the following in the "Well-Known URIs" registry <xref target="IANA.well-known-uris"/>:</t>
        <t>URI suffix: coserv-configuration</t>
        <t>Change controller: IETF</t>
        <t>Specification document: RFCthis</t>
        <t>Related information: N/A</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="STD96">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="STD94">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="I-D.ietf-rats-corim">
          <front>
            <title>Concise Reference Integrity Manifest</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>arm</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Intel</organization>
            </author>
            <author fullname="Wei Pan" initials="W." surname="Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   Remote Attestation Procedures (RATS) enable Relying Parties to assess
   the trustworthiness of a remote Attester and therefore to decide
   whether or not to engage in secure interactions with it.  Evidence
   about trustworthiness can be rather complex and it is deemed
   unrealistic that every Relying Party is capable of the appraisal of
   Evidence.  Therefore that burden is typically offloaded to a
   Verifier.  In order to conduct Evidence appraisal, a Verifier
   requires not only fresh Evidence from an Attester, but also trusted
   Endorsements and Reference Values from Endorsers and Reference Value
   Providers, such as manufacturers, distributors, or device owners.
   This document specifies the information elements for representing
   Endorsements and Reference Values in CBOR format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-corim-08"/>
        </reference>
        <reference anchor="I-D.ietf-rats-msg-wrap">
          <front>
            <title>RATS Conceptual Messages Wrapper (CMW)</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Independent</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <author fullname="Dionna Glaze" initials="D." surname="Glaze">
              <organization>Google LLC</organization>
            </author>
            <date day="12" month="August" year="2025"/>
            <abstract>
              <t>   The Remote Attestation Procedures architecture (RFC 9334) defines
   several types of conceptual messages, such as Evidence, Attestation
   Results, Endorsements, and Reference Values.  These messages can
   appear in different formats and be transported via various protocols.

   This document introduces the Conceptual Message Wrapper (CMW) that
   provides a common structure to encapsulate these messages.  It
   defines a dedicated CBOR tag, corresponding JSON Web Token (JWT) and
   CBOR Web Token (CWT) claims, and an X.509 extension.

   This allows CMWs to be used in CBOR-based protocols, web APIs using
   JWTs and CWTs, and PKIX artifacts like X.509 certificates.
   Additionally, the draft defines a media type and a CoAP content
   format to transport CMWs over protocols like HTTP, MIME, and CoAP.

   The goal is to improve the interoperability and flexibility of remote
   attestation protocols.  By introducing a shared message format like
   the CMW, we can consistently support different attestation message
   types, evolve message serialization formats without breaking
   compatibility, and avoid having to redefine how messages are handled
   in each protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-msg-wrap-17"/>
        </reference>
        <reference anchor="SEMVER" target="https://semver.org/spec/v2.0.0.html">
          <front>
            <title>Semantic Versioning 2.0.0</title>
            <author>
              <organization/>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.well-known-uris" target="https://www.iana.org/assignments/well-known-uris">
          <front>
            <title>Well-Known URIs</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <referencegroup anchor="STD98" target="https://www.rfc-editor.org/info/std98">
          <reference anchor="RFC9111" target="https://www.rfc-editor.org/info/rfc9111">
            <front>
              <title>HTTP Caching</title>
              <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
              <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
              <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
              <date month="June" year="2022"/>
              <abstract>
                <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
                <t>This document obsoletes RFC 7234.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="98"/>
            <seriesInfo name="RFC" value="9111"/>
            <seriesInfo name="DOI" value="10.17487/RFC9111"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC6024">
          <front>
            <title>Trust Anchor Management Requirements</title>
            <author fullname="R. Reddy" initials="R." surname="Reddy"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>A trust anchor represents an authoritative entity via a public key and associated data. The public key is used to verify digital signatures, and the associated data is used to constrain the types of information for which the trust anchor is authoritative. A relying party uses trust anchors to determine if a digitally signed object is valid by verifying a digital signature using the trust anchor's public key, and by enforcing the constraints expressed in the associated data for the trust anchor. This document describes some of the problems associated with the lack of a standard trust anchor management mechanism and defines requirements for data formats and push-based protocols designed to address these problems. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6024"/>
          <seriesInfo name="DOI" value="10.17487/RFC6024"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="I-D.ietf-rats-endorsements">
          <front>
            <title>RATS Endorsements</title>
            <author fullname="Dave Thaler" initials="D." surname="Thaler">
              <organization>Armidale Consulting</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <date day="25" month="August" year="2025"/>
            <abstract>
              <t>   In the IETF Remote Attestation Procedures (RATS) architecture, a
   Verifier accepts Evidence and, using Appraisal Policy typically with
   additional input from Endorsements and Reference Values, generates
   Attestation Results in formats that are useful for Relying Parties.
   This document illustrates the purpose and role of Endorsements and
   discusses some considerations in the choice of message format for
   Endorsements in the scope of the RATS architecture.

   This document does not aim to define a conceptual message format for
   Endorsements and Reference Values.  Instead, it extends RFC9334 to
   provide further details on Reference Values and Endorsements, as
   these topics were outside the scope of the RATS charter when RFC9334
   was developed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-endorsements-07"/>
        </reference>
        <reference anchor="I-D.ietf-rats-eat">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <author fullname="Giridhar Mandyam" initials="G." surname="Mandyam">
              <organization>Mediatek USA</organization>
            </author>
            <author fullname="Jeremy O'Donoghue" initials="J." surname="O'Donoghue">
              <organization>Qualcomm Technologies Inc.</organization>
            </author>
            <author fullname="Carl Wallace" initials="C." surname="Wallace">
              <organization>Red Hound Software, Inc.</organization>
            </author>
            <date day="6" month="September" year="2024"/>
            <abstract>
              <t>   An Entity Attestation Token (EAT) provides an attested claims set
   that describes state and characteristics of an entity, a device like
   a smartphone, IoT device, network equipment or such.  This claims set
   is used by a relying party, server or service to determine the type
   and degree of trust placed in the entity.

   An EAT is either a CBOR Web Token (CWT) or JSON Web Token (JWT) with
   attestation-oriented claims.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-eat-31"/>
        </reference>
        <reference anchor="RFC8007">
          <front>
            <title>Content Delivery Network Interconnection (CDNI) Control Interface / Triggers</title>
            <author fullname="R. Murray" initials="R." surname="Murray"/>
            <author fullname="B. Niven-Jenkins" initials="B." surname="Niven-Jenkins"/>
            <date month="December" year="2016"/>
            <abstract>
              <t>This document describes the part of the Content Delivery Network Interconnection (CDNI) Control interface that allows a CDN to trigger activity in an interconnected CDN that is configured to deliver content on its behalf. The upstream CDN can use this mechanism to request that the downstream CDN pre-position metadata or content or to request that it invalidate or purge metadata or content. The upstream CDN can monitor the status of activity that it has triggered in the downstream CDN.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8007"/>
          <seriesInfo name="DOI" value="10.17487/RFC8007"/>
        </reference>
      </references>
    </references>
    <?line 1591?>

<section anchor="collated-cddl">
      <name>Collated CoSERV CDDL</name>
      <artwork><![CDATA[
;# import comid-autogen

coserv = {
  &(profile: 0) => profile
  &(query: 1) => query
  ? &(results: 2) => results
}

profile = comid.oid-type / ~uri

;# import comid-autogen

environment-selector-map = { selector }

stateful-class = [
  class: comid.class-map
  ? measurements: [ + comid.measurement-map ]
]

selector //= ( &(class: 0) => [
  + stateful-class
] )

stateful-instance = [
  instance: comid.$instance-id-type-choice
  ? measurements: [ + comid.measurement-map ]
]

selector //= ( &(instance: 1) => [
  + stateful-instance
] )

stateful-group = [
  group: comid.$group-id-type-choice
  ? measurements: [ + comid.measurement-map ]
]

selector //= ( &(group: 2) => [
  + stateful-group
] )

concise-mid-tag = {
  ? &(language: 0) => text
  &(tag-identity: 1) => tag-identity-map
  ? &(entities: 2) => [ + comid-entity-map ]
  ? &(linked-tags: 3) => [ + linked-tag-map ]
  &(triples: 4) => triples-map
  * $$concise-mid-tag-extension
}

attest-key-triple-record = [
  environment: environment-map
  key-list: [ + $crypto-key-type-choice ]
  ? conditions: non-empty< {
    ? &(mkey: 0) => $measured-element-type-choice,
    ? &(authorized-by: 1) => [ + $crypto-key-type-choice ]
  }>
]

$class-id-type-choice /= tagged-oid-type
$class-id-type-choice /= tagged-uuid-type
$class-id-type-choice /= tagged-bytes

class-map = non-empty<{
  ? &(class-id: 0) => $class-id-type-choice
  ? &(vendor: 1) => tstr
  ? &(model: 2) => tstr
  ? &(layer: 3) => uint
  ? &(index: 4) => uint
}>

comid-entity-map =
  entity-map<$comid-role-type-choice, $$comid-entity-map-extension>

$comid-role-type-choice /= &(tag-creator: 0)
$comid-role-type-choice /= &(creator: 1)
$comid-role-type-choice /= &(maintainer: 2)

conditional-endorsement-series-triple-record = [
  condition: stateful-environment-record
  series: [ + conditional-series-record ]
]

conditional-series-record = [
  selection: [ + measurement-map]
  addition: [ + measurement-map ]
]

COSE_KeySet = [ + COSE_Key ]

COSE_Key = {
    1 => tstr / int
    ? 2 => bstr 
    ? 3 => tstr / int 
    ? 4 => [+ (tstr / int) ]
    ? 5 => bstr
    * cose-label => cose-value
}

cose-label = int / tstr
cose-value = any

coswid-triple-record = [
  environment-map
  [ + concise-swid-tag-id ]
]

concise-swid-tag-id = text / bstr .size 16

$crypto-key-type-choice /= tagged-pkix-base64-key-type
$crypto-key-type-choice /= tagged-pkix-base64-cert-type
$crypto-key-type-choice /= tagged-pkix-base64-cert-path-type
$crypto-key-type-choice /= tagged-cose-key-type
$crypto-key-type-choice /= tagged-thumbprint-type
$crypto-key-type-choice /= tagged-cert-thumbprint-type
$crypto-key-type-choice /= tagged-cert-path-thumbprint-type
$crypto-key-type-choice /= tagged-pkix-asn1der-cert-type
$crypto-key-type-choice /= tagged-bytes

tagged-pkix-base64-key-type = #6.554(tstr)
tagged-pkix-base64-cert-type = #6.555(tstr)
tagged-pkix-base64-cert-path-type = #6.556(tstr)
tagged-thumbprint-type = #6.557(digest)
tagged-cose-key-type = #6.558(COSE_KeySet / COSE_Key)
tagged-cert-thumbprint-type = #6.559(digest)
tagged-cert-path-thumbprint-type = #6.561(digest)
tagged-pkix-asn1der-cert-type = #6.562(bstr)

domain-dependency-triple-record = [
  $domain-type-choice
  [ + $domain-type-choice ]
]

domain-membership-triple-record = [
  $domain-type-choice
  [ + environment-map ]
]

conditional-endorsement-triple-record = [
  conditions: [ + stateful-environment-record ]
  endorsements: [ + endorsed-triple-record ]
]

$domain-type-choice /= uint
$domain-type-choice /= text
$domain-type-choice /= tagged-uuid-type
$domain-type-choice /= tagged-oid-type

endorsed-triple-record = [
  condition: environment-map
  endorsement: [ + measurement-map ]
]

entity-map<role-type-choice, extension-socket> = {
  &(entity-name: 0) => $entity-name-type-choice
  ? &(reg-id: 1) => uri
  &(role: 2) => [ + role-type-choice ]
  * extension-socket
}

$entity-name-type-choice /= text

environment-map = non-empty<{
  ? &(class: 0) => class-map
  ? &(instance: 1) => $instance-id-type-choice
  ? &(group: 2) => $group-id-type-choice
}>

flags-map = {
  ? &(is-configured: 0) => bool
  ? &(is-secure: 1) => bool
  ? &(is-recovery: 2) => bool
  ? &(is-debug: 3) => bool
  ? &(is-replay-protected: 4) => bool
  ? &(is-integrity-protected: 5) => bool
  ? &(is-runtime-meas: 6) => bool
  ? &(is-immutable: 7) => bool
  ? &(is-tcb: 8) => bool
  ? &(is-confidentiality-protected: 9) => bool
  * $$flags-map-extension
}

$group-id-type-choice /= tagged-uuid-type
$group-id-type-choice /= tagged-bytes

identity-triple-record = [
  environment: environment-map
  key-list: [ + $crypto-key-type-choice ]
  ? conditions: non-empty<{
    ? &(mkey: 0) => $measured-element-type-choice,
    ? &(authorized-by: 1) => [ + $crypto-key-type-choice ] 
  }>
]

$instance-id-type-choice /= tagged-ueid-type
$instance-id-type-choice /= tagged-uuid-type
$instance-id-type-choice /= $crypto-key-type-choice
$instance-id-type-choice /= tagged-bytes

ip-addr-type-choice = ip4-addr-type / ip6-addr-type
ip4-addr-type = bytes .size 4
ip6-addr-type = bytes .size 16

raw-int-type-choice = int / tagged-int-range
int-range = [min: int / negative-inf, max: int / positive-inf]
tagged-int-range = #6.564(int-range)
positive-inf = null
negative-inf = null

linked-tag-map = {
  &(linked-tag-id: 0) => $tag-id-type-choice
  &(tag-rel: 1) => $tag-rel-type-choice
}

mac-addr-type-choice = eui48-addr-type / eui64-addr-type
eui48-addr-type = bytes .size 6
eui64-addr-type = bytes .size 8

$measured-element-type-choice /= tagged-oid-type
$measured-element-type-choice /= tagged-uuid-type
$measured-element-type-choice /= uint
$measured-element-type-choice /= tstr

measurement-map = {
  ? &(mkey: 0) => $measured-element-type-choice
  &(mval: 1) => measurement-values-map
  ? &(authorized-by: 2) => [ + $crypto-key-type-choice ]
}

measurement-values-map = non-empty<{
  ? &(version: 0) => version-map
  ? &(svn: 1) => svn-type-choice
  ? &(digests: 2) => digests-type
  ? &(flags: 3) => flags-map
  ? (
      &(raw-value: 4) => $raw-value-type-choice,
      ? &(raw-value-mask: 5) => raw-value-mask-type
    )
  ? &(mac-addr: 6) => mac-addr-type-choice
  ? &(ip-addr: 7) =>  ip-addr-type-choice
  ? &(serial-number: 8) => text
  ? &(ueid: 9) => ueid-type
  ? &(uuid: 10) => uuid-type
  ? &(name: 11) => text
  ? &(cryptokeys: 13) => [ + $crypto-key-type-choice ]
  ? &(integrity-registers: 14) => integrity-registers
  ? &(raw-int: 15) => raw-int-type-choice
  * $$measurement-values-map-extension
}>

non-empty<M> = (M) .and ({ + any => any })

oid-type = bytes
tagged-oid-type = #6.111(oid-type)

$raw-value-type-choice /= tagged-bytes
$raw-value-type-choice /= tagged-masked-raw-value

raw-value-mask-type = bytes

tagged-masked-raw-value = #6.563([
  value: bytes
  mask : bytes
])

reference-triple-record = [
  ref-env: environment-map
  ref-claims: [ + measurement-map ]
]

stateful-environment-record = [
  environment: environment-map,
  claims-list: [ + measurement-map ]
]

svn-type = uint
svn = svn-type
min-svn = svn-type
tagged-svn = #6.552(svn)
tagged-min-svn = #6.553(min-svn)
svn-type-choice = svn / tagged-svn / tagged-min-svn

$tag-id-type-choice /= tstr
$tag-id-type-choice /= uuid-type

tag-identity-map = {
  &(tag-id: 0) => $tag-id-type-choice
  ? &(tag-version: 1) => tag-version-type
}

$tag-rel-type-choice /= &(supplements: 0)
$tag-rel-type-choice /= &(replaces: 1)

tag-version-type = uint .default 0

tagged-bytes = #6.560(bytes)

triples-map = non-empty<{
  ? &(reference-triples: 0) =>
    [ + reference-triple-record ]
  ? &(endorsed-triples: 1) =>
    [ + endorsed-triple-record ]
  ? &(identity-triples: 2) =>
    [ + identity-triple-record ]
  ? &(attest-key-triples: 3) =>
    [ + attest-key-triple-record ]
  ? &(dependency-triples: 4) =>
    [ + domain-dependency-triple-record ]
  ? &(membership-triples: 5) =>
    [ + domain-membership-triple-record ]
  ? &(coswid-triples: 6) =>
    [ + coswid-triple-record ]
  ? &(conditional-endorsement-series-triples: 8) =>
    [ + conditional-endorsement-series-triple-record ]
  ? &(conditional-endorsement-triples: 10) =>
    [ + conditional-endorsement-triple-record ]
  * $$triples-map-extension
}>

ueid-type = bytes .size (7..33)
tagged-ueid-type = #6.550(ueid-type)

uuid-type = bytes .size 16
tagged-uuid-type = #6.37(uuid-type)

version-map = {
  &(version: 0) => text
  ? &(version-scheme: 1) => $version-scheme
}

digest = [
  alg: (int / text),
  val: bytes
]

digests-type = [ + digest ]

integrity-register-id-type-choice = uint / text

integrity-registers = {
  + integrity-register-id-type-choice => digests-type
}

concise-swid-tag = {
  tag-id => text / bstr .size 16,
  tag-version => integer,
  ? corpus => bool,
  ? patch => bool,
  ? supplemental => bool,
  software-name => text,
  ? software-version => text,
  ? version-scheme => $version-scheme,
  ? media => text,
  ? software-meta => one-or-more<software-meta-entry>,
  entity => one-or-more<entity-entry>,
  ? link => one-or-more<link-entry>,
  ? payload-or-evidence,
  * $$coswid-extension,
  global-attributes,
}

payload-or-evidence //= ( payload => payload-entry )
payload-or-evidence //= ( evidence => evidence-entry )

any-uri = uri
label = text / int

$version-scheme /= multipartnumeric
$version-scheme /= multipartnumeric-suffix
$version-scheme /= alphanumeric
$version-scheme /= decimal
$version-scheme /= semver
$version-scheme /= int / text

any-attribute = (
  label => one-or-more<text> / one-or-more<int>
)

one-or-more<T> = T / [ 2* T ]

global-attributes = (
  ? lang => text,
  * any-attribute,
)

hash-entry = [
  hash-alg-id: int,
  hash-value: bytes,
]

entity-entry = {
  entity-name => text,
  ? reg-id => any-uri,
  role => one-or-more<$role>,
  ? thumbprint => hash-entry,
  * $$entity-extension,
  global-attributes,
}

$role /= tag-creator
$role /= software-creator
$role /= aggregator
$role /= distributor
$role /= licensor
$role /= maintainer
$role /= int / text

link-entry = {
  ? artifact => text,
  href => any-uri,
  ? media => text,
  ? ownership => $ownership,
  rel => $rel,
  ? media-type => text,
  ? use => $use,
  * $$link-extension,
  global-attributes,
}

$ownership /= shared
$ownership /= private
$ownership /= abandon
$ownership /= int / text

$rel /= ancestor
$rel /= component
$rel /= feature
$rel /= installationmedia
$rel /= packageinstaller
$rel /= parent
$rel /= patches
$rel /= requires
$rel /= see-also
$rel /= supersedes
$rel /= supplemental
$rel /= -256..64436 / text

$use /= optional
$use /= required
$use /= recommended
$use /= int / text

software-meta-entry = {
  ? activation-status => text,
  ? channel-type => text,
  ? colloquial-version => text,
  ? description => text,
  ? edition => text,
  ? entitlement-data-required => bool,
  ? entitlement-key => text,
  ? generator =>  text / bstr .size 16,
  ? persistent-id => text,
  ? product => text,
  ? product-family => text,
  ? revision => text,
  ? summary => text,
  ? unspsc-code => text,
  ? unspsc-version => text,
  * $$software-meta-extension,
  global-attributes,
}

path-elements-group = ( ? directory => one-or-more<directory-entry>,
                        ? file => one-or-more<file-entry>,
                      )

resource-collection = (
  path-elements-group,
  ? process => one-or-more<process-entry>,
  ? resource => one-or-more<resource-entry>,
  * $$resource-collection-extension,
)

file-entry = {
  filesystem-item,
  ? size => uint,
  ? file-version => text,
  ? hash => hash-entry,
  * $$file-extension,
  global-attributes,
}

directory-entry = {
  filesystem-item,
  ? path-elements => { path-elements-group },
  * $$directory-extension,
  global-attributes,
}

process-entry = {
  process-name => text,
  ? pid => integer,
  * $$process-extension,
  global-attributes,
}

resource-entry = {
  type => text,
  * $$resource-extension,
  global-attributes,
}

filesystem-item = (
  ? key => bool,
  ? location => text,
  fs-name => text,
  ? root => text,
)

payload-entry = {
  resource-collection,
  * $$payload-extension,
  global-attributes,
}

evidence-entry = {
  resource-collection,
  ? date => integer-time,
  ? device-id => text,
  ? location => text,
  * $$evidence-extension,
  global-attributes,
}

integer-time = #6.1(int)

tag-id = 0
software-name = 1
entity = 2
evidence = 3
link = 4
software-meta = 5
payload = 6
hash = 7
corpus = 8
patch = 9
media = 10
supplemental = 11
tag-version = 12
software-version = 13
version-scheme = 14
lang = 15
directory = 16
file = 17
process = 18
resource = 19
size = 20
file-version = 21
key = 22
location = 23
fs-name = 24
root = 25
path-elements = 26
process-name = 27
pid = 28
type = 29
entity-name = 31
reg-id = 32
role = 33
thumbprint = 34
date = 35
device-id = 36
artifact = 37
href = 38
ownership = 39
rel = 40
media-type = 41
use = 42
activation-status = 43
channel-type = 44
colloquial-version = 45
description = 46
edition = 47
entitlement-data-required = 48
entitlement-key = 49
generator = 50
persistent-id = 51
product = 52
product-family = 53
revision = 54
summary = 55
unspsc-code = 56
unspsc-version = 57

multipartnumeric = 1
multipartnumeric-suffix = 2
alphanumeric = 3
decimal = 4
semver = 16384

tag-creator=1
software-creator=2
aggregator=3
distributor=4
licensor=5
maintainer=6

abandon=1
private=2
shared=3

ancestor=1
component=2
feature=3
installationmedia=4
packageinstaller=5
parent=6
patches=7
requires=8
see-also=9
supersedes=10

optional=1
required=2
recommended=3

]]></artwork>
    </section>
    <section anchor="openapi-schema">
      <name>OpenAPI Schema</name>
      <t>The OpenAPI schema for the request/response HTTP API described in <xref target="secrrapi"/> is provided below.</t>
      <artwork><![CDATA[
openapi: '3.0.0'

info:
  title: CoSERV HTTP API Binding
  description: CoSERV HTTP API Binding, including request-response and discovery
  version: '1.0.0alpha'
paths:
  /coserv/{query}:
    get:
      summary: Query the CoSERV endpoint.
      parameters:
        - in: path
          name: query
          schema:
            type: string
            format: base64url
          required: true
          description: base64url-encoded CoSERV query
      responses:
        '200':
          description: >
            A CoSERV result set has been successfully computed.
          content:
            application/coserv+cose:
              schema:
                type: string
                format: binary
                description: >
                  A CoSERV result set enveloped in a COSE Sign1 object.
        '400':
          description: >
            The request was malformed; e.g., the query was not valid base64url,
            or the CoSERV data item could not be successfully parsed.
          content:
            application/concise-problem-details+cbor:
              schema:
                type: string
                format: binary
                description: >
                  A CBOR-encoded problem details data item.
        '406':
          description: >
            The server cannot produce a response matching the list of acceptable
            values defined in the request's 'Accept' header field.  In particular,
            the client may have specified a CoSERV profile that is not understood or
            serviceable by the server.
          content:
            application/concise-problem-details+cbor:
              schema:
                type: string
                format: binary
                description: >
                  A CBOR-encoded problem details data item.
  /.well-known/coserv-configuration:
    get:
      summary: Retrieve the CoSERV configuration document.
      responses:
        '200':
          description: >
            The CoSERV configuration document has been successfully retrieved.
          content:
            application/coserv-discovery+json:
              schema:
                type: string
                format: binary
                description: >
                  A JSON-encoded CoSERV configuration document.
            application/coserv-discovery+cbor:
              schema:
                type: string
                format: binary
                description: >
                  A CBOR-encoded CoSERV configuration document.
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The participants in the "Staircase meeting" at FOSDEM '25:</t>
      <artwork><![CDATA[
@@@@#=+++==+=+++++==+++++++++=========-========================-=======
@@@@@@@@#+*++++=+++****#########+====================================-=
*+@@@@@@%@%@%=***#*########%#####*++===============================-===
%%%%%@@%#@*@@@%%%%##%%%####%%###%#%++++=+=+================--==========
%%%%%%@@@%#%@%@@%###%#%#%%%#%%%#%%####===%%%+==================-=======
%%%%%%%@%%##%%%%%####%++=+=++++*%*=#+*++++++%#=== Mathias Brossard ====
%%%@%%%%%%%%%%%@%%####*##**#***+%%#**=*==*==*%================-========
%%%%%%@%%%%%%%%%#@###**+==%**%###%#+*+++=*+=*%=========================
%%%%%%%%%%%#%%%#*%###%###@#**%##%@#*%#++=+*#*=======================-==
@@@@@@@@%@@@#%#%%####%##%%%**###**%#+++++++++++======================--
%%@@@@@@@@%%#%%#%#==+%##%+%+=**##*%#%@@%%%***+==============-===-===-=:
%-*@%@%%%%#%%%##%==--#**##+*@@%%#*#@@@%%%%%%@%##%%==----======----=---:
%%%@@%#**%%%%%##%---#%@@%%%##**@@@%%%%%%%%@@#***%%=...-== Thomas ==-::+
=###%@@%%%%%%#*+===%#%%##%*#@@@@%%%%%%%%@@%%*+*+#=..:==== Fossati =-:**
+**+#%@@@@@@@@@@@@####*+++*@@@@@%%%@%%%%%#@%=+=--.:====================
+++**+%%@@@@@@%%%%%%%@@+#++#@@%@%%%@%%%%%@#+=-:.:==++++++++++++++++++++
+=++*#%#%@@%%%%%%#%**@+#+-+-%#%*%%%###%%%%#%%++++********++++++++++++++
++++**###=*@%%%%%%%++%*%+*==%##*#%+###@@@@%%%#===++++* Yogesh ++ ++++++
++=+++#**+=@*@@@@%#++#==+=+-%##**#*=+@@@@@%%#*----===+ Deshpande =+=+==
==+**+###++%++**@%*++#====+*##*****@%@#%%##%%*-==========+++++===+=++++
*+++++###++%=++*%#**+%===*++##***++@@%#%@%%%@%###-:::===++=---=-----:==
%++=-=%###+#====****=#===+=*=##*+%*@@%%%%%%@@%*=++#--===*==+=-+==+=-+++
%==----###=%===++*++=%*=+=***@#+***@%%*@%%%##%*##*%%@+=+==+++++++++++++
#*++----##=@*=+=**+*=*++#+=%%#*##%#*+@%@@%%%%%**%@%@@+#+**#*#####***#*+
+*+++@**+#%=%=+++++*=#++#%#+*****##*+@+++%%%%%#@@@@@@=-====-----+**++++
+*+*=%%#**#%=%@%=#++=%+***++*********%%%@%%#-==*+===++===++++++++++++++
#+**++%@%**#%@@%+#+*+%++=+=+*##*****%%%##%==-==**-+====-----:---::::--=
%%***+#%@%**%%=#*#+++%=====+*****#*+*@@+====-==%#*+-.-..-==:==.-.:::...
##**++=@%%#*#%%++#**=%-====+%%+###+++%#=====-+=%%##**+------===::=---::
#***++=+%%%#*%%==#+-+---==+*%%#@@%%++##=====-==%%%%=*++== Paul =:---===
##***+===%%@##@#%#*#=----===+++=+##*+##=====-==%%%%=*=-.. Howard .:-===
##***++==%%%%+**#%%#++-#%====+++%*++==#=====-==%%%%%%+--.:.-::--+=--+=+
##***+=+=%@%%##%##+######=++*=%=---*=+*=====--+%%%%%%+#--:.:--+**#*####
****+++==+%%@@%%%#%*########-%%=-====+*=-===-=+%%%%%%+++++++++*********
*+****++=##%%@@@%%#%+###%###%#@#+=+++==--===-=+%%%%%#+=+++--..====----=
++**+=#++#%%@+#@@@#%%####*#*##@*##%#*++=======+------++=++=--.-----=---
*%++*=+*+%#@#*@*%%#%%*###%#####+##%%=--+======+==:---+=--- Thore -===--
*++##**%=:==-#*+%#%=-=%%#%#%#%%##%*-=====-=--====--*-+-=== Sommer --=-=
-++*=%%*=%++-:#+=:*:####%#%%#%%**++=-==+---*-=*==--**+-===============+
-%#=%%%%%%@%%*%%##*%%%%%%%%%*@#%#++==---------=*+###++========+++++++++
-%@=*%%@%#%%@#@%%%%%%#@++++++@%%@#%%%%%%%---=====++++++++++++++++++++++
-%@=++*#@%#%*@++*#%%%*%*#*##@%+:%##+@@%%#%%#==========+++++++++++++++++
=%%=*==+%###+@%@%%@@%%%%####****+%#%%%%@%*###=:-========++++++++=++++++
==@==-+*##**+#%%%%#%##**###******++*%#%%##%*%#--===========++++++++++++
=-%=+*+-%#**-%@%%%@##**#*******+***%%%%##*%%%%-==++##===== Hannes +++++
+=@+*++++%**=%*+++%##+=@%%@%@@%*@%%%%%%+###+*==+=---%#==== Tschofenig +
+=@=++++*%**+%@+*=%###=-=-=-###%%@%%%#%*%#%%+==--+==%#====+=+++++++++++
*=%%==*+*#**=%@+#@@#==+=%*-----=%%#%%%%##%#%%%@=-+*%*++++++++++++++++++
#*@#+*+++#**=*=++-=+=+*#%%%%%%=-+%%%@@@%##%%%@#=+=+++++++++++++++++++++
****:::::-:::.=*++.=+**#######%%####%####*%%#%%%+++++++++++++++++++++++
*****:-::---==%+++=###+%********%%####%####@%##%%+++++++++++***********
#***##+++%#*++%++=+##*=%++#@@@@@%%%#%#####*%%##%%@*+++++++*************
#####+++*@%#+*@++*+%##+%++===+++++++++==========-=***+*****************
%%%#+***++@%@*@++*%%%%*#+===========================%%+================
%===++*++#***#@**%%%#%#+==========================%%%==================
######*****###*##*##===========================%%%#====================
#######****##*#*##**=====+++=++-----=======++%%#+======================
#########**#***##*#*#=+=======-:::::--====@%##-========================
######*=####**=#####*++++++++=-------+++@%##--=============------------
%%######@@@@@@@%++++=%====%+==----=++%%%#==---=========================
%%%%#%%###@@=**=++=------==#----+++%%%#+====-======================+===
======+##=%@++**=#-:--::---+-+++%%%#===== Ionut Mihalcea ==============
---------=+=*++%#*+=-=::---*++%%%#==================================+==
------------==%==-:::=*=*##%%%%#======*================================
===========-=##------+%%@%%%#+====================== =  /` _____ `\;,
###############*+*****@%%%#+========================   /__(^===^)__\';,
*############++++++#%%%#++==========++==============     /  :::  \   ,;
+++****##*#++=+++@%%%#+==== The Staircase ==========    |   :::   | ,;'
++++++++======++@#%#================================    '._______.'`
++++++++====++@#%#===================================  Dionna Glaze ===
]]></artwork>
      <t>Henk Birkholz and Jag Raman are puppeteering in the shadows.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+2962LcxpEo/B9P0UuaK14GQw4vuoxDW5RExdpIliPSzsk6
WhOcAUlEM8AEwJBibOZZzrN8T/bVtS8AhqRlJ5uzG+7GIoFGd3V1dd26qjqO
46jO6kk6NEvPi3yUVak5SifpqC5Kcwb/O8zHRVml0zSvK5PkY/MuPUvLNB+l
5rtkMk+rpSg5PS3TS+rg6PDdd0vRKKnT86K8HposPyuiaFyM8mQKQ4zL5KyO
s7Q+i8ukruJRUaXlZby1FVXz02lWVVmR19czaPnq8PilMcsmmVQF9Jzl43SW
wn/yeqlnltJxBvBlyQT/eHXwDP4BUJdevTt+uRTl8+lpWg6jMUAxjEZFXqV5
Na+Gpi7naQRw7kRJmSbQ61E6mpdZfb0UXRXlh/OymM/g6bt0WtSpOTiu06pO
agDJfFMWo3Q8L9OjpehDeg2tx8PIxObdwfER/pvUti3+mTqc4Z+lxdglYiy6
TPM5QGbMPUc0hnGy9AeAMsvPzW/xO3w+TbIJPEdcPkWs9ovyHJ8n5egCnl/U
9awabm5iM3yUXaZ9bbaJDzZPy+KqSjexg0388DyrL+aniHC7Rlfnm93Lhu0n
CYLsDeV/1+fe+lmxoIcFj/sX9XSyFEXJvL4oYCFjICNYvm/65qviKinHMC6T
0zfJfOKewaSSPPsr4W9oDsopPEsZQzNo2L+ghk+TctofFVPt9bhvXhZVBV/Z
bo8vimlSeY/Dnl9neVIWrnNu3pfmTyf0GlGsQ3zVN8+y8sNFMfmrHeOrNP/g
P4XmQ/OyTOb5RQHUYo5eHbsRLqBx/1Qa80IDWdfJqNYhjvrmd8k0mdj+jy7S
s2SS2afc//zPWV3NXcfSqk+tnp7xax87v+2bN7Dpr5Op7fm3WZmNL5LSe0Gd
H7x54To+n/LLp8l07Pf3AvuzXb1AYqa/uYdJdpqcJub5pJiPXV8fr/M8R7TO
P/YTbkJdRnlRTgHjl7SX3r18vvtw9/HQnCZV+nCXnzzaGzwamj9ffeA/Hz8c
bA3NaDyeyN/be0/gdYW7Vt7vDc1VOpnEH/LiCp8eHb948hD7NyaGT4E+6ff9
IbZ/srW3LW12XZvTovTaPH6y+4R7f7Kzszs0ROe49+Dhq/hF3yf+MptKA/q9
1WJancdXZTLTRtMrHP3wzXeH73h45eRHgLq8zkbmu7REnop43u5v9beWqBlx
RrO9Ndjhr5LyPIVNrHsYONdlWhKTqGbpaPOSPqVdGUXI0T2049wB6V8dH39j
nifAYvJznu3DrW2Y7fEBcL+/zLOSBYisypPdbeDw01lZXCJkB7Av0zytKlOc
mXfznMB9XoxTab69t427LIVneVWXSZanY3Mwm02ykWWWdTEqJmb1eXHwzVoL
bx4/rgR3/qN2+6TWZkkdRdAGhATN9vD1S+TXL5/XFxlIviiOgfmfIlCwF6NX
uakBTGXndQc7r8wqCo01YtFZDXIWHvZwnbKzDBZL0XW33DV1YZKqQrThoCDc
qhoEEwCmqGQAoNN+dAzgGhDDc+zP4KricPzlp4l9xDVK+7WeSQwgYE4zGZu/
zNPyehMmOp/UhknFjNMqO8dFA5DPklE2yQAtKQ0+zqpRAdR2TYOUaV1mKUhJ
BB9eA1RJWWfwDUBxVhZTkKBlVswrQ7QzprkxHDDIGc4coCEQQDTl5/PkPKWO
YT8BSLMiHyNtCXQWajOviORevHjdM1cX2ejCjJLcnKYGxBFoGdlfAfYsN8+f
vX0nc+qBkE9OJ/hZenaWjTLEa5YDtotZWianOEeY06gEqQCThBnCXKprWI4p
gEx0M82AEaVRtGxe5XVZjAEWJJUfl6t0FGf46CaK7kVLBArS3eQaAfoGccYE
gricK647SKT0u0fyOwWgZzPYY4SRQ8QxrLkQkLyB5cnTEfRAywiPRyOiwuJu
qlH0woaH4es0RwKANT+d14BiQdcUFiebwYTsIvcAtaPJnBYPRM8YGQYoP/kc
KQMwgS3OsnJKz8fpZTrBVYCHCEMFA9GLS970OJkUyGP0ATEAWM3H0CWt8TQF
jWNc0Q4gKsIBPcLEP5tkOQOZUJnRRTKZpPk5/AqEgoyQW1dpMp0gdpq0AURw
/Ms3n0nGYyCEirZy5oGBC0k7gmbQtSWSuzYFQsJkk+RVwsQJCHMzP03rqxSW
MLELZTsGhXsKIoSm2BhbeIJ8Unms7wrURWImvCLmKrlGomJudU2wpPllVhY5
cTGYK7Jd+LwCURdyvJ6p5kBm9QWMhN+VgN5LEIke9LLDi9OaBQqxF8F82Yl2
3HnKdJDVz8u8J7373A5WAJRqeAGEcd8OcZ4zoEhEEPbowESkIEU5tNgVkl3p
OCrzc8ePbmGuFiF30xohxtuK0+RjNmX+wJOP5xXuZlj26RRoxO63uigm3Cdo
bSUw7tROp0FXld0NxMobFJPx7gHrjyUIoJk6yPLZvEZlJiEDiQnWjomWRDYi
nDhy+zm8qu+DpLsjrReCE26nYl43oEM0MlG0gYT5PyvqC+qnY696RIYQMJcT
mYqzTj8CPFWmnIWZtccZUmDY0jTRZUI9GeSX3ZAwlWJW48oyJtvCzOelZQqL
Ttx8gpwYGifMa3Cws0n6UYABONEUgMFRspjxNWj+oJdiXyoVU9CqSTAKEdyx
x+8mWEZPCd2PFevQK6hVQPvUKfDcdFYTp35evHv1xvz4o6eC39xYnQI+BOO9
gP5AqUdTGUyx5DKbXHO/9LEIGQAUhq6KaerWnAVJhrpLlk7GsMoH+bgHu+FD
qt/WjsSq0QXgCsmLVZmxp5YghGi3AGzmINwmizUV/AbgvrmRJe6Thgp0kREv
hwWn0aFpjMQwZsC5LYPuDYSbl7kIkniFopwkjuiSoomju8ZqYgffvDKnGW0H
/vY0vQDsFfOyssIl/QhLjPIKVva20YSos6qhQ1quSOQq3MRKJulxRtqVMmGV
TtDnkX6NoMKOnhWZUpUH61U2mcDbEfyh/PkciAG2KwDtbRPYCR28bwpjTxBd
eVGbIkfagbnPkrJS5SKdZnXNNg+CC1Q4BdsGmTMuSM+AcsSIJWqCd0T8utlG
k8xuhZDn0Z5HJVBxTDKRFvnqAuX2iDoRdjxKQADhjmXV20kI1DFNWUzsIhA+
TmnJzkuwkEDun4L9dpbVSlMWDXZvI0S5T+0ercHkihyk2VGaAs2C9pvMMqUb
Jl760COnkOqQey4vm+O0nGZ5MSnOr4UvOMPTvBZ2yizmQ3pt0IlXmaU33x4d
oxcR/zVfv6Xf3x3+/ttX7w5f4O9HXx28fm1/iaTF0Vdvv339wv3mvnz+9s2b
w69f8Mfw1ASPoqU3B39cYpax9Pab41dvvz54vcRL4FtoTEKIZKKvGchu1I+r
CNj+CNRl3uXPnn/z//3fwS4g7d/AJN0eDJ4AuviPx4NHu/AHrjOPRpTHfwIy
ryPQ5dOkJGUVVhNRXgONQVvY0hfFVW6Q9QFi179HzLwfmt+cjmaD3S/kAU44
eKg4Cx4SztpPWh8zEjsedQxjsRk8b2A6hPfgj8Hfinfv4W++JFEYDx5/+UUU
NczlOQlRoC7LP1h8KJs+Zd2U9olv1vejlypwYc8CszqfoI+wvAbtlEj9KGWt
ehe3Umw9QyiAPg0ElmbB5rg3EIM+/J8DxIrCTkhQfSNoflhCCwx0SrRO06Uf
CLwflpzL2z53wALNuWG33ZC+T0ZG5mF0V7PQDURbryEeafznb48O6REoW/gI
XUVp9XkEA89Qsx7NJ0nZ457GWXKeF6hdIINmKZYtgPUxwcoDRziQe/VbfiUi
+ri9UrijkwmYNJU7D8AdjcIJpAcMPs/Rzu2n/R5bQs95T5rXac1OnGjZHJwD
xz0XWQvdH6NJb94U4xSkDXkOEtfihjFIrNvTnEo8K1lkiZhpdn5Rkx4DumCK
otSczSdnwPJFh5P+i9Ia86NigsYrL4813qs5oP0aNbgMbYJ5OUIhiMoq2OHc
tkD9KuwR2gJfTksyiMriz9hvYi6KCSmA5jJLr1RACbmMjWqPOFlYQ7FTSdiB
zHHd47qiEE4/ouswq1XydWxc0JNmpE2MQMkFdggwl71gSryivKs+sqDHmceT
5BoQOwZp1jF/UtbYlQEIAh0GyKPpxxinKMIXejcuijkpXyJWUTycl4I8Ef/O
WBMFJJwRkBTtXZQL1mJG3KBeOrkWuZPYubH7s0fCGrDNhh5oZSRXaR3Fb0MY
D3DUj9SDBOJ2PkGtika5QiPDOQ2F4PFMg1xBpMNRz+PsjOgU7Z5zluSy+gr4
A3gCi4NCLMkBD1Owfw6sU4GUB4LLAjJNgJGAGgF6OY4IxEi2MsxazlQaRJOg
SxF1NVLvcBkJhHIOEN/LWYNav98hYwK0Sxbuk0l2Tq2TU7AZm3OzbFsmx2qe
h2NY2drvkrwHYnv5c0Ihb/GLGpRPngm6nqxSnqFaANZZNkbGfg+f3inbSMIH
RDEl2iyIji7AVr1EE6VmXQS4Fdp+tqFojXbRPJT3TFqeF3mBRqM4SJiW0UNF
G9fRcrjTgV8QTQRsL1nM+GJ436PNIhsB5gUMivArjCMhbyXs35qYqroX2Uzk
RrbF5DqeIltOx0xl1wmOaV1mIYmR10yn34++UoZDajrbK4gs3mz+p70QcUjb
pPVfZuoN0P3iyQXkD+gF6aHvEtrxnmdrrMa9AJ9gL7Q+sILzcaZeNHRBkJMY
NvfMrbVPL+SVEQtklExTZ4KDRnGe5agrtGnPmtwNhybC0TMYUEDkAio9UDKb
ULg6blpiS+VFHvvPuqQQahYFvSlKPJyYTYprJm/2QPrySKFinx4Oy86NibjT
zZRlb4IvqRF69836+tEFfcMSen19aHV8+qAnHiO2RLmrKlgnXNsKiGxyLXoE
8wEkSxaN7M4CLpTSSR8bBjPmnbdJSDvouEiZrNVObC/0Ytrp0yRfpOnsfjO8
oD3NKAPLku22i2zGKG9OHC1eC944JfORTX/0dMzVwdmYEApX3vXokOThiSOl
YzsjS4yd++GKNzJt+FA2jIFgCs8UR5xVPtLQryeDAAUc5NfmPLt0LgjfiY5w
ksegJn8k6Duy09KMFCLCX3OxQKVHbzlrXNQCv8CJEpPI2P1sj7+6nJez5HpS
JGMan3kS7yEfHRZV1u8oEyyTbIJUjhNH9Qa71w6r7K8sV3F1pngCUTJU5AuQ
jcAwA2IB5jFjkpboosg8xkiWxVWh2yqTCVWEuMD/wSQk8sRuYcT9BFZjfn6h
sydt3h1A6r73CKAnS8483juw7kd/IEeJRyvSjCehnjsiOlGTW/5W66Ly5MA0
RZdMVk3txN0xCM7IHRvcoquzSSAwvNJzeYCR7AE2B/C4nnB5Qz6St5eoIqZX
UdSNHM+zRmQUqwMu8NaHJz/kWmud/LzydGuPIdj2MLCQ+71FdM/SpN0WRB9O
cLaOgkVvq4tZPMFjQc8fLwKKnKe4mk6mNByQ4nUHbP9eX5TMeYvSmd4WpFUF
Z03d414fnZ9anKzex0JbQz7rlqVwZwao+PreteKUzSe2OkkTJLtFWxNtOzog
JJC7cIYSmHaCAt7zTiYytGDl0Aw9d+cVSqLGEQVh9wr4xTV6vnWu8MxyJ1w6
lqrWIYujo154hkcFQMvA6Xy+wMPbnithzT4KHYk0G89PK9jX8AkIVAB/XiL4
Vvg4yNFwg3EJDPVqM3JgfwM4owR5LvCLaVZn53ToVkkYIfSE7lBcZD4eE33t
2sxzknzkTzgrE3fGqucsYFhlfEBGELMRDkAhZn0UBNvNJzsyMtKPCXJHFtvs
LR9xTA7SDMXo/PgjReyoo6Q4wEcSZIM+l1c6+ClqgzM8VbpM2ZCYgl7XWmdm
cYRsdQewMTJNPqR2dGQx5CD3dNvszAFXobkLqj17GPIAXxY710SEudO2gUCz
6gNjTK397i8tQnHd0QDHo7pRrQK7Z1nRCKUs7BPUMQvUp9FRABb3BEj2myRT
k8WpskxmREcpzMZHjT3hBrBAE4vrAj1cbIWhSeavq+UeuCqOmIXGWJHF3mG+
ci7p8WMAY4YRqGV+P1pxtrg9H7evTtNz5BHNc39cFuJafjgBnziwQz5rbUW2
4oS9MCsSrUEbwBKkQF2V2689JbPKLY0cXcPCYX95ehX2qW4Jq9ippkesye3w
cMX60dcFo25y3RZMS3hGlp8vBf35nFYtXm/2pxhPIm3cpkSZe2DP8tlBp3+C
RHavUC5ctVbDyRJROH33mHJKFLwcmJM6L4dFh/oSLGeUA008BHBn16fzyQd3
8COyRdU7Cj9o67GqodJpcvfJPaxwcQ5qDq1xmbq4Bj4epR4q/+RcMcitJY48
Y/el5x72+vGkOG1dRBeYgRSgOLle6OIbspXG/tODHLTQEk2YAzFREnpCTKbh
C5bQRuSVIcdNwk+9PQaYnJ9OyIFR1tamqq6nU4zIGBlUv5CK8FSK5qPCWPQD
66ND7RXa2lVuRrlYPwAiRMiD6Km8ntXFeZnMLmS4hN2ciIJDNRJJzSAk5M5y
pIj1LjzcdWxAAr5MUZVgz1HjLL/px7MzJ5MvQ/YMyyef86DYvDF1gAr2bO1E
NSk+ZGCKTevixdB2Vy8qH8oyAhqKFpNBI2b/UzDQ7sTFXZIb2LpMEvKldHg2
SW6i/Y4aeT96F/bHXMO56iU0F2XXKCF//dJ5AcpXLs2X2iTbhDCgWpT/ZDyD
8X6B6BtdpKMPwJn421MMdL92OEVPq577ZlPa/hLLK2vnTcyL8fB8xC2mJfCQ
2Fe3+WiSZGjndnlL/bMoVUdaG6Nmp9p0RjzXaYBN3NaOm7rAR8Q0sHU2CwPu
LQJEVRjPvbda2YNt73DmZo0FD7uNSK5KZAYMA5OsKnfATUdY18KznlunhhUf
SLM1sVKaBhG+BY514NQLihG+4oEITzzvLSshtPNIe6Ojejqw6fTg+Yc73ec6
aJkp0F5AL0ofa6PZMx5x8/ZUF7pU82JaAHt17mCWkuTxIlIFOUFEJOECziok
dxx77g/Ks5+FMRsdaDnSHd5MiwsEnph4UqlLlPzhC31PiZJBY2nQ+UTr1vBo
WXD7NvBcXS2eZ5K2qu/poDiABT0RHfuSp2XOj9Hh53Xfcx6kzv5E85Rzk/ZA
rEO0X/M0Ahep759cNJZ61Vh9BSjj03kdiyScgfI6wqNJVssOHQsSzcxjStVN
OxZNvQo0oREMZVaR5eFvFRnljt90qSpi+3PaAplCvyUHYVsH74h9b5/OWZaW
dTtaQMGioz4bP5LowWjdmFdoDSC95A2pLNbRBZ9WM5dLrSBmPckKC/ZOYyOv
TVtFcQ5U0V2ZFBynRhVUDXbbWK369H6H2WSdhts6XATGHk7RF0jHZGFSDA7p
odN5TccOcfoRZBBZxH6kuI2zbmFWY3d97Rjk3ceEWEmRp26tZSTplkJsfMeU
59IgAgAhlcHuOZhMGl+GurRP0t78XZTeWIFcEAjJEgelEetFJJhIG8qDqar2
5pPBqbUOSBGjbEc6mc+mmI8I+BxRQs+chZmL3b66KMRid/YKBVjy3sNDJTSw
nU0wbgaKdrpDrGMjwUMc7oDtTfZRcOic7BAahVkoHaJ7x/GClVc5enZHqjJn
8uctyJnnGawhYSPU//A0WowXokpntKmWa8VkE2DSy/Q8XiCj/FBeL0Y6OUtU
wDMXkJVx5/8CvkcmjsuC8ZASC+A4UQryxkBXIaFK0s0qDjYSvPe8tBI5HMCI
aJKCBJaLAp3NS0yjYOZT5NdTTpBYBjZ9hLocut7a/LqSVzetuFZJGdA9aSfp
LwqqPEjMPTt1YmUEmR4ION2aE16SUg/VOQ+NOS2lzwV9n81LRte1Dwqr+URh
GBMsSr3GtaprkcS/MCh7gnt30DMT9yW5yThXmqLQc2EviisJN8L8IFTK8ood
62f+siUdZEF7Ei3HymnFHJ6cWLXSy4JGW1aP01hvgCYaIowmfX0x5bMHyepG
SIkflnwE7+GqoeOP5iUHhLCSrxsEW11ytqPhDHARZfMZGL5j2lbWVPE2DKFf
OUVod/TQBnARKBIcnOW0epPsLB1djxBfgU3OFoX7qoEUjNLJsBnCi3+L+JUI
3fmMArs8q2o+GzOZFIEurB5M8SyQ64CPAxMvH1CdEbi8vke7F4pQBkGPgTH1
VRWSs+x8bg3QlskuMh13SGCck8ddNYV+dOS2gLppbRdyxI0RBYRb5aHqyiHd
wkkBaGBPfy33sPOQ0z2r4DKKVAHotzS6MHY9xIKam7x9RkCxpE7ZfaQECjPF
hGHSkDtlaM99E0hjcUNQhEjSEhkeAmagcrTY9zRNqrkEN/fEl88OuuSD6qgo
wVC7KpLRhSg1iMQeEViAB00+aykrclatrlI6FcgvEopdlHStEC5/D4cwsnas
yVyN/d3BQyvJEbXHIVMKAiEwMjDeR0x8DHszN41VfDmvY1XelzHuJAtlcdvY
8PyujQS0hjaZcfSE+OQz7wxWZT4f+qbjDtwKiVWhG4Cs/IMGbVrXLB1Nj0M/
6rApDXomdOrhivieTj/U3nqjbzxd1kaRNP21B6qGtIkE7Uq7utos+L6/eGIL
XUP+jrGZLmr7+bETLYnVU4WzZDkPwDv/ipOCXRYRk54OJ047duyMRax2U7nN
f5AN5SE6MC4Z18ASJj7Cicl7J/Aukc8/fO857DrsK+I1gkSDcK1W13PPRPcq
vGaEIFxfdzpnfbESI0Zq6zT7aLuUnCGdaiX4bj7m6CXsv/WG0xq9qTCBkMJV
g0BGRQbjeUWLIzGDjhlrZgdEqEfCQmXAnbBVIeOJFiLuVN9jAyoIRvl1ZFXh
bgNIurwNvZbPgpRHDhgklUIAQOWCFof4ls2psdExIUOoGrHWvhtRj1u6vTY2
I/GM7AEbuuQ7yVaDDbPAYWSjFhb6bcSPQhOSY3Gys9E7g323h2l6jdY0qNLS
lneM7K0ZBe82QUBGwwHD6gDu9IkdO4vvAnNdcodzy+atW0GiGY1Oo1l1QAKc
7Vx8AlJ84V5h/mwzs3QZRlZ18sKsMAyH8DAivYNs8oWQZpVmayVyeKCH28An
TsviA+5Z6PeCwyQDH6uG216z4dl0zvrCwHdPy6d1kk0Q6aEX0S42efi8QEgW
vO/4FPworUX4esfiNg6lQ5wGB7FuWRcHvGDfLrjHi6uwR5nesFVWOY3Dud3Z
f5JhZQaRvYtVGukwxUDqVj5cUxcSZtw8Weg1TteIFfvqevXp8lnctGdzLiuC
YSpieXtc3EbAOXkY9gO0mZBCymnFmKOg8Wp9e2YtTZEj5CgzUDiImgPqZagm
+OE1x8Gyiw0tDTz8OZ2ffGEcDUQ8qUOz8IS0dGi986HrLZAv5IIZJVbApB9n
Ge4SlDNWK6izMgwPem6jlTQPjmmLyx9cB4e8fkCUc9uZ5Ixdq+wv0zH7HbQX
HjQwK1Q9WHiTE4d256hB3mUFVb5xE2Jfl6dK20PRAZ/YATaUICud3FH1GjmV
MAfq7FrEEw3opSGqdHWHDQuW7KgJipwJsn+bbRLXV4bhtRUFyqrvwWeiyKRx
u4pwmk0STFErbDR3FobONIMmWGCgWPaCYsnNSv4Fb0P51jYyxUMMDvJcfh4j
waO36akELD4v3rx6AR2TWsYWVq6hN5RNP9GDI8n+8D/gZUrFvbzovHqvP+h7
GYfW1UsgNsYnBXXK7i45VwFNrgB1hsOCXDqDrz/TZuVdldi94K9qT8JFm3vZ
eTsbTLMX+jPQWxXwUGErC/HEltgUKXTc5Omtr5CREjLab4wf1KBFDTwfDPSJ
/zjr3T+FDgLV6SwdhCqKwpqcH5h0K25tjWFTADKtRnHLDDH5S4r+AHcDiCrL
FUALSTwlxKc9Xgmm3yo8oblH+SCfHjz1q980uOs7F8fa4U5icOK/L7DGaEYB
JXKZA1/tUF+ji6JGuZeoLwgYFWJ3VsA6XfOJKueVplqPyCGaT0hGmLWZqGrq
3HliKfmyF2t3iO/WDwH8pVu7pwLIhhwHR2JUoA73yl/mybic0+7H88gl/Lta
Yt0Zuq7X/CjxF3iU74WH49G+hoez2SJMolEijDJl8Vs+EVlcG8IFS0eUmNsR
V1zOJ6mrxEB+dKeWNQeBgVUm8XdTXPRTyh7M+ECeFDn0R1FcB0bgkolesrBN
vMoKfli0lpxx2qPfxmmSMAFO5BAp5fRGnB8ojH/729+oouDny+iWQjKFNc/G
MaxscZ7mUcRFLc2++TEy5t9XYT+ChZcOzdaa2f/CyJ/0injj0AzoBf0Bj7+E
FxKDODTb9Er+jGDR5HPonUbtFzAyaUSb5m/zMkPoSCN/zsc9tP7HqLi5DIAc
jYa64YXS+iUa7cCuTW91Ttimnyazk545+Yz/ksFjTuqgF9Zd0HhHBHDyGfsM
Gu9kaVAVIr6ilERiTJ9qsjVN7xvBIirAcrJFO+zw4Fico1RtRfM1mJ9IpobN
GBZcoqeo6vxcGzCL0PpUpCWPKfyJDX3MhiFN1TdHEgPEkGK4X8MH6AI6KctN
k0bES0YufdRoWOZ5rjE682pIVeH3RBHtoMhT6x9KzLd5RuE3YKmxfvXKOZxX
v333ao1s4dy85SBb/+3bVy/WxPJhC1dj5Hkoyi8uMGma0BfgzANmbgtIncCO
/UGanXB4F+suXqULr1ZCf6fv1wxIaqWB3xNCjxTpt1WUUnnnxEXDzaueok+q
P2QPSZt+RT9G5LoVDnKbMdv0HN+XKXFzZT0qsWL2GjMDCh5SMw/kWL11ypW6
3iEToA+tZaWMqsazK/M5VvHc2dl5QoVHqSVzMIFjx2NqDAUwtgAsmAGCxRpf
zFYzwk/lS/2fTYSCAn/ElEa4O1tZBdN2t70WRR4QNKb1QcTWfuoYF/vjbeQ3
aw2MzdBDSEMRY8YVn6ZJThWSbCgIF4uSMlbof3FmrVtoSmixxdOWvThz4u/c
90mAxRPuWU7UkNGkFFKHZeLABshyijcTQSzWF/vpEo8utbi3c3KbV7XGd89Q
qxJPgxejehKsyYkBvI5TOk8FLIGUaCxt0AColERFc8GCRtuo5Sx0mjQd7V2e
E5mpi1+h85tGsiH7E2ESXMUN9qiE0lepryMGYeuBr8M18jd6UbITCMUrMg9D
mmdFGVrUv1S+umBRwHy+e22dFZAnWLHMCxwao8JoMxTYK8ATQP8T86DDS3Y/
eqOiyRyOHNKLS44iww24uEox3+bpyf6WcGA0GOV0AxRyNILIlLoE9cW6+/HM
44yP8ef5VUL2FikgmRRRXQ6j+GwNzXboXuVV15wyIqc0ZjG+DgiezSHUhlTn
ED6bwra7j7K3iD8iD3ZgAH/TQ+GYI6r2zffALej3oahyVsEiJdA/Zhqa782G
tPKe0zjvo/fQuQ60ublvVpGPccfM8XGkDRMCEL03ax5Q9iCe4dI/FbRFWt2v
AKkbatAFrL5uwMtHfQysVNUXSLsUzF8BTBlkuwtGekcAEpPvPMO0/srgsGTh
2aW57RxRnPR+6nPtxRS2YliFCVIAQjuysXVOTaHJ0pda4vbkMPSEsyFP29nb
3riz/eDmBcfszKXO/HPJgHe6bF4/BykIOLuSwE3/uOo0ZZ4zTj+yDuyQnHnB
r4GDXI+xMcb/NIPxADAXVORC5VonmE2HIcePN446SMOfaI3r6eK5vdZSOWdK
CGI48xFueFwr4StFHcxGrAn/vNib4JTFV8KxVx+wKg4FVXpmRoDfhcMEy0ch
4cy9WMIRT1WOIY86V7YrycyLce1k6Wyo3hWn4jv8Thpb/ESp2K9O3cqGDgNW
WuEC3pmNjUu8EfR7tTmk5HQ7Hojl2bIrBK01/CvJNvG2XBsLejJLfskuslTP
ajsyIAgEYMJiMR8qP9aNp3qTPW2gYxB7BCKch6PUURXgVDwJUrqQwEE0nyfF
ORmLJ2/fnUjkPoVhUWoNeu6UX1iy5RAx6nOifhrUncgDh85DDr3NJsDK0GGN
7MwLAkaTtGFInbU8yVRGSxNhAmbUDpXtuZBi1lY4FVXqHmlULPNXV3726Pev
nabHLh9SLKq/TKKjw9eHz4/NOgiUl+/evrGw/cCwReYPXx2+OwQJ5AlgEHtL
B/XD+nK+mZa/399fMmvm7Tu1PVpNs/+c7P7nd3/EZifOCtFgMSyU59hNM2Tj
c68WGkUxsvISUiHyNHiCaqjvcvcoL0cFkYycT6C0BvEcfP3Cp54st6QYdOYP
yquOrloJDAIWg8VdFk67J0n8lPDOXWjRVJo/WfIVyjSNe7/KJuMR1vxYPVk/
WWtKBT7MxD7l8OKXkG/7ePku+hVJ8venXgtai3zVXRgSJKylvOFS/UTZz98c
mlf5qN8ka7+LncHZ6V5yehZvbe+k8e6TJ9txkuym8ZO9syejwd7WzulZsqT6
GHLZY/VUiJ1sPRdqR2HmMtaHFZ+0lOFuRSC50KNpMk57UtC2FZzm3Fc7/V1J
FuUykmBhN2xMKXw6K2bzCR+9ZFI/2iUragx0CBlxToSAw7LDY1SatsRleA4C
z+HhTMhJqmqK+AtPOvwgDSMdrPimC6Rh56OgOUHdoGW53xqAEljtGg1Ehwdd
mXBB8EnTGegdx/8yB//0ylp8Cy1BrRvAzjfBMwzNLjY69gcbZ+s2P9mX3X4l
MYzQYple9ZGOYiZXsFVurA8LZ4nWStNv0nzf8L00Xweem+bLzz5zD2IbLVIh
DGfQXYxnUc776M7YrHFnra7POEc9/pBe+5YazIjchZcxn5upxcUfuanxW0ED
IyGcNUCxKl39xdrBZt34gL6P1tCAH/+akKfdkFuktwAH6TWOf2UgLIJCIHAo
iVfwa++2YWqQiMVlirgcWFz6UOvAf7E2MjRozY0wnnz41SYKXXVNlHMw+Js2
vusqrupp/asgunCHdPg7DhBsIIu65MNf1PGNmFEccDd1Ar3semhTEAlfn0ef
K8t5Xhwfwd/YAMXg8dsXb83zt8dHS/bc7zAHVovMLKiGLumu/ArTp5p+zgRr
2lQXmlPiXS7QPPYl06vIOdfUnhJVQeqlF9TUTBG7pSCnVrN1wFxwRSG/CFHV
cTrS4YKQiCN7OwepOBwl5x1biah8WagZo4dvWnoQesRpXKYaII2VKuFjPPKi
rLlm2T97XCNFuDxEaggulcik0Dk+3Oc4DTpxP72uJfBDMzca2CeFWLpGWPmc
XmIbOJteV5kKu/tRcv6R2nagkbzk7LXu0bxhSDKjQZ+fY/kjGYiF8POg5Mgz
Kdv/TOKFfm/rB3nCGoiS6tDJLZA3i2rU4W2eZeoQ7pdcQsVWagF5temkDK0L
AwNDGW9dkkShZtkyl0JbOX85f4zVhhuFhI4973yZJhWZsI2ItiYZ2HC4RpEi
/5aZvBEP4Xl7OJuVnRjYK+dezL17yLqC4LT24ExvyzufJyW61TXnsxWsGVQt
V6cMWnOXdIZMdc9SSl3L04kNyW4WPPPLm8mRxqWGP7bOF9xVHexWoPslyBHn
FccIaEuvhGhXigtvznErxbdzSeChuprsbUZ2BWz2djhemvP1Yj17X5XW00EY
21X91KkEA3NQYFd5hc7CfeorZsqXy2CC0vb44Umwa074uO4E2/1wBG8GJ468
nGo7Sa5hqVi55Qsxg15AmCw/7A8er6JnG+mFFO0hMyRDKqcJPohto/hijNdf
znPvs7Cp90oaS6GpsH9uDW8tfuV99N47PdUaVZowr9FKMbEjK6/6i2YaAi46
wAAlLxont/x8joms0HYb2y4l7jbKTe54AyexZDZBxYcfaD6qMZpnnebVnySn
sGNIS4C/RPPGU6HbMCXQ3dGF/5ImsWlqUM0jrxm8gE3qIVFHweuNxupo8TIg
fRp36btW2vfv0YtYkkL2VGaaTtlPFqDuxMgJItUofM6fxC/5wpjjZy8G/egt
9SiDzYCXTVNKNn9z8EfyPo7HTsxKq9P56EOKyTpewjNulw/Z+ESOfHVWlZ24
1OaiOLpD/qbyIk4opso9D8LobA1Aypfv8uyQAsNh4YHOEEapuZ2rQOMlLe6y
y7N2FYyKS5NIjKpWD2CHV1dsAEFNcerbZrV92r7W88PlbxtXurcRPdbA5hh7
Bp/LTcHUT+rkfChP8Vrf3vbW9t5wNIpnk6RGZ8byAG+fPQG1JPPK9Z10HbSe
uNtJMAp3q5FKJOn+KhYYBK8squCIAzeJaQYLBtipKVBDz7b9KF9xWMmFTyit
cXul4zzCLbtpo7I2zdbQLN1vzks9+pQxvQk8ZzAkBoAPw/CYTcuWoPftHvzd
sn835cMuvOH3tm9sxG5NgvV7Ot3knx8jx/82nQNuk4bde7i1evFga2sw2N7e
2XkA9IKcJzk/B+bFfH0z+FwwRqDD4Euyg8x39Jzm7hpzzCFPc9trTKGsS7bp
jfz2ngwp+Lsns3Y5H5vcw9bq0vbWzlY82I63BseDx8OdreHW4D+X1vQLPxJo
0+yAJQj/iDNGcxFoRjfAdC0nzYHTWhrHHcWlTqRw+HhcsdpUUMx1XdrC+xL3
rWd8ovwFRM6Rlrjt6RZUrKjdSN9UhYH19bGm55OFIXXL/ofQpF3w7+9Dk4+f
PHny6PHDvb2H/01Uad737glxEDG28wiA3xm8fLZ38Ozl1vbOITq2Dw52D5/s
vXzyHN3az14ePFjDXr799tULbyY3Qv/m77APtuEfPuF1Dli6BiNI02lvjV8o
wvQUC1Tecxsdf4sMYz7fIYUSL6MFRTQfwdD94guECtbDCATLoCFYvAPBBcIF
S9prKD8XC1Ye0a54Uf2j9+mvsz/tTDbxub9F9/ZIMmy/ODx48ezw8CX+C2T7
Hsf89jAg3O87tixwcxmic9/++hS+hdvSEnc3Rbtzhr+H+mfJhHNXui9qTl3p
P7ooxUmeRrX2dplPKWKsccp6DLooAJn6wFgogYljMYiah94Wa54H0SjNQyCJ
5STfXTuE89gLYMeWDKiFxB4wy3m1lZSzMr2ke+EVrf3gwGfRTNyuhHnwmUwI
rw0+vfxLY36i5fKLNn6T8ZrLAJqVmbIPFNQlq9A288fetEHvKLMp4znYchuN
ralZRJle1qhXryhjiDAkt0N9SFyEa0+dVorKTo3DeBX0KTrAhiJ7GdglVknQ
umk+rqnLVrRNmJi4qPDcr80CLbMidhcZE/CvWzTdTj3iLpXzbsaDjCaS9pvW
m72JX1o4FSAHDrJWASc5HQEaiZHa19s+5w2nQR2GD+6amz8/b27CqoNmHR3f
U33pNb4ctKFkxYxre212TUNGXBr0t/s7S80epdfBw53Hu61XN+3WoOdf5kwx
e3s7q9vNOP6bhQh6HzV/47eyQoOtgCoGO0oV20AVd+tLWRXWycCd6TKf/TOR
U3sHoN2uS81CGkv2VuhjcSfjEbsXJufyztkBOU3y7CzFEgqi1nBcZaPkUQW/
V9Z9IsVUgM2hDMWkQK677MUyNFm3aHbEWJmDIl+bzuprvzLJHcEGIGgESGLy
z9/8wUZ0WE4zvcLiXBQHBLxLr7K03oBVjOgw89manbiDmXSFwOl3mY/7ypL4
TBnLbf9Psbf+5QNo+QBcAOvmrVwcHl7+RdH4XnuWsg+bt7MEbd2qgQPfeTr2
93eTYs+AvDhL0mScjB44gXHfL+Gr5DRJHghK3weaMF3M/Uzveec7LrwLvJuJ
xXispJV75DBMNt9t97+rb0PvMh/b8x5bc967lTS4C50PTgDIKrgUzb+APKth
G5yRdqiXAVPxyGvvvmCaptTULvncCM/guc/gqnvLem0ZYVslQy7S4cN2d8Dn
ODFeTE73VlIyfDP/CE+h59lEK3vI1aBn81zugZFqofY83J6AclEoycShQy1K
XpUadVjAMK7mmd6ZkF+7+dkriuQmGLl6Ti9rkNvgJHvKzVOq+VSMGj+Ka5SU
dCFPnk2x8Iw71rNVZL0SmRXjb4LlASd6rpZSklNXXQmX4ckr6hanlfgASwMd
XqZAeZPU+XSVvugM/hZ6pJ7BNPPKnoTXp9lb3zzk6e1OeDUS5SBRQXuNKaCj
dVy9yySbJKeaDMCZylILnw5u1VSjY1+P8uyqNKrh+Nd3izlISoO73M0eCVMP
5Oug26LOmpQuB6jo10TWK9cOsdujfX3wlCAsRhiuqGXzWIO5xNNgJlYbY4GB
B2Q4BBUCORiF7QW5WMDfbHJdl4Ry2C2I3wDipQ65luPFOUlsr4fLAxelLqcL
1/6YtiWBThcuUkIBH2fZFXIh9u1LtdhbwMXk3inO6RCd7+RCllmWwDSbzNJe
ZMcVqMd03VgtJA07jbWd0/QiQRVKom7sMX5jkYMb/Ozo7QBUOrazF4xOJsQD
XSVeGLkZSlJ7MLstFxCKEpjbZ+lorgHa4UajpFMuY9pMDJFzfblRwd4QgYvM
JVJ9P8miElRq64IQgk5ciuu7w6NjzMog8vKKMQdjS34lpTpKOW8SNlwrxKva
GhY2LSXN3tVETtxDa4jzIYAT85y6ZOtdnvFFHQ3j2wb4cH0MjwIkgdgLBkrY
P1pQGW7NJ5MosJvAELgtnEkEFAlvPmYPgpn8MCYXwWSewb57uPttOXEQr7oY
JIpA+jfcM3uDvZubNcUfduB6hGUpprIFSgxeJw4KXOhC7wfX775998qm8Miq
XHctCMNG2/Dkt4fHJ2hnnsqC5NyDaP3wDDullCCk3dRfCAmZsvXy5EKYwALz
MrY5nxQTD/T+XnvRIK4NBjrTBRO8Wzz+3bFbD/7obgGmsqWTjAvu+kfcXKCR
HE5/lbwIztFF6yuVa17SHN2cOLhE3gF3T0YfNNX2RQZAUR1Bx7AwFbjASC0e
lFKDibUIwRBifWZFl0eLrYmKCqkeXMuGsCsSTHIRvCIRm33XdPOE1xyAP8s+
dl3R9fghUpFQNHYs3iuPpYztdKxw5OgvmQoqnHNOZZoUIy2CBH0R5E4S2Zmx
YuVVoT8TsUxLWnMpQKn/6ZvN7iYjLbgtzzHIPZlxFXivUq2sTr8dtknwK+de
vAISNViFFcUdPqxg0YqMiOtwASRAJQD4RIup6+cak+MUGqkrSDDBbpNLK3iH
5YWvDDKncUEdzOupR7nFUfvZ3toyq29/t+ZKRBJHmucTTNsT+rb1VNOyZF1Y
lglQb68v5T2nt0UEWkjfJhDwEJQ4LiaJy/lgcpVIl/84evu1kRJGPXOOqM0Z
DKsaEvwSDcNWZp6eF3WWOEFKkXOS46hEbrmCKp9UYqEdRxPbJd34cwXrY1bx
S4QrdjAr8Vecn3FrLxyXs6qFmTp7oRqUggJXMsDSRCPVK9Q1mjuxyCVfn6UL
peRXowuwE7z71v0gNpeMUZ6NnjwaDMjhndTduRsUvDy9any1tbdNL2Dy3ps/
X33wP4M/tbBT7LZFjNtaorTEXxnbMC15gKa3v6tdAwoy1zfXbKQDi43txg2b
WpRSQ3FV+GUHKUbdfgJY6P/H898A4P3/+MPvfjjCO30pJIwiBX+XXsOTLzB+
rAG4frgkz5d6ZvBF1DUD29J/Cc23v4g6p2HbB2/hg50vojumYz9d0A462f3C
TgXa11VdRpGHXV4k2l0cx+/C6aZXffecFkH9bJL97to23yD+2n1aaN0rxuKi
jh1mGg0Ym1EOsySPaAy2dHL9mzdfYF7BmzXTRya5itSBqtv7tdYI0K758ffm
S3UOQ/fwuz36XDLvv6DkD6YzRlkODNkhAPHaowjO+iJ8iqjw29o54UOevv+R
fY0PeZqarOdrHi+UQUhAYPPAVQ0mDI/B+p6aRMcZ6HITlud3CZI52xqBJGUv
Y6EopCSWAkpWtpoOlSl3Yb08pRO7Y05wABIHlk0SQDYKWN3WJwNqyuH12tQZ
KJoRrtCQCl2l00ssoID18PJzDTZmiMJbUchYosxTPt8N1QmrejE3tlfnBJqD
q8klsDtEHVNXCIuAYvPC+ZJZZuEHz75+2ahKevjmu8N3qKt9F9zeUjXhlRq0
KFioJkIoSWLp1K7Yc48JSTk5X5e6a+0CHnb/BdzuXMBjl8KpV56LkomlKFVl
rt3Z95gcJInURRRNDsWuyzzVZWsIVLoMgI5grgPHlZWxjQrpFg/23FZvIyHu
YCsiMNhUVLJzYFE+bX2QoLCEzEqqqkobdsLQgQh5Dim2tFUQBTBglUBKm3EK
Ua+ZPdFdd8n4VwRbm8zePKWgIYW4fCXXE+lWzB6lZqHlj3ye3qhTF5afkil7
E50lmT3+Shwzbhr/HgiNqyEXLDxVj2Ecoo+B9K+sDksdlnjfMNZ09VNp3QUG
nfcchLcazOQOdCpVKPSQ1XMhAZdusgBITji35VxdxSyqkpq0i3PZYmNhFVZX
qVF2O7KpQ2VTkXVBOc51134PdZD7b/idT9jw/m2eXIbr23evOVc/+YDYtTYb
Zt+L+8ROADgq1qalsj0azHKBVgDdJmXjY66np1jtluS177wTS4o/8Uq0sXH7
mo093R0+DoXF+/2aE2ZN4ttU1+YJ49kZK/YoRupBnwm3C++wZzd9czORm4Gs
QdxNR7cxH+0YRse+gvQDqlBt47o5YgpnkGmVRiUUxCfh2tKWxHl95+mYBvTl
IKXcV0C5AvRCSlukst6f5nbvojkbduYf57sq1VXAEoMrJsNUp2BWoZ/22p51
2usC2S53E+7mAWQfNm3QluJVycG8oDJhxPwhPUXMm1WwYNa63D6P9gaPqKZC
3jJQ7x6CUquw+2bHNtlqoTbqwv9eNes0akBaTz08pLaSb7QYq4Cx7qAgMDCf
YM6JHnMTU9ArabjwB3FzlQsd/iwlKO5cDOWLup7FU7zM8DyN0Alzp2OHht4c
9AfRV0VVD/3bbSv0DgAYp3MsBCmgRwdUPXto7nRJsI7/PHDbyzyZlXTBrNCQ
5+ft7yLNDTqmYqJ3jxk9Q+fNKmJmLYr2wx+8z+FwaB786YGZUHlw2AozBGsG
rAUozDx+9GTbND7ajyjCwyr8GokUn6Z1QlEMoT6pR/caS+EbhsPuZDL453MV
e/t/ouARDp7o/6kj2qnzxwsy+SEMMvnTkg21aJucfkSZtRPdE2cthvG4kUQ9
NSRra+pkDsKkOyWJA4vMQmjm1ymwpEexCwPB1VJj/EX8tgVJMjnHEQ6Ptvce
uoFH0CM8/SYOnn6or6ntc/foIz6YV3/4+NXvtr+ZnuVf/e7q/3xztLc73fpw
PPrtfzzZ+jY7n/wh+21yAYuXXz52X1JXr569fR0/33lW199ll+fx5KhMD47+
PPtQ16Pqr/GgPH10Wv/u9eXjw/+z64GRjfFbmM7Am7ZGZvwyzkHy5Z+Sc6Ab
8h/NOWhM4RyKnMOPEu3wIrNhI18XouquHr74eu3X5S9+EOSgzWM2Qwt30wWD
uqAux2ikj3vymruZjHCjezGZzZbjzIf2ExnNZugs5YCt5vxJ5+OZ385wNlkR
JrB+PtPZXOSPhTe7baiAmzBQ2x6GJuc8hfiRewjMCP4bYzCre/gRHwGYFw8G
B9vPdp7vvnjgXmLH8Q6+3Dt8+PLRweNn3ssPFLhHnx48e/7i8OVge2f3QZuR
UKFdOfTknFd3AsiqedQ4+pEj0oUn+BRKg+pi5YKV/FuI3KmsHBFB53Q+K6+s
peLOCvUCCdmyKVnqnBJvwVrtOAD3zjFv1nruOgm+2oWPltEFgTGSqw82HzTa
tCIEpFIII2DsZf/798ZQ/EDHibhfi/hBUC7EFgSxp+GMCokwC0/PED3NE7S+
O6Uly6gSRyiffTPjPdE8aS4BN88wrOE6tl6pzmTtAi2+7rMjOTFyPhvUZ7uP
gio93OO76/V+FIIOC2bOKz7X86Ow+BgucBiRxXOm5+04G4oH0vN2Neg4iEst
vKP5CG/3xuCPY2eSmlUQE2tC2XZIdbJ4N9a1rqHUxceQIOl4oSrfJaeW7yUl
IpbBjOnN4vzZ7qudd/1+/1cUuiILHPdXqeAroItZ/lKnHrJYPt933j9Xjrem
8WmT+RTxvxkWv0A2z1U1Nr16CZvmN79xUd3E+AfI+OHfw+cvjg4M6J5mU6OB
RyQtts0C6Y1lJzA+13zxBYsir4oE/PWjhCpr4Qwc+1/x6f9D4tODzMVGmvq9
ItSjJhI3g6uxNu/KP/IXVXLUNptJSeH6or9ts5HQEyxuM9fn7kVtffAzlvFn
LaW/nN5S8s/3jSk168o3J01t0De/uSgFSpVX1l4l2N0cdOQ7bYIadE6pOi3s
W/BAhcTQ/uSBv37++218f3r6wMtq0p/mk0ZGVO8fNPVnv2jqo9HtUx+PP2Hq
UVfLzmSw+yaBSK6Fsfzc1eLZBCiBwaZ7gydbD2xZJNZpXibZhMqkFZhLn1GB
UdbdV3fvp9bYhE+bSHyajOnCNdS3/87qDAzFoZX/q/QZWBmwCsYaLH6rYpNj
BTtUzU9Bi44l8PTT/RSsAtRZTSybbMwlphe9Rg8jHugyIpH5PKQYn0vHNttP
NQup7Ra6kpY8mzKk0q8l9C3Vy9yQUB/eh1D5bM1cBGHpfg7MGWcNJvZO+zmg
o6zqouBr2/iggiIUT7Uk4CjNyEG2IHLtf5c2v/0Pov6HSJfmwF6++d+9Ab7N
W8EKncSvFHsvPLbsEPxBqrRjwRie5+V5wpfpOp/LiJ/c0HHTjJKLsHzpHNHO
50zebc+ubCNG3zZymlY1aSW4f1yM7LCu/BolxUh2FJVFQ8cW3UU64etga6rx
leScQqOXaLQKvtoLZvk2ZSkxG0KN9VqpSmRWu2bkTKM7doEQygSDgA7xnBNh
5JKfuS1yr8kMWuE+MeTgPiv5AlV3Y0DPi6vBawWuDAaMYc1YKTta8s1Yz67p
8K5MqrqFYnfhAd+Ocon3xVDuU1JJ5VEvJwIYCXyGzgZGpo1vVdgfVPb+Qboq
pHX149s8uBiA1zBvdezV90eWBnZBLNkFGPlWTilrcj5D1UDdVAy/eOIoTzBP
r1rlQ2wBNBoQj4+1N5uDuYqRwJSapZOUa7vxqkx2kZXpRJKu8PxTFqYvoVpM
8u7M2bsvhhAuNymcAplg1dOEM4vQ8YcZS9U14HGKfIakDjvLuqvJeil7cm9N
RmZnJr4mSvgp+W8FC4TE3F1s3AjnljbTFCeeVdN22d3jF08e2+QECVCo/B7Z
JYf7Po2RA8LSWc+c3k/mXbs8zkrOIORYQYrst91if9I15nnU1zEwKdj4h8fw
j1QxcafVZ2nCdVY8zMuABJRmGiZ+mh4GooQovcQYe0FEw80HkiJuciGKEJQU
KvXs8i2sDdQF+Uq9++QnWQ/qHfWWbaISFemlkB2FjqmVwiSCatde3pfL5HJV
nKznF/gh5Stwr8gsCEmStOvyP5ldcIFrjNLoA6K8EBMqClyFERp811Exz22d
S8lH6kBdUFv5hnkYl3gQGmcfNVUJp+40z0LrP7hEQg7Ol4ut64tW1VxPK2sV
TOYsmRwpZjYprum0kePGFtUMFjaWfgRlp52j5imAGNAiyy6igpgUdHZeSma0
B2wh19aP47rAYyMsh5RhUAjSkysrVCmFWHoGXpXYaEldJNliVXIWnFvAIjaz
iEt3OIDrXcK2jjlPVkWSpqy7rDTJ9PNzJrUKyLhIWaedwragO8uuVWrkNgzH
VSHmgsqVVPggfWOeS0iscPUyjWU2RIsqDuwNVQSWKiWNGt6HZNIqr0VB5m6M
tiwpkVxWjOsjG1giGK3/C3fFpYsx4iMhm3zsLk3ngJlpUn5wCZeirOcdl7Xg
1iwDYtV8wiwnI8eVb2Pc6l3jgBG7ZHjGwJe6gciqLhxyCD43ByoOj9whqy7c
SVGw4fo2XMins0CKhMTWtWnp1AQUbZqP/Tb1hIJZTfvn/YY8GQLaPsagL+Il
3bRqWOOVVQm7r2iGOSp3k+wsJYT6EsoyhPTjiHW0kBWIf8PhRKqrSPir7LF2
fq4YkEpvgcHxho0LKY8mVNhIArB11jgpWFBZgegAflJ4NdOCijPNfDnBr7P/
MKugcplk1FDWYpXZqtpga1qpBlPt8cye4ow/gkVCa2ObyZYnMCU8jxePqKtw
2aw8jD3BMwcAXT72UvmFY3j3hoe3/xzo4vjQXJB2usRD4rW9Sx4P0HzljEJG
QLmz68sDirxRyI4dYVLm7IgqLM5HNvJYSMU/+c1sLwSPrSWmhr6wC4IvHjHd
ihrkhR2iygmMAMWwq88DJIdsfYL8wdOUnHCCj2g7+xzmpcaEc1pdZVMBAzoJ
Sf9EtxFh85QKknAFysEWFrngQ3DhKid4netHao0NgJ7mZbdEE1SKztCQh7Sf
e3JL7ddrfHU8X4vBnhLWRXAtMUCeYmITva8ss0q2avlVcHWxaLiupIDWWdEI
ZptKYwFS2QJ6w3wkGgF5gEQCyWTw+nm8d52vVvq6cnBrQXAHsW4guuvBlrZQ
ENg7I/wpLfV7MNLYKhCCJQZqaYw/7jl604uX65DqCK8Ml0s/VqrHVOJEb2IW
RY3TEGwWKYUZP6hCGtR73n4cJtjwJvrC0LIvWdSjCSPYXzLMvc7R5JTrSeWK
5ewsIA97V/HXQH6XjEjcJLNJknO0d4ukiqucMjNtcnMmG5WZIPTETKmgIADY
CmBHjtKSJJ7oA1rI9Mcfv8RU660tjLk1L71CqD0u7IccSG6rEMMimNBYL6rg
YjugANrbt4FRFTbzFj1LSVJdnkcjZX/+T8BTvccBS14cv9SP47jf+bxPHxUd
737y/tt8/lPU/Q6ePYChHnS8ebDxYPFHC4a6bSDzIN6IH3S9cN+gt1G8jBf/
2e8v7Eq/2Yi7fr74CTZs8WE+Wy1ObV9rt8LGXXVg/NZvfup+d/s3v4m7sHDH
OG9eHR19Amw/e5zuJbgLb11L8AmwyRKIGPyUyfF/WIZ8yve8Nnwf3m0fc4hH
87FcoEfprFdmwwwu1u7o53n83Oq8+w+3tnrmnquqMnt/B766+xu5N6Xf779f
s4/votKOn41fn+JI3q3+bt/bqr377dTv9r1p3fGN7tTj49eEsrX7wHbHTu0m
gu6u9JvOBb/jG/ppLvgd33Qu+K3fLFjw+8DWfLnoGzo8OKjRo41BIGwVg3l7
hn9sq2KK3nhP92Ph+ozqk3mlgUX38SzcXqATnae5tWLEmLjI6iVypNSqA3Zq
+L4nl8wtubqLlXBnD/VAd8SrvVQbc0YH6bu3aZ1acIk5XcctT1gXniaArjTQ
GWqsAZZwTTz2z0D3dmDxL+sRgRZ58u8rf65o9Iw7LCAz0bkwQJibyfonHhDM
fO8UYadL73kWrPLfV+/pd4roBVSnes9P3W9v13vgdcfLO/Qe+LTj1b/0Hnr8
SXrPV6+Ob/nmF3Pg3cefwoHhq7u/OcRjV7P08fqvS/eG7Z+Sa/PLbjF92zeL
xPSdsImYBiwrEu7EQRdh3TnOz/iGJRfJqSfspbbC6hkXCmBzlV2xtpSmL6lM
gjeEqLD5GULKY9PBbYup5wm3FfvYd4y+drmrwJ5Tk8dYombw/PvY3d/5zDru
vMt3mz61QFb+XBnrJeH70FY1Hoqxy3o8t6dhXe4H5/yB16M6qZvua4JYZLiV
174jkAFxCR47W7tm9Ws9o8jS8Zof0u8OynyPoYg8OodCTwX6OWR9Pkla/ktc
dnR4l7jslnFdXzRZUSd4C8fpbPF3YEUo41Zpx67d+5vul7d/06Fk3PnNq7P4
6yJP4zdY8mYo0uzTVJOfP5//l1UT5C4+c7mtq07VhBSTn62abD28UzX5Rxl6
yyasBGmOiLtG3/9XeTZKx+8NvEQ3a5lOi0s5JnBXFGXq6j3V4Lp+40BNr06Q
aBdk3MB/uWpnM4tLj2G14K9WUiAJ0iyrqBUm9WhxhrF5mgYHjV/hOUOe1vGL
EkxXPp6lOGS5uIjueIaPkkmzcggWg3iyu81hNqm8nenheRPoRg3jsJR5gSdI
WcWQvjo8fqmHBGO8RFquecI0L764D/44B7FExuoYwSadAOCp+tE3vA5YF8Q5
5ieZnTQe3mOEzWU2nuN96uGqkmC35/348toPB1UhjSDairRTUjvyAsNMMM/W
nVLNRLwGoRKuKqnLVXQFi4NrgGA0QgadOXAMauVO6TnyV1CYSNEZOk/HN6ep
HhCmEg3Wo5Na4MzFeVgDvUVfdEaXlTZUqR+9kyNBuqx6fJlJ2V+HZS6+2uwJ
wxklqASDZl0OoUc9PbNEhOHV5MfrStIrLVB2VZRUsue8LOazSonlPCclC+eI
V9nbCk2usgvBRWc2iHgOY6Pj3nKeU2E3XzNCSLnmPSYXasgjXxw2JyzhwUmZ
OVJB0M5AHz1NRh+8sehKE4ncY1z4pdBF3U44roWrzs1nqip6dNmeNEdw0rbx
CttWHAlapRhxVS9xIfTvUgzdLPJI0jDp5PZteY7BcvTd0DYxq8WMbnggLRbg
pGuxg9iB/IxDrgCq59bFA48rIPZsPsU7xV7LSdKQwpOr4ebmOfQwP8UQ3c1L
hSZ64ViEB4EtpePdLtGqnmOvZXDBrUzwFIqXfkwB23ylcDL+czLCjffu4PgI
QzLxbjgNwYUJvUsn1ziDb5KyvhbLQYNe+JIA2cdUhpqCKS2oVSEx7hIJNbKX
yGNdgJHeDZFjoSzkGXQrROPGRYy9x/mW4U2jEkzgzzlxNzfaSxeo1hPORgs+
NWMcJ9lpmdCdaFwzXBirO5bH6CQKyp0lZaXxRXj/DtVxXFAuPnqt9QzfIO3C
RIfGXVUAK1icxfD/UjiL6Z1y5loh/a8BaIxmNwczCjrAeG0MZkIqOU+110bF
PXxLQYMwHTy+tDKw82YK6g++HdXYXTEFPL4sKqT8nvzdl7+fTsDUKot+UZ6j
iD9KRzQ3om7LVeTCFeQ0N63bTWiSWrEew6Y+ZpMM8W+DD4VAiBqTEsw/zBPV
7W9FDccSkX80v4QNrVHXPSUlqafUvL6zZ77BWmFUkK+U8GZG2juNmhJwiQ9z
yaNGUK6G8NkrNDQeAV/YUHKNsLgPafO2w6ElLLuWax8klf4MuTuqAozuUYhu
V1+/510OMyG7O+dgFFvfjxZBLvK22/zw4JjKQuO1d0gMcrbuxrtIcK4wM8xT
qKSKv8Shy3WjvyY6Qk8Hls9uAHClR/ai111mIn1IHdR4o249sEoZ28wOfXc5
Vf1wogfjQ9xMpnoVDg0tGkPX8D61M6LtzS+Hto6WRMg7JDZnqHHyFJt8fF8y
Qu7irmopwhUgatDbcbhT+w4/5AhGER4SyUkVadWfcr+liymnL+P7kQRPRB7I
6VLKbsJcJ9zVWMnB2UhSDZ0iwo2mRnGF3KLyblf6BWSFwv5lgZdPnJuvOVQT
70pF5d1CTdPlRWxVswcBRBkD6OIb4S4gnBLxnEm3jdhagB/UPh5KinFQ4fTb
YsUyxlDJchd9ryjJAGEXeQHK6LVLkTn6/Wsdac0XzQbW8QNZFfmfxX6QixNg
zIykGE1zVhQwSqzlSrDaIzLHYl65p62bUJo6K2rQFBQlqq3U6EAHKIbx/lWV
dzBIxvbCVLRKJqB3MAYlK4KmS+GeiFGWrhTjC0uYXSajpqCJDkKBhsrArKhZ
+WLZQIxsxl/HYD1UGS2FpxP2oyMva0Cu+uu+dZlLGfoFUUgPdrkoGmtP09fc
GXcXM86art2Vy4VIdpMOUOaGEmi5giaraDW5ZdUr6vNtvrJJM2lskUONKpNb
tXA0FyDvxeJj9VbY6/Pzi4BfOi7JvMkfMaHElutCdlt4LcHim0Bkv/jUgXlS
BSwIlcCuaa3Yup0lmUwhoyuUhIimsGDn1ibmypkUCKwJIpZD6l1V3s0jY5Zh
xF7zHAs2+0xEryJz0ZCKuqqt03lhon412j6ljkyQVvFGt64lp+vLivx6inyN
7ZNekM6mR7liuwBxX/gBkr71rd3Spnh18PVBc0c4B0uZ8gZb+vHHfz86fP3y
5mbJabWY6shFrcU4TC3uw0rj5g0VyjkmpvUuPc/0knIsLInjS4aGXPhJJX/C
9QnuixAyXPJ6XYLvqdtrsHL/Dfv0at1TveLoJ2DWsGt+MsdotiDl/OQx+Z+i
n1oOrfaTrjfwpVZkkrJAP91SMugnzvbBfUHZAzc3SCUWuybojSoQLehN3rUS
YBZ217rvorPjjlatalL3GYIv5rhrCG115xA/Ds0ybOV4OophoStOZ92XWmc+
eS3dcHLpwhXAWFUSl6MaDAu6mwTIYhgFWbgRsI7T2n/pdRFF7zSbyFWhwjb5
ZhJFb2dy+BW+W9I0W7PayN9Gds6F5eW2RGPevnohIlEzSMcFVnuN0TOHtwvm
kuTbX8O6U1JjK1TocVCsPY2FETBZGFoedav+2JIWgIytEPWYUwBToJAPuWGi
/THN+5u5poQEooA7t70dOByLBLIeFrfD8RvVzSpri5VtQ8wqZcBHXoJ+wyUe
3V1lbVCRxVfXIFo+ShKkXM2Ikz5r9yC+Nz/pDA2VsD4RFibq4zlguwfxBsuI
KKfnZUmGWVBHuqM/WK5vYHz4+N8NAJnRjZLofuWrNsnQpm/1DkBPGcGJkuX7
h98a/BSJA52xZhUvCH6apfUZGt9rvLjkyaQUa/zu+ds3b95+jSSORKmX6uWu
AQihlO/3KsrN55yPK+HZk7TEFug9BehxaSo9B3Ysn/u4ZZMiY1u8Sf1PTtrb
9CTsZfFG5dQWLjFEmRDYa4YLE2SsU8hUxh5DV1uBz8KXqAdkv4OltXts/Lv2
fXT/bR99HXjaT+xcTtzonzqtE39eJ/17MJh/cRYLKm9ZZC3/ozbtl7dv2qbS
8ItkbKs47SdIW3r3L8H4L8H4/9Aeu0MwNrXmX2uPcen4v+Meo0r9eFvl8cv4
ccz3qmK9jI/1v3be32nn4Zr+mjuP+/tfsPP4jmstzvSSoF/ko+Ae5MYX56gI
Pzao0slh1FJX585x0fMPgJeeUxgBJ5XrBc6Hzp9YoRn57nAND1RlT3ouEPIB
WUfIqCjT2O3dm5shOkP8ClTG/gn/0nb+CQBv+kc6K28BT4Z2MbpVnr0Y3Mu9
sUDpd91s38ev8SMwugk02V+apGf1knoEvk6vgkU0imfkGxSIQwfzPQYXNxwN
KD7G09R5smQltvce9vtP4MeUSFjsz/oDXg/wO3u7r3c39XP/moCfRzm69GHn
Xa4t72ZO4J68onwZ8NlZ9tEy+VEIS3tnyL44CkKX1HMXMMl3WNOIkOK2tPl6
8yCK4jg2GI2BvkT2YTp3P11s+uPySB7HeJfpDUW0+heXFtNsrHeQ6uWjcinj
v6+KtTQ0W2t4A6P8Sa/IDT00A3pBf8DjL+GFlK4Ymm16JX/ixY1qe+3zqP0C
RpYqs38DTEaLwery5VPNTwDU2Fq+MATVKIHdGnOp132q1Em/D2VQLvMK3xK4
Xg3Rash3pVKrZm3R99F76NwWDd7cN6swVemYkYMjbZgQgOi9WfOAUt+vwKV/
Kmif6YNYEBOPLopslP4KkLqhBl3A6usGvMzJGFj63UJKf/36YMog210w0jsG
UKv0IY3UybmQKxKfxkPooqCiQ+QKzWIWwrWlWv+ZpYh/X6UHWWop2E4idk2p
+CoNmOUfUoIC2u/Y9u6xbQ0wUOliaLfLw/OfMvK6+eyzxrxiOkCiG0KBtBM6
mKD7avnLmAMoZX28LTJslkKG13TNbYalHhG8z7jeE3fmVlBmZZMIqqG7SlBL
ieOkp/CdYvgzWVnADp8b+R327Cd6TTyVxLZUeAcoN18glXymlZmD90AxUmJb
2cidDefz+7akul1AZ8or/Atuf6O0pn1YTHR1Km25fKMlPLzJVlCJclopzXs+
Sa5RRDBFzbO8lucZaGcflYLoOSApapHnPlGE/vmbz7gBBk0Ey0M0F37qiO4L
RH3nd4gp3lIUWoUT21q7vbFtOLijIeinXM6nRKzQXteMlti/MaWiI73OrWA/
GTru4e8IbhwZw30om3LjSN/SKbGqxa95TGZlNCb21mB3SMx6kUZnAx7EuzQb
u4Vm+sR4b4XdGTNQmgEByhSCNLKNT0/xqTzYCZvp413agRtm1b1ak5rSX5o9
7YT+XiedxrvMGv+i4iPImPx3NMAmE7JrBc+T/JpaXuH2uJ19CceSRSGGyJ8R
u7bL0XqxT9weRqfJ9ysszzd4iETczWHcdp99yD7Gp3Rvim31Mz/DYiaf/B1d
WX3PjwmrPwPI+mI+PZ2VWX5v8Hgqn/YZz+Rnf0sYSap8ALb5z0KlMOpb1hHI
Yvlhf29vl+h8raupHVDb7t3R1q6XfvAw/KCBAG31aJWLyNt2wVpqq8erPhvY
tCzAfdWxPvrxk9YQi1ZFvng4aH7RvRbafHv1lGYajQvk1PE4naHDIB91ayWf
SbNQIpLcb7/hrS3Ppynd132RzX5mx81rIFrs25cit4oPkQy3yBDil37t7KGA
QE+anI4g6Zo30DOJ8gXvSIld9K6l2tzazupK0QIYWxK0zZi9+d4iyzzto612
WB0jrorRh7T+wlqc8hk5TFWv8p51qFZgn5MSxqoV2pHYD47pK/AtZeM96dxN
QFCeLRrPLkXUJLGF2qFOITQ62+bYrZZfwyzqtr1QCzybgBWiZrGOVFlHRGo1
1dOimLj3HF+loITvkCouydDf7ng7Tk/n56qkNj+cgQob2zuCVGUNW9kqqn7D
va7u5jlVPkNSG5qHXV1Np3MKNxuaRx2v69Hp0DzueDHykj0agDzxm6N9ZhEc
WmadK9K9Oe9oKeLMGqX/LYbeP9jOM87QW7ALfFSmFpX3aDy/T+MFgN1nAF2u
WYy++KARaMKzXfcY9evZQ/d3FL7d50rRorTuRkHbxltUacvkKs7CJXC6N8OG
r8lnGtnfkICmGfB0bpin5xTUDE3Pepi2qi9mBYfY4ov3UbM/1QR2V+2jtcj/
BNnhfDKJ/P71WdRwjCjb9x57BjX/2WCIbHiWaDUPXDP4O+SHUTRNRl3rks6z
3cfBysCTh95qRM0WIf4fRo32jfePgZBv2yudnot7fuBR9F1fsEJxZ79oqEVN
Ae7Ex705AC0M3rakq+L3yVc9ePKvwSW27+ENugnBdF12Sl+50lZBlz89CKrL
XCGFXztkrtz3pMDJn4x8bkHSQKWfFQ30clUqPoAeAjuVYFUB+Jl90magotDY
BtOk+qDyMHyqcBizpisl1K7SsYv6VerNpCULStPBvxRLVOc+5jBjlZ/iU8X3
yI5VTjrWLO/mpJXxAjjC5Zes3w0GzQ55+bFOPbzduQdZqD6leoSe7uD3jPCO
d5FDdIZSdOBQnLXIGgV/N+X5WgCoX44K36A+u/pmzfTxiGv1R5gB5mDDEPjP
DVhP9uhDeEfU4AjMZAeDwao+gY+6Saclj+5shgQE/9hmLE8axGUhixZ8pXJg
hy6eFBrnT4zBxkb/fA+wNy/wC3UaeIvWVZc+g69Afc6m1S3Gxm0m2t1aU4/P
iGAIT3PqHkdYhRH+Cn/Dr/o0AuEaNx4J8vgpmejbyHuste0+oZc7q/JgLWqw
Je7UyffgD/kISKQtMi2bX/DObc2oeSBixfN95PKX0s6yXnfIouyXRrkRKBsS
m72/VAdATWn0KS9sKbkRFXmUo+YoskCmP07PEizKt2XpmGW1EO/WKv2JPbjT
mE6J0iRgte2ICZOFuYDClUc1DO5KEGS/X+g0EBYX2gQqmOznC2wG/bx1eqSS
y3aw8HxJu2i5evQky3Zxl09Ie2r5diqRcs2eFjqBtKfAo6yWoe2l09/sPr3H
wUIlQs/r8mccR9w1lKOErXsN0u4dhZNHuQ2JZEVyQ0VdfdTv7+xYHuQ3Iy60
tWofwc6wDKJtiDTVUu5g59GqfQLfe8qXZSgN/czTALR1NbpIp85BEj5GJsIa
mbD3ZHI+xJvZyADC4LYeyyQrgrR9pXASlXEX8LKtJDQ5pTCUTXEBdWgVMrmN
Do2j1VlDobxpn2hIb3q28UXn4UZPWgh2rLqTlj0x8MvZvFIvBj+bYSWo8JHj
usnEf1MVZzVewEWuMIVBPtFX3tDubbhaHQvYk2ABjPDr7nea1vQKi1dhsEdR
pr8JXuKZZXlNt5dKwnGjtfBD1+xLOpZvNsNnQSO5KAQbaFWUnj2gp+Wxuwyf
n0+KU9inwD6pXk1a9SjWpd2JRDnoRZYYTyONaHTQ5Bd/ZP+Er/R3+1kEWiWG
IiGNllmkR3FCMKinRA30owidgljMsNZAjumS2eg+bWKOcepqmkxmF8ktXUkW
Rdcr4G7wsOuNv+NwkhbJqF8D7u2JpL+g2PwL+Mx/Bh19EaHe7T07Ri39GBp+
b7bX4RdgA621lHG+pEIbPqWumwCeHnZ+kVQXsijMlegBsCbSnbBUsj7zteWe
5y3Xj390x/ftrccOb7EmcN3xMfq3m4j4DB8KUbvTH2zlIFXKVgDupmzqVawJ
Pf93D+0Wbb0BUVGiR8h/5t006h5OqFyK/8TFBLhnPmm4LWxdF5rd66PuAlS0
Bto6eRBdZoFKBzEu+xehmcntM/jX+1xkit8HRjFjQ/hXUcxQ3gPBbnxE6AVW
/mg8pGz4Om08TU7B3ATRHz71EYVwU0tMQGak8wNbh8g+kUJY9m/yhk44oZ8m
bd/MktGH5DyVBmnpvSj9HknwkH3Kf8utcO5BlaYxJs67B/MZXiw09tt4oso+
jClM9OHu7s5DN1VcAXhXSPy8faCX0XkPYPZTCnu2z3ykdUgdR2ZYPolwEksJ
u4AKJGe9gz4wKrMAQGD5OyWoX1oueJGyZth4mFMALimJGP0b2xv3AjnvN8Mr
ZoI+pBhsUZJPaJG28SUWesDyStiHU0zkFWXj150P47Nkmk2um6yMQ8IbOsB8
OsXkhXBD5dWsGsVU46nrRQcWcdM1Fu8+gru+UAdnZSMgV3FJqF5RUbYUDfvC
UyO6f740HAAbfo/P7viUPChcsSxG0pGKICydOkC2qMcKgs3x5HGg9Niqvo22
dlTXGNHaAYyPXADXTUo2Cz7gG1TjDP4jS42UJZFs/IS+69wSKLS6hRePdffa
NhbqNsACnOKoP3ah2dwoCF7X96AxfwEECn3Wlvcz3maeYo8D2j7uHi5cQzUs
GiwpWNV7dNrAmlWUhK84pjORQnn+YGdd8yyLwmMda06H9sHuIDyLEW1+N/AN
FfrWrr/EMiqptwIxXVYhXBoL0rX4YNeUScmyw94Noj+YeIPRvl1TLx0824oa
BpoZRGoKme3I2QxmJ2LLx+xGDQPL7EXWIDEPI95j5lGklqN5HInBaJ5EoiuZ
AYwcmIxmMIgCO9QMtqO2iWgGO1HTNDSD3YiVazPYizwei/4FSRcYPIosKzOD
x5FjVmbwJGIeYra3opB3mO1BRNRotrcjtyRmeyey9Ge2dyOmO7O9FzU2vdl+
GIXb0mwDJIT77ceROBK2n0SBqm52BpGq6GZnO2LN3OzsRL4ObnZ2I6YrswPT
dnRkdh5GTnk1O48iVlvNzuPIU0zNzpOIlFGzuxX5SqjZHUSkfJrd7ahDPTG7
O1Golpjd3ahLHTG7CJinhpjdh5FVP8zuo+gWtcPsPo5a6obZfRJ5aobZ24oa
2oTZG0RWizB721FTezB7O5HTGsweELRqC2ZvLwq0BLP3MGpqB2bvURQ1zVra
OQtsXdpKvnFL20lrAtCOIvOVCHbn8S7vT7F+9gdR0yDah96sJbQPPTkTaB92
gtg++3uRM3r2H4L1y7r9PqKHdH/oh00D6CNSfR5eW00eGogODy1a2juM1dTb
93EDoMYO44muvv8oUi19/3Gk+vn+k8hp5vvADCJVsvcH2n4Mw3uKNQIpRaXf
ztIcb0I9QgaQUG0ZrMeazDLmCclNRCUntR0/9O4QpVyuTVsWy16t2qjVrDVt
bm6oNBUnhmKS2aS44sL+kYw7NA92+lv9rQfIdc+KIUpHJNxh6/bWZ3xROTQY
+3VdFzTrSbUrTC8TsOPgylKbB4zOSvWIPhggLERxD4gjVQiQ5Opt/kipVjdD
0hPP03ooCqPsgiHVwLv2qxjqVbN9aennEat6GRsMC8HBPP2Tz2g1tUt/eDmG
3hPWJYZSTyN4welqQ8PBs/Ny4r1VQhkaLNjsvQhQa7+0uct+ubhIu2KkejN6
sL219WC4qNcvAihtCTrvAidX0Xo+QgFwNudqdHzBa9/7Xq4JDTGyIMsybNSN
zFsRGiCVy380X98y0cXTTfNL2Bcz3jsJxRybI6xBIuXj3IQf7N4fsf5dI1jl
GzgmVyT83PBls64IH77GIil0wYlb9dAeEhbgl+ck3XPkF/QMFgwL/v7s5WJH
PHCMUxBe8Rj0pGxSUbLtP8v6PXv7zu4HgdMInA4twZo9/DlrJpdUS/FPqbFH
10IL85qieNCad5RJjlX7RlgeFEMwgw45XsKmt0uerZDFg8o8OKDvHsgdzFyh
sW/Mq9yrhBvSgXeTCxZvpCLkLiE/adb60UKkOBmv4E5RBp1KdWmqWCg17/VC
ddfofxf1bHq5zptdac2LxdC7FG/zlUL0Wujb/9SrUcif/kImfnzXOAtYeimA
fgpPbxTy+CdZXyz50ZSWt6P+HvP7Z6XfO+YnOufBCGl4ko6pGkcFSieHtIFi
unQGKm26JEoncxwwA9AA1JIAR7A1SrpRepqmNV2lDQzl5dujF4dvgEb3hqxN
PoWf5f2NjY39/Q38h37Rn339ifcX/OgL6of62linL+F/6/CzrD8bi3oIe4vW
N7ifFfy/fezB9rFC/13fuKsrhClawR/oZvnpOvYGP9DBCnVB/11ZXmE491vd
xd5suZ8V7GIZQXoq31Jf/D/sElrCHx2AxWE/0AXDIZAwAIirlfV9Qd3Gxgr2
hwX8LzLY/c9KrIGPMWHSz9MV9/OUOwIcIabW1zfg7/X1/fV9+v+VReDYedmO
lp9iN+swhZX1dZ4kgbMPj9r9NPHDXeD/5Ntl6I/6WXmKj3CeAN/iBbP0g6he
VrQyroiK1qmXNmU2Vi6iteKeqBfE5Qb2swHLgz2t40I+pW7XN1pwyP+G0Uq8
/pTRw2Szgr0jkgEt1Pf6stAVYhHhxAZKOvQb/G8YCRUC+EKD8FQAwEnZPrAZ
LiD00+/3oRu9EQE6Gw43on1EhzZeJsgZSysEiNcLzAxWbhm6GSIoeqWCgX7W
1yPYlRvLFke0Y3lT4bS4n6dCECtAm3HMvbTWnfb3hmLbDr4Bi7T8lDHHT4Ej
wMjYy0bHT4Tkv7684s0NFga7iTdi/J13iqzDhnAV/Gn2Q69wK64rNLCR1lc2
1hFRsForG0iUDCvuL/rA/LE4x2sANzaM7Qff0E4gzvEUyW6ZmGO8wrtsf0Pp
a11WfMO8gF6A/6IDhzhKBA8R00AuQHjw61NYFewHn2M36/joKa/gyrrHcZS8
mS9EPE/uB1GFpLSB+xG7ox2/IbyJ6XAZqGVI3ewLDQIV4j7FB4iJZYYCAdgn
PACnQAJYWbfkDLDC98s0tXVsEW/wfwEeIXNE9AoNg/wY22OPyP1xXivrTN8r
tN9WnhJKwvVCkuOOAM/0NawUzgl6w821jET+VKkC9sVTpi4rEEg0wHohgp4S
Ue+v8BjISTeIf7EEgn6QqTJR0w/zQb6BjCkJ+1mnkdexI6B95FkrG4RgJbl1
YbgxYp9x3KTqaJk6hGbYEUCPIG8In9eFtwwFlyHesLAM8X/wA4iPmD8tU0fA
E2DSOAemEJ7XOu7YDeFbiK24HxPngOWG36AfYCQRMXWgZUIq7gkUDys0f0AJ
ExYLnH1cZuZKcpsePAJaIqAiJjX8Bnk8AEI7FNsATSJeqe9l5aOI7H0S1eab
ZD4x+0PuL2KaRe4F1L+MrH59WRknyWNcr2Y/+zAx81VxhVKwP/T62eAWSBUr
uFHj5RXZQyv0MugH2iE768eIYdweMJrCs7Evohn3B/0gaQNFAWRAnuvC1Tek
H9gbwNKIepgcI2FJhFXmMStWcYlhDozxdZEv2o/+WAqD/c497SNfECm2ISIV
hfQG62qx3w8/hLn1reyJiD3zRoD9t0xSVVQFgOupbDAVgLLgxPyQ58cqwKJ1
5F77SMMo0Z+uEx9et9rYBkm+OJaO4B9caOI9KMDK1MQsl4VdrSB1xshulhEn
JKBVjsWyWLHsTtga+Js5Qn9saRCg/SimZQGGA3DFQ5j5cH3IqgJDtk58jiYE
Ha5TP+sbTf11IwJmvm91oHUie6vIrCNZMpblZ19YecCkab/HK0/314n1IkGr
DHvKb5+uEIunH9UNuqSg9IOSEDsC+YcyEeHi1VrZGCJhqk7TEBZBP/u0X0jl
Wd4gOazaLzOfDdJnkK0gjQ/jZk/72s/+U2QIxLI2RP6S+BMetk6yiBduZdlX
mfdDeOIVpJ4YOWvMUkp1VeqF2aGiH1dOd7/5Cs97KiNyef8pq8cryL/WiWkt
E18jIaFCn5aJZVYcM6bMMZh8xVmaZ+eG+lGFG3DxFIkJEYG0FZOiIXuX1I19
pmzuZ8OfWIREiGJgnfgp7TDSElbWmWBYb1xhwoS1jXHEjnVfXheTidV2IGqW
FDydfeI4pIVQN8shFD488DMk4YGMH1lvf3/D2l9WnSY8L/usp6Of9SGxSGSb
G8SJlhHrKgJtTwyU9/G6+yF5IbJlfYMFIIyNHS6rxqgGHetAT9fbvWA/yyyi
1lERo41BC78Syl5HfPG+UFX4ExGbZHUJhsJ+aKffapd2WHSRVXpogk9ZmK/c
1g0uY+uH57UsGgrZb8vL7WZ+J52vpZ9l0XTYEKQ3vJdVjvOTlYWAaj+6N7kv
axvHQ9FL4AeXfaE/QOe1z13tq8kuy6TXvuIqLIdcw+O2Mdlx3JMac/Q5IXJF
GDPNB7ESxwvBYfuUyR/UvvX1fQsEKAcCyoqiZUE3+C6SX1HtReKBmaG6Rttk
QzuhJuZVkc9r8ya7SCajNDENeJxIQdOadgfam9jPutfLrT8bfj+8T3mJgIGs
i7HELRdZ3A4e7/d4f3lZ1kfY4AJiMfvGbJ6YH/DHnPzp856jHln+DTFwFvcB
vUAnP/yw+l/w63+t/fDDnx5AP+t+L0wzZH77O7xp/JODbdMYmL8xf4Lfe59H
G+p9Wl9mkeZAIZ+rc46F/eDdwtQP/Nb7/EEU8hfoZvnu9cF+HvR/4J/+g5Og
k/t1Qb28yIo8T8xvJ8lfCUx2C36V5h/Ms6z8cFFM/krnsf+RnJt3yRQvNQR1
azafzdI6TUuvPGh1kYyLK7y7Ry/pGdJFPIfjDKubRf8/D+JvdvlmAQA=

-->

</rfc>
