<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.24 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-song-satp-implementation-guide-03" category="info" tocDepth="4" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="SATP Implementation Guide">Secure Asset Transfer Protocol (SATP) Implementation Guide</title>

    <author initials="H." surname="Song" fullname="Hyojin Song">
      <organization>Seoul National Univ.</organization>
      <address>
        <postal>
          <country>South Korea</country>
        </postal>
        <email>fun@snu.ac.kr</email>
      </address>
    </author>
    <author initials="Y.-G." surname="Hong" fullname="Yong-Geun Hong">
      <organization>Daejeon Univ.</organization>
      <address>
        <postal>
          <country>South Korea</country>
        </postal>
        <email>yonggeun.hong@gmail.com</email>
      </address>
    </author>
    <author initials="G." surname="Jeong" fullname="GukSik Jeong">
      <organization>TTA</organization>
      <address>
        <postal>
          <country>South Korea</country>
        </postal>
        <email>jgsigi@tta.or.kr</email>
      </address>
    </author>
    <author initials="T." surname="Hardjono" fullname="Thomas Hardjono">
      <organization>MIT</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>hardjono@mit.edu</email>
      </address>
    </author>

    <date year="2026" month="November"/>

    <area>Applications and Real-Time</area>
    <workgroup>Secure Asset Transfer Protocol</workgroup>
    <keyword>Gateway</keyword> <keyword>Digital asset network</keyword> <keyword>Asset transfer</keyword> <keyword>Interoperability testing</keyword>

    <abstract>




<t>This document provides non-normative implementation guidance for the Secure
Asset Transfer Protocol (SATP). It describes a small, independent peer
implementation and reproducible tests for evaluating protocol behavior and
interoperability. It relates Core processing to Setup and Artefacts Registry
proposals, while distinguishing published requirements from experimental
implementation choices. The guide
addresses transport mappings, message protection, asset-state observation,
failure handling, and reporting of specification ambiguities. It does not
define a new protocol, certify an implementation, or claim completed
interoperability experiments.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://anawhj.github.io/draft-song-satp-implementation-guide/draft-song-satp-implementation-guide.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-song-satp-implementation-guide/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Secure Asset Transfer Protocol  mailing list (<eref target="mailto:sat@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/sat/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/sat/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/anawhj/draft-song-satp-implementation-guide"/>.</t>
    </note>


  </front>

  <middle>




<section anchor="introduction-doc"><name>Introduction</name>

<t>SATP coordinates asset transfers between gateways representing different
asset networks. <xref target="SATarch"/> supplies the architectural context and
<xref target="SATcore"/> defines the Core exchange. Independent implementations help
test whether the specifications provide enough detail for different
developers to reach compatible behavior.</t>

<t>This guide supports that work with implementation boundaries, observable
state transitions, and reproducible test scenarios. Its initial target is
a small peer that can exercise both sides of a bilateral transfer against
another implementation, including Hyperledger Cacti SATP Hermes. Such a
peer can expose ambiguous requirements without providing the operational
capabilities expected of a production gateway.</t>

<t>This revision focuses on implementing the preparation described in
<xref target="SETUP"/> and integrating the artefact services in <xref target="REGISTRY"/>. These
documents have separate scopes and revision histories. Their inclusion
here does not make a particular Setup or Registry implementation
mandatory for Core. An experiment should identify the specifications
and subsets it exercises.</t>

<t><xref target="implementation-scope"/> illustrates the logical scope covered by this
guide. The two application-gateway-network stacks support a bilateral
Core exchange, with preparation and supporting services shown separately.</t>

<figure anchor="implementation-scope">
  <name>Conceptual scope of SATP implementation guidance</name>

  <artset>
    <artwork type="svg" name="satp-implementation-scope.svg">
      <svg xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny" viewBox="0 0 1020 630" width="1020" height="630">
        <title>Conceptual scope of SATP implementation guidance</title>

        <desc>Two application, gateway and network stacks coordinate a transfer context and exchange Core asset-transfer messages. An Artefacts Registry supports Setup through API3 lookups.</desc>

        <text x="150" y="22" font-family="sans-serif" font-size="19" text-anchor="middle" fill="black" font-weight="bold">Origin side</text>

        <text x="870" y="22" font-family="sans-serif" font-size="19" text-anchor="middle" fill="black" font-weight="bold">Destination side</text>

        <rect x="40" y="38" width="220" height="65" fill="white" stroke="black" stroke-width="2" />

        <rect x="760" y="38" width="220" height="65" fill="white" stroke="black" stroke-width="2" />

        <text x="150" y="64" font-family="sans-serif" font-size="20" text-anchor="middle" fill="black" font-weight="bold">Application App1</text>

        <text x="150" y="89" font-family="sans-serif" font-size="17" text-anchor="middle" fill="black">Intent / preparation</text>

        <text x="870" y="64" font-family="sans-serif" font-size="20" text-anchor="middle" fill="black" font-weight="bold">Application App2</text>

        <text x="870" y="89" font-family="sans-serif" font-size="17" text-anchor="middle" fill="black">Intent / preparation</text>

        <path d="M 260 76 L 760 76" fill="none" stroke="black" stroke-width="2" stroke-dasharray="8 6" />

        <polygon points="260,76 270,71 270,81" fill="black" />

        <polygon points="760,76 750,71 750,81" fill="black" />

        <text x="510" y="61" font-family="sans-serif" font-size="19" text-anchor="middle" fill="black">Transfer-context coordination</text>

        <rect x="370" y="132" width="280" height="68" fill="white" stroke="black" stroke-width="2" />

        <text x="510" y="159" font-family="sans-serif" font-size="21" text-anchor="middle" fill="black" font-weight="bold">Artefacts Registry</text>

        <text x="510" y="186" font-family="sans-serif" font-size="17" text-anchor="middle" fill="black">TARs / profiles / identifiers</text>

        <path d="M 150 103 L 150 265" fill="none" stroke="black" stroke-width="2" />

        <polygon points="150,103 145,113 155,113" fill="black" />

        <polygon points="150,265 145,255 155,255" fill="black" />

        <path d="M 870 103 L 870 265" fill="none" stroke="black" stroke-width="2" />

        <polygon points="870,103 865,113 875,113" fill="black" />

        <polygon points="870,265 865,255 875,255" fill="black" />

        <text x="133" y="174" font-family="sans-serif" font-size="17" text-anchor="end" fill="black">API1</text>

        <text x="133" y="197" font-family="sans-serif" font-size="16" text-anchor="end" fill="black">Initiate /</text>

        <text x="133" y="219" font-family="sans-serif" font-size="16" text-anchor="end" fill="black">status</text>

        <text x="887" y="174" font-family="sans-serif" font-size="17" text-anchor="start" fill="black">API1</text>

        <text x="887" y="197" font-family="sans-serif" font-size="16" text-anchor="start" fill="black">Initiate /</text>

        <text x="887" y="219" font-family="sans-serif" font-size="16" text-anchor="start" fill="black">status</text>

        <path d="M 215 265 L 215 224 L 440 224 L 440 200" fill="none" stroke="black" stroke-width="2" stroke-dasharray="8 6" />

        <polygon points="215,265 210,255 220,255" fill="black" />

        <polygon points="440,200 435,210 445,210" fill="black" />

        <path d="M 805 265 L 805 224 L 580 224 L 580 200" fill="none" stroke="black" stroke-width="2" stroke-dasharray="8 6" />

        <polygon points="805,265 800,255 810,255" fill="black" />

        <polygon points="580,200 575,210 585,210" fill="black" />

        <text x="320" y="249" font-family="sans-serif" font-size="17" text-anchor="middle" fill="black">API3 lookup</text>

        <text x="700" y="249" font-family="sans-serif" font-size="17" text-anchor="middle" fill="black">API3 lookup</text>

        <rect x="40" y="265" width="220" height="130" fill="white" stroke="black" stroke-width="2" />

        <rect x="760" y="265" width="220" height="130" fill="white" stroke="black" stroke-width="2" />

        <text x="150" y="302" font-family="sans-serif" font-size="22" text-anchor="middle" fill="black" font-weight="bold">Gateway G1</text>

        <text x="150" y="336" font-family="sans-serif" font-size="19" text-anchor="middle" fill="black">Core peer</text>

        <text x="870" y="302" font-family="sans-serif" font-size="22" text-anchor="middle" fill="black" font-weight="bold">Gateway G2</text>

        <text x="870" y="336" font-family="sans-serif" font-size="19" text-anchor="middle" fill="black">Core peer</text>

        <path d="M 260 292 L 760 292" fill="none" stroke="black" stroke-width="2" stroke-dasharray="8 6" />

        <polygon points="260,292 270,287 270,297" fill="black" />

        <polygon points="760,292 750,287 750,297" fill="black" />

        <text x="510" y="278" font-family="sans-serif" font-size="18" text-anchor="middle" fill="black">Context / gateway binding (before Core)</text>

        <path d="M 260 353 L 760 353" fill="none" stroke="black" stroke-width="2" />

        <polygon points="260,353 270,348 270,358" fill="black" />

        <polygon points="760,353 750,348 750,358" fill="black" />

        <text x="510" y="338" font-family="sans-serif" font-size="19" text-anchor="middle" fill="black">Asset-transfer exchange (Stages 1-3)</text>

        <path d="M 150 395 L 150 487" fill="none" stroke="black" stroke-width="2" />

        <polygon points="150,395 145,405 155,405" fill="black" />

        <polygon points="150,487 145,477 155,477" fill="black" />

        <path d="M 870 395 L 870 487" fill="none" stroke="black" stroke-width="2" />

        <polygon points="870,395 865,405 875,405" fill="black" />

        <polygon points="870,487 865,477 875,477" fill="black" />

        <text x="168" y="443" font-family="sans-serif" font-size="17" text-anchor="start" fill="black">Asset operations</text>

        <text x="852" y="443" font-family="sans-serif" font-size="17" text-anchor="end" fill="black">Asset operations</text>

        <rect x="40" y="487" width="220" height="88" fill="white" stroke="black" stroke-width="2" />

        <rect x="760" y="487" width="220" height="88" fill="white" stroke="black" stroke-width="2" />

        <text x="150" y="520" font-family="sans-serif" font-size="18" text-anchor="middle" fill="black" font-weight="bold">Asset network NW1</text>

        <text x="150" y="550" font-family="sans-serif" font-size="17" text-anchor="middle" fill="black">Assets / ledger state</text>

        <text x="870" y="520" font-family="sans-serif" font-size="18" text-anchor="middle" fill="black" font-weight="bold">Asset network NW2</text>

        <text x="870" y="550" font-family="sans-serif" font-size="17" text-anchor="middle" fill="black">Assets / ledger state</text>

        <path d="M 280 516 L 350 516" fill="none" stroke="black" stroke-width="2" />

        <text x="366" y="523" font-family="sans-serif" font-size="17" text-anchor="start" fill="black">Core or local network interaction</text>

        <path d="M 280 551 L 350 551" fill="none" stroke="black" stroke-width="2" stroke-dasharray="8 6" />

        <text x="366" y="558" font-family="sans-serif" font-size="17" text-anchor="start" fill="black">Preparation or supporting lookup</text>

        <text x="510" y="606" font-family="sans-serif" font-size="17" text-anchor="middle" fill="black">Logical relationships; not a required execution sequence.</text>

</svg>

</artwork>

    <artwork type="ascii-art" name="satp-implementation-scope.txt">
     Origin side                               Destination side
+---------------------+                     +---------------------+
|   Application App1  | &lt;-- TC intent ---&gt;  |   Application App2  |
|   intent / prepare  |                     |   intent / prepare  |
+---------------------+                     +---------------------+
           ^                                           ^
           |   API1                                    |   API1
           v                                           v
+---------------------+                     +---------------------+
|      Gateway G1     | &lt;-- TC binding ---&gt; |      Gateway G2     |
|                     |    (before Core)    |                     |
|      Core peer      |&lt;== Core exchange =&gt; |      Core peer      |
|                     |    (Stages 1-3)     |                     |
+---------------------+                     +---------------------+
       ^   ^                                           ^   ^
       |   :                                           :   |
       |   :   API3: artefact lookup                   :   |
       |   +................+         +................+   |
       |                    v         v                    |
       |           +---------------------------+           |
       |           |     Artefacts Registry    |           |
       |           | TARs/profiles/identifiers |           |
       |           +---------------------------+           |
       |                                                   |
       |                 asset operations                  |
       v                                                   v
+---------------------+                     +---------------------+
|  Asset network NW1  |                     |  Asset network NW2  |
|    assets / state   |                     |    assets / state   |
+---------------------+                     +---------------------+

TC = transfer context. API1: initiation and status.
API3: artefact lookup supporting Setup.
</artwork>

</artset>

</figure>

<t>Preparation spans the applications, their networks, and the gateway pair:
<xref target="SETUP"/> explains transfer-context establishment, asset preparation,
and gateway binding before Core starts. Side lookups through API3 obtain
artefacts described by <xref target="REGISTRY"/>; the registry does not relay the
gateway-to-gateway Core exchange. One registry is shown for readability,
but deployments may use different registries for different artefacts.</t>

<t>The links express responsibilities and relationships, not a complete
message sequence. Dashed links in the graphical rendering denote
preparation or supporting lookups. These interactions support Core
entry; they are not additional Core stages.
Application-to-network preparation is summarized by the application
labels rather than drawn as additional links. The experimental test
harness can drive and observe these interfaces as described later.</t>

<section anchor="scope"><name>Scope and Limitations</name>

<t>The initial implementation scope is a direct transfer between two
gateways, one test asset per transfer, and controlled network
adapters. The test peer should implement both sender and receiver roles.
It should support invalid-input and failure injection as well as
successful transfers.</t>

<t>Production operations, high availability, general gateway discovery,
complete regulatory workflows, arbitrary ledger integrations, and
performance qualification are outside the initial scope. Mock networks
can demonstrate decisions made by the peer, but cannot establish a real
ledger's finality or cross-system economic guarantees.</t>

<t>Chaining bilateral transfers does not by itself establish atomicity over
an entire multi-hop route. An implementation studying that case should
identify its additional coordination protocol and failure assumptions.
This guide does not define that protocol. Similarly, a successful
two-phase exchange under stated assumptions does not prove unconditional
termination or automatic recovery after every possible failure.</t>

</section>
<section anchor="baseline"><name>Specification Baseline and Pending Changes</name>

<t>The following revisions form the documentary baseline for this draft.
The section numbers cited in this guide refer to these revisions.</t>

<table>
  <thead>
    <tr>
      <th align="left">Subject</th>

      <th align="left">Baseline</th>

</tr>

</thead>

  <tbody>
    <tr>
      <td align="left">Core</td>

      <td align="left">draft-ietf-satp-core-17</td>

</tr>

    <tr>
      <td align="left">Architecture</td>

      <td align="left">draft-ietf-satp-architecture-10</td>

</tr>

    <tr>
      <td align="left">Setup</td>

      <td align="left">draft-avrilionis-satp-setup-stage-05</td>

</tr>

    <tr>
      <td align="left">Registry</td>

      <td align="left">draft-avrilionis-satp-artefacts-registry-01</td>

</tr>

</tbody>

</table>

<t>Core revision -17 specifies an HTTPS and JSON baseline. The October 2026
discussion in <xref target="TRANSPORT-DISCUSSION"/> proposes separating transport
properties from gRPC and HTTP mappings. That discussion records a change
plan, not an already published replacement for the requirements of
revision -17. Guidance about transport separation in this document
anticipates that direction without defining a standard gRPC binding.</t>

<t>When a later revision is selected, implementers should update the
requirements-to-test mapping and record changes in accepted messages,
security processing, and failure behavior. An editor's copy should be
identified by a commit, not merely by a moving "latest" URL.</t>

</section>
</section>
<section anchor="conventions"><name>Conventions and Terminology</name>

<t>This is an Informational, non-normative guide. Lowercase words such as
"should" express implementation advice. Requirements belong to the
referenced specifications; a summary or example here does not modify
them. A conflict should be resolved through the specification's authors
and working group rather than by silently treating this guide as the
authoritative definition.</t>

<t>The terms gateway, origin network, destination network, and commitment
agreement follow <xref target="SATarch"/>. In an asset transfer, G1 is the sending
gateway and G2 is the receiving gateway. A single implementation can
perform either role in different transfers.</t>

<t>The following terms describe the test environment:</t>

<ul>
  <li>    <t>Independent peer: an implementation whose protocol decisions are
developed from the specification independently of the counterpart's
state-machine code. A different programming language alone does not
establish this independence.</t>
</li>

  <li>    <t>Test harness: the driver that supplies inputs, injects failures,
observes peer and backend effects, and evaluates expected outcomes.</t>
</li>

  <li>    <t>Test profile: a versioned, locally named configuration of specification
revisions, supported features, transport, and security choices. This
guide does not register profile names or a discovery format.</t>
</li>

  <li>    <t>Ledger adapter: the boundary between a gateway's protocol processing
and the represented network's asset operations and evidence.</t>
</li>

  <li>    <t>Journal: the local record of accepted inputs, protocol decisions,
backend operation identifiers, and observed outcomes.</t>
</li>

  <li>    <t>Inconclusive outcome: a result for which available evidence cannot
establish the expected decision or backend effect.</t>
</li>

</ul>

<t>The Transfer Context (TC), TCID, Tokenized Asset or Artefact Record
(TAR), and Digitized Asset Record (DAR) are used in the context of
<xref target="SETUP"/> and <xref target="REGISTRY"/>. Their distinct roles are discussed in
<xref target="setup-context"/>.</t>

</section>
<section anchor="implementation-architecture"><name>Implementation Architecture</name>

<section anchor="implementation-components"><name>Separation of Responsibilities</name>

<t>A small implementation can use the following components without adopting
a large gateway framework.</t>

<table>
  <thead>
    <tr>
      <th align="left">Component</th>

      <th align="left">Responsibility</th>

</tr>

</thead>

  <tbody>
    <tr>
      <td align="left">Core engine</td>

      <td align="left">Validate permitted transitions and decide protocol actions.</td>

</tr>

    <tr>
      <td align="left">Codec and protection</td>

      <td align="left">Decode messages, verify signatures and hashes, and encode outputs.</td>

</tr>

    <tr>
      <td align="left">Transport adapter</td>

      <td align="left">Map delivery, responses, metadata, and errors to a selected transport.</td>

</tr>

    <tr>
      <td align="left">Ledger adapter</td>

      <td align="left">Execute and observe network-specific asset operations.</td>

</tr>

    <tr>
      <td align="left">Context and journal store</td>

      <td align="left">Preserve transfer associations, decisions, and operation evidence.</td>

</tr>

    <tr>
      <td align="left">Preparation modules</td>

      <td align="left">Provide Setup orchestration and Registry access.</td>

</tr>

    <tr>
      <td align="left">Test harness</td>

      <td align="left">Drive independent peers and evaluate protocol and asset effects.</td>

</tr>

</tbody>

</table>

<t>The Core engine should not depend on a particular HTTP handler or RPC
framework. A useful local API accepts validated input and current state,
then produces a proposed next state and explicit actions. The surrounding
code records decisions, executes backend actions, and records their
outcomes. This design makes the same decision logic testable without a
network connection.</t>

<t>Separating actions does not make a local database and a remote ledger
atomic. The adapter should retain backend operation identifiers and allow
the harness to query whether an operation happened when an outcome is
uncertain. Tests should include a crash after backend execution but
before the journal records success.</t>

</section>
<section anchor="ledger-journal"><name>Network Adapter and Journal</name>

<t>For the initial experiment, the adapter should expose asset inspection,
source locking, source extinguishing, destination creation under gateway
control, and final assignment to the beneficiary. The selected network
determines the actual operations and proofs. Any cleanup operation should
state its preconditions and irreversible boundaries.</t>

<t>The journal should associate the TCID, Session ID, gateway roles, asset
identifiers, message type, relevant sequence and hash information,
signature verification result, backend operation ID, and before/after
observations. Persisting a decision before sending its corresponding
message reduces uncertainty, but is not a complete recovery protocol.</t>

<t>The harness should independently inspect backend state rather than rely
only on the gateway's success response. In the controlled asset model it
should check that the same transferable value does not become spendable
by both the originator and beneficiary. Temporary destination assets
held by G2 should be distinguished from assets available to the final
beneficiary.</t>

</section>
</section>
<section anchor="core-processing"><name>Core Protocol Processing</name>

<t>The implementation should derive wire messages from the selected Core
revision. The simplified TransferRequest and TransferCommit names used
in revision -02 of this guide are not a substitute for the messages
below. Full message schemas and required fields remain defined by
<xref target="SATcore"/>.</t>

<section anchor="core-success"><name>Successful Bilateral Transfer</name>

<t>The following sequence summarizes Sections 8 through 10 of <xref target="SATcore"/>.
Message names are suffixes of the namespace
<tt>urn:ietf:params:satp:core:msgtype:</tt>. The state observations are test
boundaries rather than new wire states.</t>

<ol>
  <li>    <t>Stage 1 exchanges       <tt>transfer-proposal-msg</tt>
,       <tt>proposal-receipt-msg</tt>
,
      <tt>transfer-commence-msg</tt>
, and       <tt>ack-commence-msg</tt>
, alternating between
G1 and G2. The peers establish the proposed transfer and its
commencement.</t>
</li>

  <li>    <t>Stage 2 sends       <tt>lock-assert-msg</tt>
 from G1 after the source lock. G2
validates the claim, records it in NW2 as depicted in Core Figure 2,
and returns       <tt>assertion-receipt-msg</tt>
.</t>
</li>

  <li>    <t>Stage 3 sends       <tt>commit-prepare-msg</tt>
 from G1. G2 creates the destination
asset under its own control and sends       <tt>commit-ready-msg</tt>
.</t>
</li>

  <li>    <t>G1 extinguishes the source asset and sends       <tt>commit-final-msg</tt>
 with
the relevant evidence. G2 verifies it, assigns the destination asset
to the beneficiary, and returns       <tt>ack-commit-final-msg</tt>
.</t>
</li>

  <li>    <t>G1 records completion and sends       <tt>commit-transfer-complete-msg</tt>
 to G2.</t>
</li>

</ol>

<t>The implementation should compare this sequence against the normative
field descriptions, not copy draft examples without checking them.
In particular, creation under G2's control and assignment to the
beneficiary are distinct observations in this baseline.</t>

</section>
<section anchor="core-validation"><name>Validation and Cryptographic Processing</name>

<t>For each message, validation should use that message's own schema and
the current session state. Useful checks include the authenticated
counterpart, expected message type and sequence where defined, transfer
association, applicable expiration, signature, claim format, and relevant
hashes. A message that decodes successfully can still be invalid in the
current state.</t>

<t>The signed-message and cryptographic baseline is described in Section
5.2 of <xref target="SATcore"/>: peer messages are protected with JWS <xref target="RFC7515"/>,
with ECDSA P-256 and SHA-256 (ES256 <xref target="RFC7518"/>) as the baseline.
The standalone burn assertion in Section 10.3 is also signed
independently; verifying only the enclosing message does not replace
verification of that claim. The implementation
should distinguish transport keys, gateway message-signing keys, and
network evidence keys. A key received in a message is not automatically
a trusted identity.</t>

<t>Hash validation should be field-specific. Proposal Receipt, for example,
has its own claim-hash and timestamp semantics; the guide does not add a
previous-message hash to every message. The test profile should specify
the exact bytes used for each hash and signature, including any
envelope exclusion, serialization, and encoding rule that needs
clarification. A semantic JSON comparison is insufficient to establish
byte-level signature interoperability.</t>

</section>
<section anchor="core-failures"><name>Errors, Abort, and Uncertain Outcomes</name>

<t>Core error handling should follow Sections 10.6, 10.7, and 11 of
<xref target="SATcore"/>. Protocol failure, an application-requested abort, and a
connection failure are distinct events. For the -17 HTTP baseline,
Section 11.3 describes error representations using
<tt>application/problem+json</tt> and <xref target="RFC9457"/>, with SATP-specific information.
These should not be replaced by invented private Core error codes.</t>

<t>An abort ends the session exchange, but its effect on assets depends on
the point reached. The implementation should evaluate the irreversible
boundary described in Section 11.5 before attempting cleanup. A timeout
after extinguishing the source asset does not justify recreating it or
assuming that the destination assignment failed.</t>

<t>Section 10.8 of Core revision -17 does not provide session recovery or
resumption. The proposed peer can preserve evidence and expose an
inconclusive outcome for operator diagnosis. Any additional recovery
exchange should be separately identified and tested as an extension.
A Hermes recovery facility is not automatically a Core -17 requirement.</t>

<t>The initial harness should disable configured application-level retries
for state-changing operations, document lower-level retry behavior, and
then test explicitly configured retransmission scenarios. Duplicate
inputs should be checked before repeating backend effects. This advice
does not create a retransmission protocol absent from the baseline.</t>

</section>
<section anchor="core-clarifications"><name>Clarifications to Track</name>

<t>Revision -17 contains points that independent implementations should
raise for clarification. These include the <tt>ack-prepare-msg</tt> entry in
Section 5.3.2 versus <tt>commit-ready-msg</tt> in Section 10.2, and
<tt>mintAssertionFormat</tt> in a field description versus
<tt>mintAssertionClaimFormat</tt> in an example. Example syntax and spelling
also need validation before becoming fixtures.</t>

<t>The exact serialization and hash boundary, and the interaction between
general lock-release wording in Section 11.2 and the post-commit boundary
in Section 11.5, deserve explicit review. A test profile can record a
provisional interpretation to reproduce an experiment, but this guide
does not settle these specification questions or declare a new wire
format. Cases affected by unresolved choices should identify that fact
in their result.</t>

</section>
</section>
<section anchor="transport-mappings"><name>Transport Mappings and Message Representation</name>

<section anchor="http-baseline"><name>Published HTTP Baseline</name>

<t>For Core revision -17, the HTTP adapter should exercise the specified
HTTPS POST, TLS 1.3 <xref target="RFC8446"/>, JSON <xref target="RFC8259"/>, and
<tt>application/satp+json</tt> behavior, while
handling the error representation described in <xref target="core-failures"/>.
It should retain the distinction between transport delivery, protocol
acceptance, and completion of a backend operation.</t>

<t>The profile should document routing, status handling, response
correlation, connection timeouts, size limits, credential placement,
and any use of mutual TLS. It should identify which choices are explicit
in Core and which need agreement for the experiment. This guide does
not assign a new standard HTTP endpoint or negotiation mechanism.</t>

</section>
<section anchor="grpc-experiment"><name>Experimental gRPC and Hermes Compatibility</name>

<t>A gRPC experiment should keep the Core domain model separate from its
service definitions and serialization. The profile should name the
service methods, unary or streaming behavior, metadata placement,
deadline and cancellation handling, and status/error mapping. A gRPC
status should not erase a signed SATP protocol error. Cancellation of a
call also does not roll back a backend operation already performed.</t>

<t>Native gRPC, gRPC-Web, and Connect are different protocol mappings.
Native gRPC normally uses HTTP/2; an HTTP/1.1 gRPC-Web endpoint is not
interchangeable with it. The inspected <xref target="HERMES"/> snapshot constructs
gRPC-Web transports for the Core stages in <tt>gateway-orchestrator.ts</tt>.
The adapter should match the actual counterpart's endpoints and protocol.
That observation is not a claim that Hermes defines the standard binding.</t>

<t>The harness should distinguish a Hermes compatibility test from a Core
-17 HTTP conformance test. It can share the same domain engine, while
the compatibility adapter records the counterpart's schema, paths,
metadata, and serialization. Using a supplied <tt>.proto</tt> file is permitted
for interoperability, but adopting its state-machine implementation
would weaken the independence of the test peer.</t>

<t>The inspected Hermes <tt>jws-interceptors.ts</tt> signs Protobuf binary content
and carries the JWS in the <tt>satp-signature</tt> header. Cross-language
fixtures should therefore establish the exact signed bytes before a
full transfer is attempted. <xref target="PROTO-SERIALIZATION"/> explains why
deterministic Protobuf output is not a canonical representation across
all schemas, runtimes, and changes. Re-encoding received data can change
the bytes used in signature verification.</t>

<t>The experiment should cover default and absent values, unknown fields,
maps, byte fields, and JSON-to-Protobuf conversion. A decision to use a
particular canonical representation is a mapping choice that needs
agreement; this guide does not silently replace the counterpart's
representation with JCS. JCS requirements for Registry are discussed
separately in <xref target="registry-security"/>.</t>

<t>gRPC includes retry mechanisms <xref target="GRPC-RETRY"/>; selecting it does not
provide exactly-once application effects. Retransmission and duplicate
suppression remain explicit subjects for the harness.</t>

</section>
<section anchor="other-encodings"><name>Other Encodings</name>

<t>CBOR/COSE and other representation experiments should have separate
mapping identifiers, schemas, and test vectors. They are not presented
here as interchangeable alternatives to the -17 JSON/JWS baseline.
This revision does not define CBOR integer-key assignments or imply
that such assignments already exist in Core.</t>

</section>
</section>
<section anchor="setup-implementation"><name>Setup Stage Implementation</name>

<t><xref target="SETUP"/> describes preparation before the Core exchange. An implementation
should treat this as a separate module whose completion authorizes entry
into Core. Supporting the Core protocol does not by itself establish
interoperability with a particular Setup implementation. The functions,
local records, and additional checks below are implementation suggestions,
not additional standardized messages or endpoint definitions.</t>

<section anchor="setup-context"><name>Transfer Context and Asset Binding</name>

<t>A useful local model separates four identifiers:</t>

<ul>
  <li>    <t>TCID identifies the transfer context linking the transfer intent,
participants, assets, and gateways.</t>
</li>

  <li>    <t>Session ID identifies a particular Core execution associated with that
context.</t>
</li>

  <li>    <t>TAR ID references information held by an Artefacts Registry.</t>
</li>

  <li>    <t>DAR ID identifies an asset record managed by the represented network.</t>
</li>

</ul>

<t>These identifiers should have separate fields and validation rules. A TAR
reference does not replace the source network's DAR ownership and transfer
authorization checks. Similarly, assigning a DAR to a TC during Setup is
not itself the lock asserted in Core Stage 2. The ledger adapter should
expose these operations separately so tests can observe the distinction.</t>

<t>Section 2 of <xref target="SETUP"/> describes creating a context, propagating its ID to
the beneficiary application, preparing the destination network, binding
the gateways, and starting Core. Section 4 illustrates multiple sessions
associated with one context. This example does not define a session
recovery protocol. An implementation should preserve the association for
diagnosis without treating a new Session ID as permission to repeat an
irreversible asset operation. Core recovery limitations remain those of
the selected revision of <xref target="SATcore"/>.</t>

</section>
<section anchor="setup-interface"><name>A Minimal Setup Interface</name>

<t>The following names describe a possible experimental interface. They do
not assign RPC methods, HTTP routes, message schemas, or error codes.
Some operations belong to applications or network adapters rather than
to a gateway service; a test driver can coordinate them without changing
the responsibilities described in <xref target="SETUP"/>.</t>

<table>
  <thead>
    <tr>
      <th align="left">Suggested operation</th>

      <th align="left">Local responsibility</th>

</tr>

</thead>

  <tbody>
    <tr>
      <td align="left">CreateTC</td>

      <td align="left">Record transfer intent and return a TCID.</td>

</tr>

    <tr>
      <td align="left">BindAssets</td>

      <td align="left">Associate authorized source DARs with that TCID.</td>

</tr>

    <tr>
      <td align="left">PrepareReceive</td>

      <td align="left">Record the beneficiary and destination preparation.</td>

</tr>

    <tr>
      <td align="left">BindGateways</td>

      <td align="left">Authenticate and record the gateway pair for the TC.</td>

</tr>

    <tr>
      <td align="left">BeginTransfer</td>

      <td align="left">Check all prerequisites and associate a Core session.</td>

</tr>

    <tr>
      <td align="left">QueryStatus</td>

      <td align="left">Return observed Setup and Core progress with evidence.</td>

</tr>

</tbody>

</table>

<t>A concrete experimental profile should specify who can invoke each
operation, what constitutes successful completion, how duplicates are
identified, and which actor can cancel an incomplete Setup. It should
also specify how concurrent updates are serialized. For example, a
transactional compare-and-set on the local context record can prevent two
successful BeginTransfer calls from allocating competing active sessions.
This local mechanism is not a new Core concurrency requirement.</t>

</section>
<section anchor="setup-entry"><name>Checking Entry into Core</name>

<t>Section 3 of <xref target="SETUP"/> gives five prerequisites: an unambiguous context
held by the originator application; source-network awareness of the
assets and TC; a gateway pair bound to that TC; beneficiary awareness of
the incoming assets; and destination-network preparation for that
beneficiary and TC.</t>

<t>The proposed implementation should turn each prerequisite into a separate
check with an identifiable source of evidence. BeginTransfer should
evaluate a consistent snapshot of the evidence, authenticated participant
identities, asset set, and context expiry. It should record which check
prevented entry, without exposing sensitive beneficiary information.
An application acknowledgment alone should not be mistaken for a
network's completed preparation.</t>

<t>The following is a synthetic local diagnostic record. Its field names and
values are not a standardized Transfer Context or a SATP wire payload.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "contextHandle": "example-tc-42",
  "coreSessionHandle": null,
  "sourceDarHandle": "example-source-asset-42",
  "tarVersion": 3,
  "entryChecks": {
    "originatorContext": true,
    "sourcePrepared": true,
    "gatewaysBound": true,
    "beneficiaryAware": true,
    "destinationPrepared": false
  },
  "eligibleToStart": false
}
]]></sourcecode></figure>

</section>
<section anchor="setup-tests"><name>Consistency, Expiry, and Setup Tests</name>

<t>As an experimental protection against time-of-check/time-of-use changes,
the local context should retain the registry identity, TAR ID, selected
version, content digest, and applicable policy version. Before entering
Core, the implementation can check that both gateways accepted the same
snapshot. A changed snapshot should trigger explicit reconsideration of
Setup rather than silently changing the meaning of an active transfer.
This proposal does not define a new on-wire negotiation field.</t>

<t>An expiry policy should distinguish abandoned preparation from an active
Core transfer. An elapsed timer or lost response does not demonstrate
that a remote asset operation failed. In particular, a Setup expiry
should not automatically unlock or recreate assets after commitment has
begun. The implementation should retain the relevant evidence and use
only procedures justified by the Core revision and ledger semantics.</t>

<t>Tests should omit each entry prerequisite separately, substitute a
gateway or beneficiary, submit concurrent contexts for the same DAR,
repeat BeginTransfer, change a TAR after binding, and restart a gateway
between preparation and entry. The expected outcomes should include both
the application-visible decision and the observed network state. These
tests are proposed coverage; no successful execution is claimed here.</t>

</section>
</section>
<section anchor="registry-integration"><name>Artefacts Registry Integration</name>

<t>The API3 registry in <xref target="REGISTRY"/> provides information used during
preparation. It should be implemented behind a distinct adapter so that
registry access, Setup orchestration, and Core state transitions can be
tested independently. A registry's availability and trust assumptions
should be explicit in the selected experimental profile.</t>

<section anchor="registry-security"><name>Transport, Authentication, and Trust</name>

<t><xref target="REGISTRY"/> specifies JSON API calls over HTTPS, supports GET and POST,
describes JWS signatures <xref target="RFC7515"/>, and identifies ES256 and JSON
Canonicalization Scheme (JCS) <xref target="RFC8785"/> support. It also describes
JWT/OAuth-based client authentication. These are properties of the
Registry draft: a possible gRPC mapping for Core does not replace API3's
specified HTTP mapping.</t>

<t>A test deployment can select TLS 1.3 and a small, preconfigured set of
registry identities and client credentials. This choice simplifies
reproducibility without redefining the Registry draft's transport
baseline. Certificate validation, accepted signing keys, token issuer
and audience, operation authorization, and trust in the returned artefact
should be evaluated separately. A valid registry certificate authenticates
an endpoint; it does not independently prove asset ownership or the
truth of a registered statement.</t>

<t>For reproducible signature checks, the test profile should record the
protected headers, exact signed content, canonicalization boundary,
signature representation, and key selection rules. Sorting JSON object
keys with a language's default serializer is not a substitute for JCS.
Tests should verify signatures across implementations using fixed
inputs and public test keys, including Unicode, numeric, and escaping
cases. Request authentication and response authenticity should both have
documented checks; an omitted response-signing detail should be recorded
as an unresolved mapping question rather than silently invented.</t>

</section>
<section anchor="registry-versioning"><name>Records, Versions, and Caches</name>

<t>The Registry draft describes append-only history: update registers a new
version, and the operation named deletion archives a TAR. A test registry
should retain earlier versions and record archive events rather than
physically erasing the history used to explain a transfer.</t>

<t>A minimal deployment can begin with a pre-populated, read-only registry
and then add create, version append, and archive operations. This sequence
allows Setup tests to proceed before a complete registry implementation
exists. The report should identify the supported subset. For asynchronous
creation, the adapter should distinguish a temporary receipt from the
resolved TAR identifier and should avoid starting a dependent transfer
on an unresolved receipt.</t>

<t>The suggested snapshot protection in <xref target="setup-tests"/> should also govern
caching. A useful local cache key contains registry identity, TAR ID, and
version; stored digests and provenance allow a caller to verify that the
selected record has not changed. Fetching "latest" repeatedly during an
active transfer risks mixing decisions based on different records.
Archive, revocation, and policy-change handling should be explicit; a
pinned historic snapshot is an audit reference, not a reason to ignore a
new authorization decision.</t>

<t>The Setup diagram's registration of a TC does not define a complete TC
storage API or make a TC equivalent to a TAR. Implementations should
identify where contexts are persisted and how they reference TARs. If an
experimental deployment stores both in one database, their data models,
access rules, and version histories should remain distinguishable.</t>

</section>
<section anchor="registry-tests"><name>Errors and Registry Tests</name>

<t>Several Registry error definitions remain unfinished in revision -01.
An adapter can use local outcomes such as not-found, unauthorized,
unsupported-version, invalid-signature, archived, conflict, and
temporarily-unavailable, provided the test profile identifies them as
local classifications rather than registered protocol error codes.
Retries should follow the operation's defined duplicate-handling rules;
loss of a create response does not establish that creation did not occur.</t>

<t>Registry tests should cover rejected credentials, unauthorized version
append, incorrect registry identity, modified content, mismatched
digest, stale cache entries, changes between Setup and Core entry,
repeated create/update, receipt resolution, and historical lookup after
archive. Tests should observe persisted versions as well as returned
responses. Draft examples should undergo syntax and semantic review
before becoming expected-output fixtures: a displayed update response
is not evidence of a passing version-transition test.</t>

</section>
</section>
<section anchor="test-method"><name>Interoperability Profiles and Test Method</name>

<section anchor="assessments"><name>Three Separate Assessments</name>

<t>An experiment should distinguish the following assessments. Passing one
does not establish the others.</t>

<table>
  <thead>
    <tr>
      <th align="left">Assessment</th>

      <th align="left">Question</th>

</tr>

</thead>

  <tbody>
    <tr>
      <td align="left">Specification conformance</td>

      <td align="left">Does the observed behavior satisfy an identified requirement in the selected revision?</td>

</tr>

    <tr>
      <td align="left">Counterpart interoperability</td>

      <td align="left">Can independently developed peers complete the agreed exchange and reject invalid input appropriately?</td>

</tr>

    <tr>
      <td align="left">Extension experiment</td>

      <td align="left">Does a separately documented experimental mapping behave as intended?</td>

</tr>

</tbody>

</table>

<t>The profile should identify its scope without claiming an IETF
certification. A Hermes compatibility profile can be useful even if its
mapping differs from the -17 HTTP baseline, provided that distinction
is reported. Conversely, an unsupported extension is not evidence that
the counterpart fails Core conformance.</t>

<t>Profile names and test configurations are local artifacts, not
standardized capability advertisements. Select profiles out of band
for the initial experiment. An automatic negotiation
mechanism would need its own specification and downgrade analysis.</t>

</section>
<section anchor="case-structure"><name>Test Case Structure and Observations</name>

<t>A reusable case should contain a stable identifier, assessment type,
source requirement or experimental rule, preconditions, stimulus,
expected peer decision, expected backend effects, observation points,
and permitted timing assumptions. It should also identify the peer
roles and the fixture version. An expected result should come from the
specification or explicitly stated experiment, not solely from a trace
captured from the counterpart.</t>

<t>For a complete transfer, observe both gateways and both networks. For a
rejection, observe that the forbidden operation did not occur. For an
uncertain outcome, preserve enough evidence to distinguish a lost
response from a backend operation that was never executed. Time-bounded
observations should record their bound rather than imply a universal
liveness guarantee.</t>

<t>Record PASS or FAIL only when the expected result and observations are
sufficient. Use UNSUPPORTED for an absent feature, INCONCLUSIVE when
evidence or the specification does not support a decision, and NOT-RUN
for a planned case. These are local report statuses, not protocol errors.
A report should state its coverage denominator and excluded cases;
one aggregate pass percentage is insufficient to describe interoperability.</t>

</section>
<section anchor="minimum-coverage"><name>Minimum Coverage</name>

<t>The following groups provide an initial test inventory. They are
recommended coverage, not additional SATP conformance requirements.</t>

<table>
  <thead>
    <tr>
      <th align="left">Group</th>

      <th align="left">Representative cases</th>

</tr>

</thead>

  <tbody>
    <tr>
      <td align="left">Schema and encoding</td>

      <td align="left">Missing or malformed fields, unsupported versions, numeric and Unicode boundaries.</td>

</tr>

    <tr>
      <td align="left">Protection</td>

      <td align="left">Wrong signing key, altered content, bad claim proof, incorrect hash input.</td>

</tr>

    <tr>
      <td align="left">Core decisions</td>

      <td align="left">Successful flow, invalid ordering, wrong session, protocol error, application abort.</td>

</tr>

    <tr>
      <td align="left">Network effects</td>

      <td align="left">Repeated lock, repeated creation or assignment, backend rejection, conflicting transfers.</td>

</tr>

    <tr>
      <td align="left">Delivery and restart</td>

      <td align="left">Lost response, duplicate input, disconnect, crash around an irreversible action.</td>

</tr>

    <tr>
      <td align="left">Setup and Registry</td>

      <td align="left">Missing prerequisite, mismatched context, changed TAR version, unauthorized update.</td>

</tr>

</tbody>

</table>

<t>Each delivery failure should be injected at a named boundary: before
receipt, after validation, after backend execution, or after persistence
but before response delivery. Random fault injection can supplement
these cases after deterministic tests provide a reproducible baseline.</t>

<t>Transport failure tests should include authentication errors, wrong
protocol mapping, deadline expiry, inconsistent HTTP error status, and
malformed signed errors. A transport success response alone is not
evidence of an accepted SATP message or a completed transfer.</t>

</section>
<section anchor="both-roles"><name>Both Roles and Independent Oracles</name>

<t>The initial matrix should include independent-peer sender to Hermes
receiver, and Hermes sender to independent-peer receiver. Two instances
of the new peer are useful for development but should be reported as
same-implementation tests. Optional module results should name the
actual counterpart; self-tests should not become cross-implementation
claims when Hermes does not support the module.</t>

<t>The harness should compare observed results with a small independently
defined transition model and direct network observations. Sharing wire
schemas and public fixtures can improve compatibility. Sharing the
counterpart's state engine or treating every counterpart response as
the expected answer would reduce the value of an independent test.</t>

<t>Failure triage should distinguish a specification ambiguity, a
counterpart mismatch, a new-peer defect, a transport mismatch, and an
unsupported feature. Evidence for a specification issue should include
the relevant revision and section, a minimal input, the competing
interpretations, the observed effect, and a proposed clarification.
Avoid assigning implementation blame before identifying the source of
the expected behavior.</t>

</section>
</section>
<section anchor="open-source"><name>Open Source Implementation and Development Sequence</name>

<section anchor="implementation-status"><name>Initial Counterpart and Implementation Status</name>

<t><xref target="HERMES"/> is a public implementation selected as an initial
interoperability counterpart. This guide does not claim that a survey
has established it to be the only SATP implementation, or that a
particular release implements every requirement of the baseline.
The referenced snapshot is evidence for the compatibility investigation,
not a validated compatibility declaration.</t>

<t>The independent peer described here is a proposed implementation.
This revision assigns no repository or release to it, and reports no
completed protocol or interoperability test run. The procedures in
this guide describe how to conduct and report future experiments.</t>

</section>
<section anchor="development-environment"><name>Language and Development Environment</name>

<t>Go is a practical initial target for the proposed peer: explicit data
types, the standard HTTP and cryptographic libraries, a small executable,
and built-in testing support suit a controlled gateway and test driver.
Connect-Go <xref target="CONNECT"/> provides a way to exercise native gRPC and
gRPC-Web while retaining an explicit choice of mapping. This is an
engineering choice for the experiment, not a language requirement for
SATP. Framework version and default protocol selection should be pinned.</t>

<t>A minimal repository can separate the Core engine, codecs, transports,
network adapters, journal, Setup and Registry modules, fixtures, and
command-line test driver. Protobuf generation can use protoc or Buf with fixed
generator versions. The initial deployment can run on Linux or WSL2 and
use Docker Compose to start the counterpart and mock networks. It need
not introduce Kubernetes, multiple production ledgers, or a large
workflow framework.</t>

<t>Python is also a reasonable option when the team is substantially more
experienced with it, particularly for scenario modeling. Choosing a
native gRPC library is not sufficient to establish compatibility with a
gRPC-Web counterpart. The same signed-message feasibility check and
role matrix should precede a larger Python implementation.</t>

</section>
<section anchor="development-gates"><name>Incremental Development Gates</name>

<ol>
  <li>    <t>Capture the baseline and counterpart contract: specification
revisions, commit, schemas, paths, credentials, protected content,
and expected message semantics.</t>
</li>

  <li>    <t>Exchange one protected message and response across languages.
Compare signed bytes and verify signatures and hashes. Include a
negative case before expanding the protocol implementation.</t>
</li>

  <li>    <t>Implement the Core engine and mock networks. Exercise success,
rejection, and irreversible-operation boundaries without depending
on a remote gateway.</t>
</li>

  <li>    <t>Run both roles against the counterpart, keeping HTTP conformance
and Hermes compatibility results separate.</t>
</li>

  <li>    <t>Add Setup entry checks and a pre-populated Registry; then add
registry version, signature, and archive scenarios.</t>
</li>

</ol>

<t>Each gate should produce reviewable fixtures, traces, and a coverage
report. Tests that depend on unresolved choices can remain INCONCLUSIVE
while unaffected cases proceed. A complete production gateway is not a
prerequisite for providing useful feedback to the working group.</t>

</section>
<section anchor="reproducibility"><name>Reproducibility and Revision Tracking</name>

<t>Publish implementation commits, build instructions, fixture versions,
container digests when used, public test credentials, and the manifest
needed to repeat an experiment. Live private credentials and production
data do not belong in that package. A counterpart update should trigger
a documented comparison of schemas, protected bytes, and required
behavior rather than an unreviewed change to expected outputs.</t>

<t>The guide should track every substantive source change to affected
implementation modules and tests. Changes to extensions should not
silently change the Core baseline. An issue log can connect each open
question to its provisional profile setting and eventual resolution.</t>

</section>
</section>
<section anchor="security"><name>Security Considerations</name>

<t>The security considerations of the selected specifications continue to
apply. A test environment should make its trust assumptions explicit;
limited scope is not a reason to accept unauthenticated or tampered
messages in a test that claims to validate protection.</t>

<section anchor="security-identities"><name>Identity, Keys, and Representation</name>

<t>Authenticate gateway and registry endpoints, then separately establish
the authorized message signer and the meaning of supplied evidence.
Keep transport authentication, message authentication, asset
authorization, and ledger proof verification as distinct checks. An
attacker-controlled key in a syntactically valid JWS should not become
a trust anchor merely because it verifies that same JWS.</t>

<t>Fixtures should identify accepted algorithms and key purposes. Tests
should reject algorithm substitution, mismatched identities, corrupted
signatures, and incorrect encoding. Serializing and verifying structured
content across languages needs an agreed byte contract, particularly
when a transport adapter changes the representation.</t>

</section>
<section anchor="security-state"><name>State, Replay, and Irreversible Actions</name>

<t>Bind accepted inputs to the expected session, context, role, and state
using fields and checks supported by the selected mapping. Duplicate
detection should precede repeated backend effects. A persistent
operation association helps diagnose whether a response was lost after
an action, but does not authorize an undefined recovery exchange.</t>

<t>Expiry, connection loss, and application abort should not be treated as
proof that an irreversible operation did not happen. Cleanup should be
justified by asset state and the selected protocol's abort semantics.
Unknown outcomes should retain evidence and avoid actions that could
make value available to both parties.</t>

<t>Setup should authenticate the participants and gateway pair associated
with an asset set. A context substitution or change to a referenced
TAR should be visible before Core entry. Both gateways should
validate the context and artefact snapshot used for that entry.</t>

</section>
<section anchor="security-exposure"><name>Exposure and Availability</name>

<t>Treat configured gateway and registry endpoints, artefact content,
and asset-operation arguments as untrusted input. The controlled
experiment can use explicit endpoint and operation allowlists. Limit
decoding depth, message and claim size, signature work, pending
contexts, and request duration. Registry lookup should not enable
unrestricted network access or arbitrary code execution.</t>

<t>A valid TLS connection or Registry response does not prove that an
asset exists, belongs to the requester, or has the asserted finality.
Those checks belong to the relevant network and evidence model.
Availability or replication of a registry also does not remove the
need to establish trust in the artefacts it serves.</t>

</section>
</section>
<section anchor="privacy"><name>Privacy Considerations</name>

<t>Tests should use synthetic identities and asset data. Logs should record
identifiers and evidence sufficient for diagnosis while minimizing
sensitive payloads. Published traces should omit tokens, private keys,
personal data, and restricted artefact content. An append-only history
requires particular care because later archive does not erase earlier
data.</t>

<t>The PII scenario in revision -02 should be treated as an application
and policy integration example. This guide does not add a mandatory
<tt>compliancePayload</tt>, a universal Travel Rule schema, or a regulatory
compliance claim to Core. If a deployment uses JWE <xref target="RFC7516"/>, it should
identify recipients, key handling, protected content, and authorization
independently of the Core transfer exchange. Encryption alone does not
establish permission to disclose or retain data.</t>

<t>Registry access and failure diagnostics should disclose only the
artefact information authorized for the caller. A valid signature
does not by itself grant permission to retrieve sensitive metadata.</t>

</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>This document requests no IANA action. Example profile names, local
operation names, manifest fields, and report statuses are not registered
SATP identifiers or protocol code points.</t>

</section>


  </middle>

  <back>




    <references title='Informative References' anchor="sec-informative-references">

<reference anchor="SATcore" target="https://datatracker.ietf.org/doc/html/draft-ietf-satp-core-17">
  <front>
    <title>Secure Asset Transfer Protocol (SATP) Core</title>
    <author initials="M." surname="Hargreaves">
      <organization></organization>
    </author>
    <author initials="T." surname="Hardjono">
      <organization></organization>
    </author>
    <author initials="R." surname="Belchior">
      <organization></organization>
    </author>
    <author initials="V." surname="Ramakrishna">
      <organization></organization>
    </author>
    <author initials="A." surname="Chiriac">
      <organization></organization>
    </author>
    <date year="2026" month="September" day="25"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-satp-core-17"/>
</reference>
<reference anchor="SATarch" target="https://datatracker.ietf.org/doc/html/draft-ietf-satp-architecture-10">
  <front>
    <title>Secure Asset Transfer (SAT) Interoperability Architecture</title>
    <author initials="T." surname="Hardjono">
      <organization></organization>
    </author>
    <author initials="M." surname="Hargreaves">
      <organization></organization>
    </author>
    <author initials="N." surname="Smith">
      <organization></organization>
    </author>
    <author initials="V." surname="Ramakrishna">
      <organization></organization>
    </author>
    <date year="2026" month="September" day="15"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-satp-architecture-10"/>
</reference>
<reference anchor="SETUP" target="https://datatracker.ietf.org/doc/html/draft-avrilionis-satp-setup-stage-05">
  <front>
    <title>SATP Setup Stage</title>
    <author initials="D." surname="Avrilionis">
      <organization></organization>
    </author>
    <author initials="T." surname="Hardjono">
      <organization></organization>
    </author>
    <date year="2026" month="September" day="23"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-avrilionis-satp-setup-stage-05"/>
</reference>
<reference anchor="REGISTRY" target="https://datatracker.ietf.org/doc/html/draft-avrilionis-satp-artefacts-registry-01">
  <front>
    <title>Artefacts Registry</title>
    <author initials="D." surname="Avrilionis">
      <organization></organization>
    </author>
    <author initials="T." surname="Hardjono">
      <organization></organization>
    </author>
    <date year="2026" month="September" day="23"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-avrilionis-satp-artefacts-registry-01"/>
</reference>
<reference anchor="TRANSPORT-DISCUSSION" target="https://mailarchive.ietf.org/arch/msg/sat/qY1ulLiPlwXrdana51YBTW3irv4/">
  <front>
    <title>Question about citing non-IETF specifications (action items from Interim WG meeting)</title>
    <author initials="T." surname="Hardjono">
      <organization></organization>
    </author>
    <date year="2026" month="October" day="19"/>
  </front>
</reference>
<reference anchor="HERMES" target="https://github.com/hyperledger-cacti/cacti/tree/768916ca4b0819bb8febaeb1806339f9f1b38124/packages/cactus-plugin-satp-hermes">
  <front>
    <title>Hyperledger Cacti SATP Hermes source code</title>
    <author >
      <organization>Hyperledger Cacti contributors</organization>
    </author>
    <date year="2026" month="October" day="28"/>
  </front>
</reference>
<reference anchor="CONNECT" target="https://connectrpc.com/docs/go/grpc-compatibility/">
  <front>
    <title>Connect for Go - gRPC compatibility</title>
    <author >
      <organization>The Connect Authors</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="PROTO-SERIALIZATION" target="https://protobuf.dev/programming-guides/serialization-not-canonical/">
  <front>
    <title>Proto Serialization Is Not Canonical</title>
    <author >
      <organization>Protocol Buffers Authors</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="GRPC-RETRY" target="https://grpc.io/docs/guides/retry/">
  <front>
    <title>gRPC Retry</title>
    <author >
      <organization>The gRPC Authors</organization>
    </author>
    <date year="n.d."/>
  </front>
</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="RFC7516">
  <front>
    <title>JSON Web Encryption (JWE)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="J. Hildebrand" initials="J." surname="Hildebrand"/>
    <date month="May" year="2015"/>
    <abstract>
      <t>JSON Web Encryption (JWE) represents encrypted content 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 IANA registries defined by that specification. Related digital signature and Message Authentication Code (MAC) capabilities are described in the separate JSON Web Signature (JWS) specification.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7516"/>
  <seriesInfo name="DOI" value="10.17487/RFC7516"/>
</reference>

<reference anchor="RFC7518">
  <front>
    <title>JSON Web Algorithms (JWA)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <date month="May" year="2015"/>
    <abstract>
      <t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications. It defines several IANA registries for these identifiers.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7518"/>
  <seriesInfo name="DOI" value="10.17487/RFC7518"/>
</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="RFC8446">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="August" year="2018"/>
    <abstract>
      <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8446"/>
  <seriesInfo name="DOI" value="10.17487/RFC8446"/>
</reference>

<reference anchor="RFC8785">
  <front>
    <title>JSON Canonicalization Scheme (JCS)</title>
    <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
    <author fullname="B. Jordan" initials="B." surname="Jordan"/>
    <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
    <date month="June" year="2020"/>
    <abstract>
      <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
      <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8785"/>
  <seriesInfo name="DOI" value="10.17487/RFC8785"/>
</reference>

<reference anchor="RFC9457">
  <front>
    <title>Problem Details for HTTP APIs</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <author fullname="E. Wilde" initials="E." surname="Wilde"/>
    <author fullname="S. Dalal" initials="S." surname="Dalal"/>
    <date month="July" year="2023"/>
    <abstract>
      <t>This document defines a "problem detail" to carry machine-readable details of errors in HTTP response content to avoid the need to define new error response formats for HTTP APIs.</t>
      <t>This document obsoletes RFC 7807.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9457"/>
  <seriesInfo name="DOI" value="10.17487/RFC9457"/>
</reference>




    </references>





<section anchor="outstanding-work"><name>Items for Subsequent Revisions</name>

<t>This section is editorial material and can be removed before publication
as an RFC.</t>

<t>The following items remain open rather than being completed by this
revision:</t>

<ul>
  <li>    <t>Reconcile this guide with the next published Core transport treatment
and any resulting standard bindings.</t>
</li>

  <li>    <t>Resolve the Core naming, serialization, hash, and abort questions in
      <xref target="core-clarifications" />
 through the working group.</t>
</li>

  <li>    <t>Publish the independent implementation and complete protected-message
fixtures after the cross-language feasibility check.</t>
</li>

  <li>    <t>Add observed both-role results, including counterpart feature limits
and unresolved failures.</t>
</li>

  <li>    <t>Clarify Setup wire contracts, authenticated binding and expiry, and
Registry routes, error mappings, and version selection with the
respective draft authors.</t>
</li>

  <li>    <t>Consider Views and Data Sharing guidance in a later revision.</t>
</li>

  <li>    <t>Add real-network evidence adapters only with explicit finality and
authorization assumptions and separately reported results.</t>
</li>

</ul>

</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>The authors thank the SATP working group and implementation contributors
for discussions that motivate independent implementations and
reproducible interoperability testing.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA8196XcTWZbn9/dXxDHnNJlTkrxhMCahyhgn6SwS3Lap7Jqe
rjkh6UmKJBShisXGTfO/z13fEiEZJ0XVGT6AkGJ5y313/d17h8OheZBc/Hjy
H7+8Sa73k7psq4l9lhRpk11b/KZJx7mtB0me1U2dpMU0yYo8K2wyKac2Sa/L
bApPmNpVZSdpY6cJPsnmdmkLuD4rkmZhkw9VupyWN8Wwmk2Ssm1WbTOCu162
WT5N6na8zOo6Kwu6F19R2WV5Hdw2t4Wt6On06vOz+ghuj546HMJgp1U6a4Z1
WcyHddqshtlyxSOB6ZTwmDab2uHO/mg5Tf4HHpAkNTxyeJo8rLd/+D9/xGf/
538e1at0Yo/+67/+829//K//9X/++GJ7e/4weXHvZ39c5qZuYBb/N83Lwh4l
t7Y2q+zIJElTTvi/9BHWrFkcJY/gf3VZNZWd1fprfbv0/zVN1uTwnEs7aSub
HNe1bZKrKi3qma2S86qEZ5V58t3l8dX598lZNKzkNQ7LpONxZa/hEXDJ+ium
5aRIl/CWe00zh72oG4MbPi+r2yPY51lpslV1lDRVWzd7OztPd/ZMWtn0KDle
rfJsQrczAV3YNB9eZUtrbsrqw7wq29WXZmem8KqjZC95W14nezt7jw3MZt98
sLfwiCms7TB5DVfcpLf48VU2z5o0T1J6WGEbfA/+wE9v5On4zVnR2KpcAXWN
szxrbhOcWFbMzQRGa4u6hU2YpXltjbm2RWtxG2XEW3cPeQt3+XYFo97Cj8s0
y+EjrOmfMtvMRmU1x6/TagI0sLVomlV9tL2NV+FXcPhGetk2frE9rsqb2m7D
/dt4H0xw0Y7hzrRIbxa/bd9n2/A+3rngjXz/iJ83ysp7PeleF40WzRJWwaRt
sygr3CN4fwKkAkv60yi5hJvpi1mb50x7P92WvwHHcL/A5NMi+296JlJI2ebJ
W/ofbO77Irse0WWW13bWFn+qi3aUTkYfKvphUrZFg+R5CTxnkfy5BHqMhvHX
4etR8lN/IH/Fib22beF/jMfyKrW/WTg8vUHcwvVzuHG0gA9/muOXo0m5vN9w
YDA/2/5oXrcfLrMPwU/xWK6ujsMR/Davgfz/1DQpEM+9V+IK1iGtpr+VRdl5
+9WiXKZ1/Gs8gF/OrsIBLOTKPy2zZmSnbTyA95fHxiC7qJYkY/BAAVuawIiO
6Mrfxe1O4Da6yxEZ/BnylH6hKc1hptfEVN0P3bnK1xej5KXN4eyVVfj1X0bJ
RbpMP1RZvSjS8JfjUXKyyKosndC3wqKAOQ13ng73DujL2laZrXG+PLaEOQ7w
pOErPEPKcPGw81HClRjuPuG1gPFbuEYPK7wiBe41+WArzx6AdW/jUdve/CRY
LGI0X15gXNfv+1zxGHlSYydNu3m9Nyzrxm14CzwASGTxhcWOl3X3a5c1DWYw
3N35Bsvbf+Ll6dX783iRUeBe2qZdJZdNOt+4dq9GyfF1BWtdFtmdtNohsv3f
tRqpewXPoMaBDWsc2HDn4KuX5IuPvTh9fXZ5dfHXaGmOq8bO0gkoiRd2Dspl
dfv/1+KkOr5hJeMb7ux+szXa9PSri+O3l+fvLq6Gr84uT95fXp69exst29a/
t6ihgOxJx8DLk0mG6kpSgNQ9O736MalXdpLNnL71HbwDLwZCXdbJrCqXPP1s
mfz6Ollai3d/v3XfMx2s8O7OcPfp2vXYrMQs6zlpMH//626bv8nO85v/qKag
gRzs/vXl1a/7WXX9aBse+dPpxS+nl9G0fwJNqsrtdA486gTnxEfrJ1stbS1m
C5kka2YCr1/3ANDwmiobt01Z1Wsmt3e4dnKiKIFM3174Rw4n+Mht/htUebv9
5PHh093Hk/TReOdw9+l4fDiz49SOdw93Hu/vP509ne2O9w939x5tg7XxAU5K
TTe39XCVt/OsYCpZ0PRgHCfv3r49PbmKluSkLArgPgmI0uR1CfOcX5yfwKyW
K9h75tubFuMKbDK9/Zh+rtdOdsLXVKsJTRhout6el9tz+GIYvQh37fzi3dW7
4eXpxdnxm7P/fXzVpVyS3cAMQWDmojskZzVo9A1sCNAv0Gy+acBO7r9sZyCm
6jtHvcKLx+1sNLXX+J852IlLIHNWS+vtOhzCsCgb2D15P87jNSzj8OK0y69o
dS/sej7lVpWuumtwuHakZtNa8oAqfCq+GgzxJwe7B0f6wX31WL967L461K8O
+avDvYOnR/pBvnr0iG/ED/LVk0N+PH7gr54+OnhypB+MGQ6HwFpqZGiNMVeL
rE5grC0q9wks5jWOmNhNoSpcEmv/Cc4qLeA8ImWi+c+qhrlblxslZ00Cz57A
mYQ3pEm9TPN8AHwIDGULf+H7LVhtnbexvwBGNm0n2Ti3ZMHV9G57neZtSvxx
pS8b20V6DSoe3gd6aKzn0BgqS0YS6ZZ438TWNT6CiBclOb5xjfSCS1dlDbbi
ILlZZDCQaUamZAu6DA2hHefw0eJw/95mlbhIiCfbjyvkyTipvDvByaLMYAwj
pi+256fTCkYFgyRbdlVWDRiYqxW8Bt4OLKMGjkJztsT+B2wKo0xubFKO4QRc
08MHZgbMGvXABcwqh/sHuqDwTBx1OYtFSpIuxxmMoslwSLhlJdFDY6Z2hs6Z
FAzuG7feg2Ri4UGzW3hsh04GcGqSSZ6CKEJektvG9nckWJl6xMS5zKbTHOzx
ByjJaNtpXJ8eZMF/h0Czn40hITEpy2qaFbSpaeQBqIEcmhtrgWbZe1ATKVmw
/Gny0wy5DfzHRK4EmPinT6JTf/6c1C16OHAzYIMCrRCMVJQx9mNDxEa3oE4O
t/Ba8R1EZ/bjBHZgbmFJA3qPF6xOFjZfGaRvoDAL9/Lx6oh8OaSJLcp2voBX
NbDFdB78dIAz2hyXuUayBt18snCSAyhXD8lIGABRHc0TqAJHncIIYCGSG5CG
3eMPakkxTVHpGiipwTMN0x6tfEYDHaw/ukk9sQXcXhJ5oQsRLoelZEaagAYo
rIG4AY8F+DesoK0mWQ2DL2FMNbEpIN40AUKCN+Nu6LYn6TwF9QZ2FegWV7FL
mFkxydspUsCdegcYMC0sXGpoJDwIYAFWzkjZ1vFRx9VCnY13iHgKbB9ROzs1
zCRdMeEjOSHpT9DpSdNYeVIXYtXdqex1Ru7TGfBpZAplcNT0LUDVq5Tf47gs
+nKRLNFsAaJk525j51XqblM9FdXoa2RD6NL99Ek1+s+fiS3V5EBseZZAOkAr
/Db4MIH51bLVMk4YNChdmfC0rOL1xp8M7IZ1LAV42gdkKPCoJpu0oFQKBwZa
Vrbb2TuzhDel8PRbong8W2A9FAEbSWrYgxxmiicMGVP/CBkcbd0C7SL9NY60
kAN9+tTxddEEYfWyHKbQVMRl8JF5OUeNghcADtc1zGyajPF9QMPsISOWDiwl
Sb2PdCi7OxRmk8DBmXyo9fSFBG0i1jHg0xhuNM9jpbzc7SEswU3h9ihHSvph
BhQLTwPBDbrL8611s9yCDak+oMv9+dbO1gvzA3qIXoAiObGrpnVzBXKlQ7JB
Lfhhm24zP8CuwgrzB5opukufb9XX860EL3m+tc63SO8Y4UVwJ/yTfFzmRf2c
HJqgX93c3Ixu9snk2NvZ2dmmp8HaI3U939od7W0l47S2oHzMQEY/34KFuYUL
MnvzsvwI00p2kt2dvZ3k8f7OFizotFnAXfDFFjDfbL5onm/hL/BqUgu/YvJ8
n/kBD+GLq3jvB3q0aec6BODFGNCAY2WBhHGUwCKFRb67ULSCmo5DX33x3J2P
WLOoSHwcn5/tAy2XH9pVPfphm0YNk8dXwnLtHsDC3D7f2oNlncFIhrN0meW3
uHMFWLpw5GbyQ539N6z27tOtBO8dKpmxMIdr4Pg83xrnMFO54UaWe1zm060X
76oMrCJi67CE8IRgEIdP/kWDeEWxAd7QaCQVGlIwkkc8kP1DRzp7EeUc6Dtu
UEfYgp2tyg/WvZL/O9Rbt7aDRz95/O2f3d3Fx4/ut4D43q9awCAUhGGh3d5W
6kgOn95zK5/cYyQv0OMBjH875I0bqehfvQh7G0fyL1wEUPxAU3y+9Uuy93gn
efI4eQN/4Qd9CBh8X6Yp/WKa1ou0qlKcQ/KYSG1V5rdzmPCqBA0DuDW8ZgCv
2XsC/+zSP4e78YDX3fWE73pyQHfhP+vu0nU82JUd3f2GfOGF2q9D5byOL4cL
qsd2X/Zyd3/Pn9vD8Nwefv251QnuHtyTUvZ2v5Zme/KiR7VuMIePvyXZXh1f
1ES0JK/xoyhuGcj0NfQLHAQE+D4QMH7a82zxXhS8jujgOQN84u6jg8HuLvx7
QP9+mVrxRhgA3bh3cEA3wr9rbnSjh6Mvo8dP32L08Bwa/eFjHv3hk3uOHm/E
0eONOHq8ce3oHe/e32cCeHJPDtojALB6O7sP2scaIaEvevrkni96/MUXnZGV
CarV9sbX7e3elx9/+XVoDLd1n/MfPvkHlxAeXDX3WUT3qq9exHWvumMZ9YVf
v4zrXthZyECO7R7g+YGTRJ/2HsGnR492wk87O/806bZ7QGdnb3eHzg5oahtO
fudGGNcAxpU82ocH7MK/j+jfO1nGjk6UPtH0Dg53wk//vInCK5lJ7PBED3fv
OVEYF0304AlP9OBww0SVfPb3RMl/9E21osC86VHsk51/2Ss7BgQx/nVa/u6+
W6KvNyG+7dO7qvv+zj3NMDTXvkoZEaRX8nqz/bC/f18l5F46H4cCrK026ur/
wllvNhj+6bOOzYS9p3tiJ8Cnf6ahgC9CE2Hv8An/SzLrHrYC3ohWAt5I/667
savA7j05vOcqHt5vFdlM2Ha+nXFWkPP3u7Gd4RLjOn+/YY33D/ZljeHTP6wM
4mLiE3ER9x8d8r8Hh/dbTLwRFxFvpH/X3dhdzP39+y7mvUjyOPZpOYfXd4Su
qZPd4f66lURTYP/pgRgFjw6f/MMribo9PhF1+0c7rNvDv/czCmAAfOOTJ3zj
k3X0HBkFPHr89C1Gj7o9PhF1exw96vb3Gj3eiKOnG2H0dOO60TuGjPbtLSo2
+99So6VonAucrFGkD/b+wdeusUU2vbQjvGmD1onXw68w9buy+5s+vCs1D/CB
34zzrfUjhGHU5O2vmyX4wcF9x3I/paumYM52IrE8ikZuFKT/+oXYLNT/pQsR
CB8wHA520RG4f0CffjfTcZr748eyqN+SBZByUlagSGOQTReS4AMMeds0p4Nd
ndPB7u+a0x1KS2+qB/eVeveZ6nkQ0YMZBwG9DYaLc3zufFNX3BuJaBJABjng
IlvVzyhQm2qgG4NQdtJyiAS+ssXEjtwAMRqH/0jArxf6S+tJlg1pBb4UAGw+
NlsvGNAZxIaSu/90AzjmD8N1f/6w9uYN15r/gd+6gY0k+Z/k3/Lm2XCYXJ0Q
VRZNAlf/27x5hr/17tiDb+lJWeymt3x1/8+Ga7/JjIJL/vaFFQ3//C28keZ4
frZ7nxv12vD+69/x4utvto/wx1uXMja/j6q460Z279jjO8zmHYt1fvdt/1p9
hrPB5HsczPPnMWYoeR6OpnvHnaMJ1Gb/7ZrRfEOq+lvyO6kqCSgLx3f0O24+
otF3bkYHzJFHtjATvc/Nfxh1/vgFWPtTdHPvz/WaT8GftTevX9v+bqy9mT+v
Cf13r1t/M0ZitjUOsx1EYb588z807Pv+uePmtKO633Hz7+E7+ueb8Z+eenwH
9+9pkO6sp6riMeTuLgmy5tpvMhcD3PJ5D6QyIi5/JJA+j1AiH/7IrD+XgbpD
yJRRpD9sOxDRNgOYXhgT6kv1CobASLYgDXWA32SVw3MyFBGvUh/NKs2qowAb
Zz+ucsQMujm58C+oFCkBe1FDEaBtGGMfEJqs6/sJxEBCOh+CCVGBEahNjL8p
xw283LikkQDBN76N4HjPaBaaU+KRdKizEdTNKLysKRVp1kWgviuCJ2SKFkM4
XWXTqQBzB2bcIl57lZe3jPtbwpPa2nqUqT4EsYwR/NTtcU0QRotZ3R8I74io
ZritXsEmZQ4IyeDBQOkciNKpuGGjkGenciavUoJa85MlDX1epauFqLDFFLRg
hPhaeJQ1qy/o2LXgHEMLw2PyKA3RYoIjrf9tgsoYDXE6zSRfVbcaIVgm0P5w
I/QUh6PAhW+Xy7QCDV1wgxERmzwd2xxWKxUgcFpgJhPsVFqH76UVYKRhiDIn
rK0BQ6bAJZ/QzYjlx7Vm1K7FN+qMYbcIPR1QHoEQYQMfPEguCfqGt77Jlpmi
lT89YGwk77HieDvAOEbNZQj4n2bk7XBcQ7HZsDZKtQgpLgQnLCcN5y538DGm
vJ4yB/vWpX4D1a5gsLIMdDdpSAoF1SEJdpiIQ6huYmFVgPLLHPftzMFHdeuz
4jrNs+kwK1Yto/AUUZ8VvzH6HpftxuaYj27qdoL5BLPWo5HxEJx7cK+XUoNk
kQEHSK8xn0pOXcKlEHLHUKZZTdhSOJB6GvDctTmDYHH6s7y8QRZXjTN4J3wp
pr/D+ioY28CrKTEXkzf+3sK8POofre22IRurCXaTjbHkl3LywXFTQ9Rkl/BY
wsPC5wkBf5FHwP1Cy7gDgwS5CFyPh8VxUjIn09zwOB8C9wCjjbIBMGOgKmuw
YW/rxi4TC5tdLrNJMm/h3MB8CKN7sgBuSVy2B/2uPUuEYWQgO/JZ+OIGn0Zv
gjU1iOgGLQfmvmzzJhsuyhVQQtswprhLyU07vWXcNEHS4egwrRgHNc6a6GiG
yCGfoRLSENB4u1zRDo1CKL6bhCRd0Cv1CShJlpiClwO9pIknOQP7M1wtcGTO
dmiJ1kn6T8PX+VcgWh2vg6XWkRtY1KUOHHNpWlg3+N8EDwxRY5LOGnTQ0+cV
7Bjh+2VawjSitJKXMCoq7oHTP7csJU9ojMhJxvKzMJMZnO/yBi9RUDmJmCUR
lkLRkdT1PslFwmQmzMcc0VNqOZ9FuxwjacDGEyaeL+SVriyyoqYUZuheh5Bp
qo3SxUTDdekU/63oPwkQ7hx+y+2s2Xpx2Y6RKfyw3SzW/KprID9v0yO23QPH
5fTWPXga34rSBS6drvlpQ1q4XM0vWfvMMOn7ns/u5ER/+R2k0t358Luzi7/8
hgCwdv+XrE3Pjd61rduxTVQAaicJeJfjACusWQWkwSQ/XV2dXxJ1/3z57q0j
TBZJ7yZNCSTIpU2QpbdcEIeSLdblBINKyvlmiOYXpQFZj6aDUTYaZl5ZyTCj
xER8O47DJYvh24FzBG/EA1xNURwzgzCg9xaib4EYyFEFvI1y2eCCCUtPzfeL
kl7KmQkXZUQFZ0jCcAKzz2CrA+VHzqAeZeDEwF2ylWRX0JArOb2aVUOsEBch
Taj+TlpNedaic8OJ/XUB6kTKmovfKtS0bE6pNgPP1JEhiKxvV1PKXQLtOZwa
am6kS8hqqsYA6yeLR5pnOsEMAVgqReAPTI0JkShlfHrhIOL7LgGLcleA7ZYo
BkHW3uqYxtY4E5zUQ9KGQfnivVqCop3f8vfL8hpHt8W1X7aS9xdvkANjBvA1
PkHr8lwRUy/zcg42xYOJ//WzJBplRMhnWrwDJcGgkwoqeS1vyhtbkQi8IWqq
KU+qNls8+i2n63eTOaeYoDJKLkIKAjW35PxL3gEyIiYw6zhr5xnJOtSYSU+w
H1N8dtLJKCrBCrk18KAlrC3qijNQqBu/qmh9lPm1nToLrJcfBDuRSoYvLhvq
PLi+VBYoUsdh9esshznATjRwcCSrysmWlCxTKZBDavO1FTLG94hxhLK2Vn0P
kybJ2y3K1gAVcufTdl+yHozkwKdnXlk9oig4w/RFzDikox1lRg7Q/5mx5Vyz
NDZhbsrrPf2VVWRaAElLg3VFis57icGg56mKmdiM1gn1ajwk3jYM1eJY1PNC
qAFCL6fjZ4vrrCoLfM8RSGVQrTsiOc9e/NC8OOskEh/1U1KTmwWm7zlVzCuu
oP+6pMkpc9QeXYSpyrDj5Ywuoco3tsIctoc1Z0EOlymISamhhsvlZx+kqwOb
KkCtBR2NCon5RFuvrhIt+bdyqOXFD9swYZ31Fa6QmHlHrB5VZNEQF3Wpq2S+
1AMxWmplRMCrxBis2WLCvR9jqQtMN4JBTxpxnkiudZS22DZAg7beMChxJcI2
aH4W8l+K58HqYfyHbDly64im2clFdoIFxiD2GG4OHDQauhctPETHdYOMak3F
Cz0lKPBhqjI+GklNWq43thJmgf2ZvWHTSgxOXnBJiL11Bm2qR+Vh7WnNiwKj
ziiXi+xN2Yd135nJy59tIICfy7YCRn0kSYns/SAZhWmlKpt0//ukPzC63+6V
IQR/EHoM7trzMzQgKM3z2uplR2Tp1WBbke5ws8gmzt6FlddJiYEYEb71dKZD
xT2KaTMcxXabv2CO4ioQKDTru6uT7wfJ1cnZK/i7hPvJ5SJ4j8p5zEEq4bqZ
766OL77neVOlueBqviL57hVcQTZzW6tFYV2qHmhEcdJtL582q6R4ALyUPA/0
LNHSNG2XFWF5KNxIGfExOws1eEyQjwOpobL+mU2ywAk2g8l0/HC9J6DHAY4t
CGm4/1jSsvtMn9yCTcTL/Z1Of0un5YpK76GCVs29L3YGDNEi8X+dzXWir9pg
dUXTvP1K2wuE0Jwtt3VGxl/QRYQq5ApVrAaJNkiEJxpAIp4GokdcjKMvGzgn
IEQm9Axf8GHDOF5ZqtrpFFFkvOiXqOEaZpr0nAX6TpWvF3QLF+28z3CunD4v
THDDWH5JVzDpPCPflfp8LZWvaFIsqSTvr6qSqxSkTkv3jP0e44k58obBnBJo
IfZ+CscdqsjpMd577Y3Pzv2NGXGCue+bCOUc+T25Xl2pgrouJ5k66TxX5qE6
jhzy/y+MKQyPgDrcAnvZOBquJKFJ9xOgiiZILXcBxJQ8TPchjkAb2USj5Ibu
Vn2pIyUjdpbxvog2Eg+ib6VfuYobdGBV8Wdf2orEXBGXHCCDmcqjwHZg5YHz
E+NZEmhvwN3Qn8uy9fj8TKRqnVzLsRfxylp5W5GiR4rgAA2RQko7UNEbMepR
3n+UiyS1Gx3/WeP4ArkNangYKhdcsJS8VWy9B3TCeBx4uIpGecIgMFdrjocZ
J70TrvtjkTFQFQaxBGDWXtxShQNSwYknOz5uNJwh5aPYlLn0XgoNn3TrPPAK
4tlH7wjvLdUChkVgX7BhBy3PXo60bmGFhU6K5E5thZ+JQghXXikRucvfW1Tr
tKxKGvjh4aoVEAbsyQ25DwrVXrAWSVtgfRt4LwyJ6g5pSIEqiOCkJlWKjmVy
hzrtxGGkxm1jJBaIA1Ieodsivlt2mL6VZT2WeZMvSW749EAKkckTQB7/KN4Y
ddX76M+AY0nx8mnpEjpMWYFcj8OXUlwNNucD+Snk/0CfvrhRbIZOyNaFD+xc
FjluJDAjng506ePbgMLIMmXzHnTkAgxg4HjVrdC4Mn0N5kwte5+14M6Eqi90
9GE4R+WMah2Aup/btEAG5nZU/PJ8vNApj9Wr1b0tVa7hmJJZQvVwXEkbMUod
L+e1UybNm8iK5KVlhxp+Vk2GdDmJEZtIidYAJuLgUBrmwOqQS0g804nlJPPe
F9galdssyNUOZZV6sOYo4GDIhCOS2yaqNEE9KFixc5x0zefUn3WhUXEF0JoB
hbLUJvajE6gsszJ3MDBohUGerO4EbX2swAUueHH1VLqjFFrVQplubryHodcF
HV+mLNACL8KY/kN3nJy2Qb4PVc0lZsgHAASjBVW2MTIIEH2TD2wzO0aoMpq4
H0qmwIocW+IQNQ6cyh+Nbzm4SBV/yIWDATrZjJDkLWirFKULTxTDNMzC5uTr
e70XOKyCMmPqmhBUh7ek5HDRoTPh+9gPCDvrqrGd+4pn6ASs7NBbphrK7QS+
eCgYUL9GMVB5DTPwlOgxpli5Gu5yxPGB7MhU2wwdgBTkLfx3J+TQEnscDSuT
FYHDfWePXS7evaZBeKrl02QNanjqo9YRGvQu3oySH1swXRyMALYbix6zhBRg
K4wvnyLtLFHMcOANdyMs7CWRLR/kfekikM7qlFUVWuwFtNyRd9F/LMkiEvPQ
eSV3d3C20at/kdHzAuHs63Y2yz5yISycNP2C5e1B7WpeAAs7wtDNEQrmZX2E
kY8jKsS8rOdUuhzUpuaF7FG3dBy/gVAEnj1GBxHrwBE10L0UMSs3+OYIh5js
urBkneAAHdZGS+sNYWA0pgH97r4mH+Sq8T+b6Hb0hOKSBrfjzuI1wEXW/pxj
iVjWVsRrY17viueTF4S10tgl4bQ3r76jKIGTq+/AU9P3jfD094i98tRR2g7x
GFd+VnyYcBikTNCp8rJ5BCMzqnGyaKTiegOnTGQo1wkpRjiOVTaRcCcxgB+5
/tMe45VAmQLy4LHwMNDe767zppnsBzNhN/RQIMq9yeCwWWGQQQdsT6rusRaB
IgdxSMKqxaPXeQtFp+4Y3uvdQG9RpZbXkN+19qnENv3IUdE17J8TMe2sL5wM
i2L0qTIcDGR0b2aiAvR1HtXKg9UXCu2NY+3sdK9FyDqIXXdK4dkgaeynB4MC
Gg89Z6V6ztYzfiocSAosRdJUY+Eae8x3ND5kiImKD38ldgjyaAptUSxWAzfe
MUSyVwrSLUcGRLa3zgZdZfP1HgXKPI30VMxQ/qlfjV1tEXfTEKQL1BJrF0+O
rutJdbtqSsGVrRGd1+5yUcip0qKImUHif3ahxlrAHHLNQyZ6FkiE0aGDrUak
6JjEYEfJezZEab1qZ4KQktyiodlk1KLFBCGJgXejhiqoEI1s5Q3H0FjiDXz/
jMA3MVBoGvltP64yAT9619JAan2y+qp0zgfIsMcJjWk3Cgrykr+qDiAsoNWh
QxE2LMdargq/EheriaxrUSdxBHY61AeTER5tm8OIZCG8DRtRsNg1B6O9jrA9
4miIU3PSypVbRTsR6/D9/OslOna5kO/nzwND356evLo8Ts6HewePaSSXPx3T
5+9OL/EfveHw8+fvJTwYEKDIYZC1FBAaA49IHHMOBgzKwWiforV5Xcr8TaRG
PxPPH1V4RVWZHOpAMCVRr65VEBShKL+JzAxSKhDqhPvKQrFTjFE1Q6+hBuH+
DxbhfGoaySuHOFocAv+KBK/eBBcNwJ+QVOBfBejRdqVu3GprKCwJI0om5d40
Vks/Nqj9/oQ2Vf8Yji2re875N8LDTcoG+vhRCA64xDAzqwFSsBdRuCBDMtco
lANGN2zbcgUnaklAhpphup3IUzqdYi1R1GjLtnYES88B1sVYKvk2RDJKnEqB
iTRiCnHj6NBUum1EYeYhIwtygwvOp696mha3xhYc7USdjItzDpKocnbgHyYg
VpvLqS2snYLGA9zZ0QrFhGXyjH9hoZHVjL8ASYGq6iQTNu3UKoODH+YYefVD
TXp1m4k3n5KreJAcj13I771aock7cW0pZ9YA52cB7pCf2VVB1sWUcLnTv+Fg
PR7g30/4+bu7Es1xWrg3pOQNAwquB3jfik0bNDX9QFPjnWUe/RcKJ3tNNZAT
desgwIhck8ofBsYd/104/r6UNk/NBRNFvrUUaiQNww8O8zuAgy//8FtNQQRQ
ByRAxeXBgY8xd8Mal94zHjgliEvVkV+VQBXEP8h4zQhXYtFHk12jURGsP7F7
2M3jghcnIb2F7UcWdb7aKTkV4MSx4zdxVrL4cbEMLh0Cyl3nGsd2uo5NOQ+Y
epfJaxb4f4yL4K4TD7jcB+ogSZvGLimMpW4nJH3kAKDJGAFFhp6zvgrq+MFv
wK0wOgM8TsEjGQYkDcE0HdJ0jWqpCg8SEszZmEAwHCLf7mPVIrgnVXu2HhBG
nAdejI4lxoeKDaT2jiuAvNIAhuPW4r0m32IBUqgfBSauxD4qyhJI5wWIIXHe
BXBZHYlx4FXPrX0t2ySARRH3lbNG2CVYeluQ48Eca/MIN8FZOuGa4+vEB0gX
WjRcqwAENorB7R3XFRxeUogUxoDjCDgBszWs/g/mgsFVYHgIzY5Ec4AFd0X4
c8RWBffeOrTYQBXEQoAxEjRApcmPAO8BGaw994Jy269aHps1DAcI1pd0SquO
QzzPQpEdMIhEDhjHZRxRsYFH3vzo5T6OM66JYNVdFGvdJ6EsIXf9FfZbUV4e
iRrk6BchZaMxQKk7XMSCD012R5V18Q5XKVYTn3GR+lCUaSKIV6/VTusZuZQT
guF6PYAHo/0RmYh1e4fh2tHl9nhj8XI49s2xqnw/EtN1d6RJz7qSN/VvPUEV
pXt/oerMKDkV9Fx9C8vykTWFlc1zis+jVolCPlSchDDI74l0Mcs+UkBZDghr
IpH+4H3ayl59GlaQZeP8L5r5QK4RtBwUXkiMMWLHe+5BwHcaMZ/da0yHd1Pw
gpmWRtmQNdobYt2hijVJFSBLilrJVIZJLWRPYQSKnko19SWqx8vqQy8otryT
0h8RYP1Nrjk3Ma7s79Lyh1BIYBPlqBikzr9mBIyUnKQIB07pJLKsbQsHZxTQ
05ry5ykKiklj2IbKKokfkG/YR/N/EcgwLa26Gi8ipQLOo1PvhwoxZmTJuQMM
k87i0P6fHmDd7mEA7/9RyrZH4okjVnRrL2wlZf8DOB5YO4y2Pn93eTVIrt5c
JqgRkRaDrVBQiyEllL/ZO3iK3+gRC9UhdIkGupBntNThwzh1kZTtNWpWrDB8
+hSrnp/DhCIJX5I0F50voP7AbvKgCeWehgPOCKp20E/1/nALhG4gSE5lx3Rw
IgZzXDjWR6mZQXMQjZwYiv7kYggEuquoOojIy/4bM/vg5NXkpSGCg7Pi8OLs
aQRbg7weMNBlS6E82C/qLNKlVIaHKR2nlT+vRp2YhMely4g/hbjXyoHG+CSK
pPI2mCGZT8qTHC4HIyfCgwVkVbLExNF5qSmsS4vyOquXYoWESXYedc+6xknY
NAmInzop+TERioru6fcr+GDtyvcLmZYUheAwlWu2QOIT3c1S6T8AE9fi0gkY
sNPhQhooKLK1sO4RS9ssyilsYVsIsrpGLPOSXeN6HhS0E+7uFGSaS+mZIHXm
uUbUw2YzTGTbfH6EbSDrxYUwQoGBOQEkjLqk+DW42r7TI+ghyAmDt+ERMKjE
sT/EOzVK9CGhHrHmhPhUBwYskxr9VkDuMLAB/T381Y55EtpOi222AM7L43IJ
F+Ez2C+KyiW17UAq2957pski27ujXfcST32snHKjHFaDHfoCtl7sGw6SWrTc
uJkatqkp0hUsI/paMTGvBW3NuMc79lK7oxIkrCLzQtaoucMeCgSL3dTsjjZr
MBkgliaLMEwfoaHdpFzMXsLAlJQSeGOD4DH5EElmyZEKW+m4A+tTPtYElEN3
VKqPidqZsdTnUCoHLJ21jYq0pkjiVcSpyCW5SAXEwSgZPqCMMlJ5waHm8EW6
XgEOp7NG7PoFZp82i3pgYnRc5zy/ryX/hWHdHOIa0bpK0AVPelZ7HCJZHV13
CispisckIzvGrXfcfDe0rDc2/WALUd88JF1jjy7r1plMSqOyAzjW327qIVM2
yLOyqpW4Eo6inEtnN9xfZEYEfqXsIGQwVaVNmND3KrIUn8p5Y+o94gcisNMi
p6B0UoXaG1VblVYwmsmabRd8TPossyB2sKkHwKCb2kcA0RpipwB6Hz59WtMm
L6wvcLO4dQgXpNOJnzRjMIOzoF3rukpHSjmyBjmeRLJBcANNoR9SFASOsmKi
zdB78NSXSowcaVpSwMgg805EqrW0DnjidP2u7CIDG09qilBvkvps7xFqgmTL
h4KKDFCMHag8xSR/fKd+5TLnMOvKLQklKVW1eBgdWgX0b1QpQEf3ML6Nq0W5
55rCxdpF6Md0OsSzEFvg1XZN8BEX15qcj877ODpwAjoO/NXpBRc2Noog3yZ0
cKAm6fISNauBwAckVcQyrcU74PSTGm7zzQ2xVgSDMsSx5PJLXAMxpPEcuD25
cYJ6Vc7Wv4itecIxOx8CMqHKOZGYG6p9VXMerBc2wqJZhXpHGIJToUt02VKb
Lkep5LR9+e5i++Td5SkDYTmZKF7ooHWcEmLUm8ropkdILHdi1HkEJD4hXoSi
1Zd2cKkZ3LMK3f8dkexABJg9I6FelCNIxdvIosLITtjHq5vdjXPlbH1YBIx6
eBcfmYTIjtHhTwk9lGjnf1Y1xn4EctFgP5l2QVvibt7ApwecXBDz+c8myFvw
7uWwaEUAZewUFenly2twiBLj+Gil1PZRlVnGJktKVhjP5nQ5xMWQewVVoVI6
fV36uh1uDD6l5Y7M/37jQTqma3qPxbNgfWvWFgKqNWGGjRBRmPHPoVnCHBEl
dT3R7Xwutv7AdAqIqHJD6SYu8ogBHVUNA22fD1Iv04VaV5KX+aUUotGt1jwS
tEAiQHNsYuCJbavwxNyVcodISH8ty+Ze5yosUKIb5qUmCfaBMPBslRaNAidl
VbUiyBoMikNehu+OtlKIU1G4Dr8psVs8SkaLFvWz144v8NkuEbUO4x+JYvTS
dV22+g97xQ8LB6q5mOJpAl0TdtqVgFmTFLY2zQldlAHweR0DVEgbLmfgysNI
HgVYYaI+3bYXDA4jFz47DecDZACvXGTcKtXDBeTgCkiYjkJcq6LW6G9Kz6Gk
j6sTkCmVK/+EoGschBxgSWr7IHHwAM8kmCo+oHmUBKIeXglLsMstABAHshbs
Re4ni+pQUBcn9NEE8RXFCfSYpIvgpEr35L5ZpfPU6dhABk1pOoCguD0c81o9
LWtTf8X0MQHytXZ2NrNG4ZUy5kdR60IqdEKeXz5FtekejrJwqWziQ9FU667c
SvUhpg/1XVdAhUnUhZDIbPQQE9QVjIsOOXRQ41cWfTbB4U/FzqlVJ+SoBYWh
QnR3J69npO5HGXIelDQSPaYhmVTOTIRsdfK7C8xEVnyc/AK8Gax9IeMzrark
ha1+04OEMqDTJT6nvqBKVNHJPUA0lWkZurRQM3S+HDJlqZJNgD13mg/KlDAc
e4lBuuB8+IT8sKga+8UYq6EFl0I8qKHjrHgPcS9h0j4pWZKVTFaHb3SIiK8A
B8ZhMcHedZITO55WOYJfW6aFxLAN/EEbkgffiLj/R1MIKT52dbIhJ0rSSjvS
MYAKEp88e3WPDCyU+1wDesO7jl0ug1O0psrmX2EzLich7/tKTjizF2xefmGK
Xe5HqZGezQXK5j0nK9VZN043QMaFBTwC9knFAJ2lcnVynxeDvC9U+9rw5hNK
KaBGxpUlM7DOGsnA9AklEnYWRnqPV/87JjJdaluk9UtNJONytn1Xc9WX51Sb
gzZ6fWJhP6+OammAlGs6TGk9Ogm1ejrrWXFdfrCESTLurKG7LBU/JaH2QwRg
YAoMkgWo0c7i5CoNPvw/CMIBKZpwzF3INUy1HwqXisKVJX3QgWOcOlh8C85O
wIVcDkYQ9uKAQ9/OjwEeLEkNnVaOYaa5gmSHMKQhiZsiSMhXVViLxzCQ4prA
UDdlWDQuIqwEndqSY4FJbRMWhPgq6xLtrr0oFztT9Hp1C3iHEspPIgE32clt
B+yAwXiF455KcFusLyfIyCr77JWi/VgpmpM9PMOBRYRP9TjawvfOllVxWS/d
1Bkve54Jg3KFFNMbWGvy+bL30WhGDKaTnDwL5BCdbYoMs4lObO1ZzIOChxl2
b0qQm5/6rMul1tZzZP6RNqbL3oChuGgco2nW60V0aAm8Fy4br783mw1nKrH1
6nMfSQQKF4cl8YD1mKBUMVYkFGmrmA5GzjwNIIhHVx8yiOHFSWCzyWlsMpf2
hnFuX6eRCqgiWvg2jPjJMdB4H8zHyHHA+vJIXQOnFJAOz3kzlE9/HcuPCJl2
HAHx4HSg0xFNA/JVMqg2xq2B8tiQVxt3zyW2PnT4ekKxeYnUVdzItYgQioVF
T67kt7IKq9Xyqin3uWfshuTuFFPDrtEwiSm0/3uWPdUnoVgYpdys0tu8TDFm
hWV6P0l14y1Z858om3nrKNkSfjVsJsNHe1sDf11lRZN21xZtnrsLmJRepVX/
UXIUuf10+FAwP/7Czlq4fN99TRtKTKWG7z+5IvBb/qzLJOHnpmrtwF/C7xIF
Y9r/XQ2gl3jA+z8HlHKMh7x/RXCqg7fMQDxYueiznwgIWdTKr8pL6uIQXvfZ
fDpKRhpmGCKkgIERJ3q+JkDUp3QU+HiwVOakYuWsZIqii6aOUSUsZxstN6qZ
F/DbsJwN6QRt6//QMS7uf0o/74igPhrBlwIW2PQgYQ/IwJk+RpzwA43IAJGj
Ai3+L58ZsCrh023ifPYvJbaClgtq9ihHGOuxpopIkINJqZS6ub6KjUbfjLIq
qvFFk5169uUcj9l8TnBMB/ohZjfVCDBwe96EMKnN+fsdSI+zCVPyW2CouVCx
q+q6iF3NVltjJqPgBbFBJzeEFhBPYDgsc0ldwHWRzDGsNdZQiqUO6QY6JIY6
u3FRcbkcVsUySL3ihip142Ae4VhdPVf2NLvM/I75rKDTpJOnkwpF80RMwGdj
nGVbkD+HoDQKGxThTehZX9YMwWMgTedtcReqN6LkTr4WkSccCE4XpjzXKUX/
GHqbea9bjEjC27R/jkL6kfmHFQBKhJyRuGYQYCS0vYdpECanpq7GGpYyCrPC
4CJ8XqCFyoH1IRQKO4OFNjDi54hE+0DOAVqKcHqlHgH7ijQZhxxEXjcyij0K
CYox/41m5/eKfXULIOBJJTYTAl9xGZEduICdwvWcTaIalGQ2kT/TsCdOcm1Y
VSIfDXBUbEMTGgnetwsnj0ADcDEGaij0saYHwpkvhgzs1kXXghrJ4pahguye
JxZR9SZFT8cuYYqashMzLDQeqjzjgHwJZrvIqPqFg/871yUrqaaKa68M1hVp
GXijjtN3w6JDyFHHvKa2k2SPXFOf/7COClCLR7fl+ttaLNj4WThuKmfOecfW
WYVBlILLtAXWuBv/Fb0t2BMX8cR4VLD2vtwqgfuwEgsbSBR9JkSgqxNXJ69P
r+jxhBE03lOLgbmgHlKYwsXZvN5TzzlbGpg2JxphVhf3JTrUbPLdzyeX3wvW
8MnhAY6UB0EEwJgkfb35+der7Xe4DISJBALPKScmjRZGMch6FKTQq9g6jqYp
n/Io9BdSfFjDnjNFWvY8+0jjWKxQ4ZRR0ViUR+Kzc9X/GQFDW+3glly+hWqC
DaTAhkLQSWDMTFez0Fr/MmePGVRYuUTnXb0Ajq0jzDYLonZoFuCtUg4WqTBe
kod1UCjXF+I9wWWcsSfIh0MGXr2Ic9MarBQH7KVuqVI4TLadZmwPBSiyMOYx
CE6PE0lo1iFUUVhSeJTECpsG4gKPJmc8usWbBMMODbGay5dzbPBZGOHvlNTg
At8ixl3ohqWKgdGiz39G8p4rI1qpuiEugR8F9crbkNsAHMIxnkGA/4m9Qd7X
Znz2JCNzqHJRgLERxXLgcRx6yhx6PCiHEiMBeN0xcC6ABx/kupRoMXGMkkAJ
BrdXw7+qsT+sHXzFuXwq7znpFJhAdEesDawptEYgnV7yAaVlIXqeUjYpC4Ow
cYif5mJLQn4+W+89LEc5BbIrWtDhsokk5tWTdEWFoRAVziV1qaJGxElU8rO2
537Do6SEiKo2hg2NwoOtlEMhxwfpORz94Ie4DM4pKl55IOB4t2FenIsTYNOV
IynQfb3GrYljLDUuNMQuNqUEuU4wzasOxYUYG758ScwMgiAd1XmaDkkZBHaD
DRSOtPizEn/N6rq3eJzq4s48ly6dWsUrYJnFa4pAg+blcgp0fCbWU21aAfer
1ETSGiScc8BPklTAKLayWtzWokAjPlb5nsyCNRDMq2SYGQZdnHEC3HwpoakO
Qx+jAumAEFgJplxhYwl0rSKqhFfKTURWoqBEVlbdBzoPWVsxCGUeQSk95u+a
cW6oRFctOg2rfTB6UtB9ElJUSkglSYwxIdSLFEsDnkBVxnv5DzYoHosH2Tbs
y03r22KyqMqibGujZQbW1s6KEaWNK+Ej9TJcWpNxFI86uA/Pc3hWakldl1kQ
q00Tn6jkIul0bsMDJC/SjHcXvnI2b+AeIJU19Cd8dq9GVWSO2lIBXAOhnvNe
fTv8nlKwfV7VHQ4CcmQxBTzjwodTcQ04yC/QMleDp0zblFQ27rggPFOTHE0Q
aKXjgCnXlFzGBj5smm1o0L7UOVtCdgpkKiACOCsd8zypsvpDDWfgI3MtLfnM
+ldZRA2NiOeMzDFTMB6D6zJUVtk+H4qt1U0nDvTjZ4hOzAoUbXxIgbu73eJC
66hPNB5mok2PgBBrjmcDo2XEKfoPYnSFTkMogg8Seh6rdPnQbZnHxxPMoueX
cOfrCoH4JRpapFYTTp9K9sFtaNSCSiKZ28Lkztbn1AW5HLay3oYlRZYLj0na
JsZcmgVl+CsABRvQwZPRxWIiayJgW0RjNQstIHSqmy31BLXpF6FbCdVUD0wq
BcHaXKGxyrBkV7xFq4Wf/FlHl1aYek73O+mirjsniNR7d4nQAyokIFdysD3M
1ZB3tQV+RWlTcamrXXZmCxfSErt8Qr0lzlhA3NLhDJUkyuFwQd2BaQvH+IZO
nmlDo6AwgPDr6cDVy5dMU2F0WX47hCdrtbGBWsHTvuIXg8GwUpkg5sBGBxvF
53jGFd2c4hkneihA4YJTaDtZ+5FUfqiZAgFEdejOJ+3/MxgKR4xSTVjt+8FC
GHja+Ooz04ydWeUEjNOR8UZYE6qBDISu7G/MyAILJ94bpUKjYhNDThW1x1rD
bampQRYqycusptQLULbUEwvjpgzGCVX6oPUauDYV6unphII51mKUi8qqbLNK
NHDijcRQ65mgMjRK1qQmflxoUOioUypTUVX+/HvdxzXOcoaScZWCR8mruF6Q
ltDBOkDzMkpd1dITnNdpusmq6sUaCsReswCO2AMDOtOtnXpNUFLgRPt3zkQi
nFXKBYBkDkPvcuF0EarS3cWanktXTfZ34Hn5hZA6mFAJ/xsybocDBleLylqt
1G0JzVnXjPX99CD1//usbuMOFj8qxhJFq4KbR8m5zAM4qFlL/JZB11/ZCMkP
ewOw5t/FFPgKME3cWCpI2NlUcbgUaKrzPmpeW1LDM+rZbRhJta4kIK1q182l
TPqP9ykO7bIEeik4mzAjabfLhG9KwQXpnMgmNRVzF6a+2RfbEsh8gsJJVJl4
hW6kKiMfwz2Gfqp1FAICu2t10xBTGdiRkRhXK5BW3yHqYaLTP34BfLImjzHq
ucZNBh2ODN3BrAsmZ6dXPxrvQck4kWRtTliYBD62qhWjLZZkM8q61AmwwhgU
v+zXaglFJDdgUjSpoUwAlsoj7tFT1RQoIJXfmyqulkXSZUTkIO7koVBYpnbw
Dj0S3Hsw6HPhsh6i1husobGkRsOEnOekkJooLD1JV85RPL3GZa2tMJRL9g5q
A2FUU5BjYtTKaAijX6qYYlS+vVwQHDMewML5Z5TxqyWY4gR6wmfA16D9Yl3Q
Is1vscAI81OcLGbOJ5eUFNlKGvG7sBjcpwfoRRnWegXB5CvbSnkP3+tPrSKO
149DjacaBByWC/1qbeWQoRCIKDgVqJqo/1QKFKMwz5Zt3oIC6wIwVIJF1f6g
rFuvW0uYV8nZl5yIHfQmyBTd4poPBqEKshIj8xlfbaRPhXhDRIL6SK/IIuGR
1PLDlw+03kKON6704VkEY3OXwrCaAqVgwZvzW03XBIE7sWC+rhpyNbszGJwF
cVoG9o1ve6TaSCfCXIgjTHtciofAMDelFffocCnKA1Q9zqawUIFvKFYT+SGF
ryKuyvsgKKRTUL1Xf7jLjrsBA7ZOK9JV6Ocz07Bu0BxA80PLwmNBJAQGkBMV
tKuoBGLPS+ugUqF2TtlH8Mq2QARvjX074QPhpVxXTlKI6Snnx5eXuK0/Hp+9
4dJzVFW9CWOJQh+U2NUpOGt8nTCqd5i8f3v5/hyb452+YpBO4WrJWDFfzt6e
vHt78ub95dlfTultxqtsVVg3QojO5/ZJj9c0OFc4qLfvroYX798S26KMdzLj
kQuEgRnNBGKvEwEyrVS7jK0Y9Cd0vFO+MrkGOKlR8TKoGk1l2abyXrBd0NRN
5yDw59QgAQ4vnugJMhGuiNetsebw5OurqRFcvV2CxJABfHqw5K+GOqYeUJ1a
oNWuhBQpK8zRSaSwA7eU2DGl0lFmAJbGnQbB3EG3dzLhmsLM6zBr8usU0Nc4
1I0dYXz04JrZe/01eqgr2umq5G3qhZKJso1+lZzLDbjE11DmXztft/j6pcod
BQDCMvX3QWV/oVnMrxWC/IOYl5RFDu3McTqVlHwquB/aqVKtHrTLe/VJqYI2
wRsGFJTVxpbGzlWRYFShIhzDDY+ZkWuDzjkbxOi/8f36x2jXBZGfGzHVYiIj
eGWQxBazSDKflulL8wfyQ30rmfbxpCZ4Xx7gK6kHE4I4NozyTYjtGXhHCO/T
gPubUR2LgfatoP4idJKjlJnJPRH43qHwhT6segRCmEzox/BpU4rnQh+z81pF
zhM21L+EWD9FbI4W03E1FwM8RiFeGgI7cVBHY41HEoMwlRYDZUBNFDZe3/KD
0mv4N/V4YMQDKy644mrqdJLBjZILxHYtEw5A+sbiFHXHWg/ECQ0nsk2kClRD
+mBYSYBdUY47x1HboOKaL/qkqxI5sVxvkziSaKX8Jp1B0618gkW2pByMFZQj
1QJUcDGX2CGnHstKdjF6dihxYJGYGEXzjWM7bR0EyiuVUiL/TNCOlYSK5j5F
6uA0jI6BKHyJmt+F02/DRpLvQNvMuUM1XDQkJbjT8B4IuMo+dhcvsOKH3Iue
u86DYGbr02jv+UFYQMhf1XuAXg/C9QZ/rqkgVG209r+9kRaOlTNeZ+R2JgcC
2R5IhGG8VqQO9q0H8u+kgzNRjJJ3K5HSkrDN2psv2aMFhfoVYKgAwWwYEVfQ
PIM7vXcieiRtalYatQJMV18jRCYNZn0BGC1Y7vw9OmQJdUofu9DPYtR5HPjz
ODOabEtqRuxAa3FDlcsFZ2xSqbaws4TE9F3JkQkr04TGiFwP/hm4jp3yMKQp
SjMrVGc1HZLLBYceAH88ahPp2zCjGyCMG9H2qWodXsA9TfjYhAUTxZH5ozKH
Kkt9Mc7YOOnY4ZTbQT7rNJyH4/MDjq4PxZidkSRKg6MeXEhiKYxhqMY/Sk71
yLOG3unSioidznGMy/lHOM9a5XPqwuQiLRup5kO5NiYuASigF0dhrD3IqAP4
YlRZ0hxT7NenQXcO3DjHsyRSQi3wTg1ZSVHx5r92kkbH87sV+vj5wk7JBxzY
q4AVXGrx908PwDQoBNXPLugz4WyhA5MYY/xITkLrd41k/k7oPVecijIl5EB0
cbzqWmXYiLDVfsGG0MDv1nbjOLGvHYWIHdiXWyrb7bza5D9C3irdhck8JTER
D2mQSC5PXGFGa1K6i2s5hJF7Z9apb8rQBN/TOogB25CMldq8QxLNKThrcx4T
5/oGPefii7lsZJim0m2xF2TQUnA2i/rRdcpedCqWaJuLgpKsyzoj1Enp1wQF
liv6zwDMojRhFo2oC2vKUQlepvUF6xSmnWGFZ7/RatBS7LhEjRFYWRO8NJm1
5JUKKsOwhH/jWi13jsGp7y0NhBzIymHQdRpI+XWp64Wq8YSYhFi+2MvUFyCM
SiYfebgsRqUNOgWFc8S1B9Ne04I8G1cpB/FUYLGKSRFYcuiN2yxvhhkLakIh
iHys26yRQgTS9Cps7R2kY4+MlLUbwvw+fTp59/bt6clVCHNOE7yNkEVSh7MI
6tuhBudKzFEJNIE5iffdzV6AnVgDUuv/+Y7zhqUbmXh6Zb+eo8IjXNfs8NRh
6QA8yKPkR+3c6JFJlLzHqrUjQw8U9PoQwzUiwFRA7IyAlaicSxnQ+m9on0/C
ltRY36WTLD/QtnKDpG82aavOgdMXWEFG7wnmlJJmHW6drxvGhXOdwdC6Dud4
2F7CBaT2MORQri09AE0rCjI1dxBicCgRIfMmK9qP+LRfL99Q7V2DL3kFpjBl
qC25zEbJqKauN5amucScD+9cPePqW1zpA6mUdJI/t2MLihwXLdA6FWzC0Ow4
JYMLGEgTYYMPRG9B1EX4/BZsxcJ1yFBMDTmRSi6c7LySjU0pRZYgnikF63Pc
DVDmmPiYb0v9xUGQ85JTm3BXYJv1RaLtk0XJSYupCY8Ln2lXf3xDS4QOY2ed
1R+zjhiUvJBOExTQlLRagaRV4aah9dIxVzDuYMlYpOWsEl26jjhgtWDCxw3o
JOShrylbOuaeyHBQBdjYEeyEHfiRsJS0UU85xMGA4R5t7gvP6UJBWS+uoxhD
Lzz4WD1bhl2sndY4PtmnV8fnVGOsaHn654VdZ7z+zdBf5VQ1slm2SKKCgoJG
2tigGVOsxBIHXjL3zkpVEWH8KVd5EsnDvK2zd/1O7fp7l42tO6mnyvfFCB+E
IRHKlwj8RkMfjgh6xmlcltUR1KWRK2t6mYim/jAv2oJjMhJ5CvpNRQ2OsHAu
rkG3fKcJzOr4SDkLVth5/93HU03Q5OQuqeul2n2AlHUM/JnDxvq8B+e+CsFW
AUDW1+bvteMi7xW5+t1JZSbJEBdiZV5SUFBMy5E5P7thrUjxONJySZsgr6kd
zvXPCZoWBlUMi/a2cKXH2QcleF1KwtRIW8CuVelQFL2JUuSQdbKagZunDgt4
HFXslXJ6SIQu8KC48DgjhIWo6KnUNoDLnnUyR4AXSY3yXuopcRAsRwn61JQc
K1WrPZQ7cU4gfwkAoz4tQFcSJYjAHkQw/ogDadwUKDObYU9FFH+M2XZVi6Kw
+Buun8AdVIJHKaxWFtkQ2nFail+F6vZkEgxcwVpQK6HjiKkKzCnOkjVpCNsI
mveAyuZZq2N7xMBU3ef+mcaBasLgocCYkWStliUVoLrLK6TG82yzsKLvhoaU
wCaWk87XzhL2D1OyNJ2dFZXKab01SmYGxNEQBF8R+qZMnP8baHo+j+hYfQx5
OZeCRlwbmrJB0Zo2LtGB7CLxyUovAQdksQ0jwFESYeCs5UpDArWTGo6cCsdp
5FNXoQkTxl2SHCkBeuEkvlDMUWdjR3KUS3CAboeriFBEzj/i3iKBYeSKPX/g
mGUvP9Cjng1V08IXESTHJdB4UDP7Z8Whr7lMU7K40+UKw0/GFT/kTAZLXF8b
kdHeqRUc4N5FR3GgyT9rg7F+EwNdrKHPS0PAR1gpKDSYHDt35awHzOsDzJMv
NEm4LB+rcKoFSv7K8wGfUO6KObuiHebPVAveOcXSTtakUzq62ZTUdHJNSprk
MlMML24ljZ1CNQVVK/YdFyZtGoxrVMPAhsScAAa+IPByovncHKKjrMquh1db
ssEYQMJgOz3s3Yw/pmg/ZI3vpcnFTVGThSeh77FTp9nhUZx7P83nMMtmsaxd
9teqrdASqUXg+cwbQsS5G3w2F6+mj0GF1Uwwztnim3zamdCTj4Fq2BfRT5w0
pgfat99zmKKp0eIJXf2QKxFT8IIBfVQYWZXf2OQw3KQ+pA5FiStrW3Tz46Rr
cUOg3gvMAZUaFGdhzO940uUt5MlDn+BLSlbWlZe0NRHRjpO7qKyL5KHi5lsA
WKO5b64opahV3sMr2fiOXTlvgW9dhCGvyHJXE8bFZHsti459JK4xQe5mUHtw
YfNVraVbqCMmybDUK/UIraHaCYJ1LiRIysXUfZM/Pfos+jSs4KoNuoq5oOJJ
nCzoroEA9aiohg9ldyrXUByAYzd8rNlf2Ynj9oFJC0KcgyDk7mXe/WGimghS
y6fRqmnRrqilgbnjPDRfJOG9VPru1gvQ9LewMgOnQqVCd8ziKY2EJA1HJ6Ie
52QO0GmgxkOsoStsLWTfZA8FpWXpdVFJKF/10mgtJVe/iDUmqZcS8AoUUoHW
Ebh1DQarvSdJ6x+Ineax9iOONTrcmaTNOHHGxo2v5atZw95t7No80nLxQ7Uv
SVkruPE4TOkPDrSVi1BroLrMQdL2l0SeG0tkQ3MZoOBQVfNWKlPXQP+uJScB
Rchf4UVKkOXjPFfOZeiqHqdF3LYjL29yzvp7g7qGoSaynNq1ahaDyCTnkAB2
qglssIQLqaoxqklKXp0lL1urRRych05yHcJWJeRSMmRJgSI9CWr2St0GclVV
46ypuJ/BNChLTJ5GFp+YUx+wgbBMfD9FhSOIct6lhzYnQg7EBHDMWXtRVuQz
W0jHWVdLlxpOEyLsiqtw+/LVXP8zCpu5mRVeV2GnF0a2AoLjhHHHvoLkckSx
xD1a7JInY8kiih1hUSZ96mp6ZJSjfU0s4EFyjjbSZI2GvOIfPnfqtiCR+ZJd
ncoE0qERbCqgrnLegUj62oOSC+ZWIXDlzcIeh+IUJ3cyKQfGlzGTEl6Yi+Ga
Z7EdH5WYoTIEZHyxLUjZ4QYFGlkTvldIQIPdo8oo6372sxHjrQ5rZ09STp0h
HQ19HJXzV/hEEerRI7nMZIOKAXd+duYdonFO217AIL30SuLuqcYnWSZBbRbf
uG5d4I8a66JpPU1pVtJ3Dx6KfqBzXmdqCzIIcazoLcAmixeIatA2LCUL/Tl6
d/BZ/jkaX9Ra9JioGPrLqcfPz7+eupIi1IcscyUnnQoLxJStkFbqAamtvltS
30/JVBlq9HGjZzXwosJPQVn+04LCSsw5KVtSu0D4YxYXUUaMWE7ljysV2rK/
F3FJGhqaAoh80buwDY88SBpQG0eWYfGcwFZyYVBKEfalMBznNmtK/M8Rgdwr
BI35b1QZU0+b9tXhBK3jt8d9hgG7nJI5jX3CXas05qAU+qTbBBrnOiiuwvSK
AaOCTVwsAMMZ4veJ2p10sMOuFqDPhzQcnQ7YDnvN2NFL4oTFM0xrOByS6ksT
bOySK0ddYsI7hvob5yWjhhugwTfsPB4iU9d515pEDjb9FANfgnAi84ZFKqfH
MON2ufrs+JIjTIcazkC/XiINSzyM6CiJfEVjq9VNOWZMxkBWO2//XZ0IEH1e
TDJqsOgYhFQyRmwU6FMrx2X9YWE4ETIjAtgx5kQdxGy9pVHHqTWRgQv2ovpj
WFDztF43bXTqy3kmpdl3fcwK88NHUCYllvx8a03X063tF/CGinIF+p7R3qDU
19l0gABZHxUSum6Z+2gYyXdLYrQhnc2on1I/0LTel+4z7xRFp074sNBJlM7E
WB9pMEg7EzistcVi/23cSvZWvPdUcU8N6bpbyFT2VOD2rjSjZ3RaQT1qXdfJ
I/eRZCU3StawXISAS5Awj1s3WuFByV8ye8Mc9RU6dBUPhnRMsoccLyyM9Tis
X2mg5dzVp/XWltZr54wMKvysirYqgTT1uMpA6OJjrJRzeDnwoOxjv0fFg+Q4
KsBam09HRbscI197vkWlM7fEeynrQ2zgA5EZVzoNaZxdL13XPSY6g/0NNxtW
vKifkrcnl2XDatNdDYEpNhpiZdciVKg01v8DtrucbFHpAAA=

-->

</rfc>

