<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-car-rer-artifact-01" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="rer-artifact">RER Run Artifact Format: Hash-Chained, Signed Records of AI Inference Execution</title>
    <seriesInfo name="Internet-Draft" value="draft-car-rer-artifact-01"/>
    <author initials="K." surname="Cardillo" fullname="Kayla Cardillo">
      <organization>Tech Enrichment</organization>
      <address>
        <email>contactkaylacard@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="12"/>
    <area>Applications and Real-Time</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>AI agents</keyword>
    <keyword>audit</keyword>
    <keyword>cryptographic receipts</keyword>
    <keyword>hash chain</keyword>
    <keyword>Ed25519</keyword>
    <keyword>JCS</keyword>
    <keyword>inference audit</keyword>
    <keyword>RER</keyword>
    <abstract>
      <?line 77?>

<t>This document specifies the Run Envelope Runtime (RER) artifact format: a
hash-chained, Ed25519-signed JSON record of a single AI inference run. An
RER artifact carries (1) a signed envelope declaring the permissions and
limits under which the run was authorized, (2) a hash-chained event log
covering every model call, tool call, and policy decision made during
execution, and (3) a runtime signature binding the envelope hash and event
log head to the runtime implementation that produced the record.</t>
      <t>The artifact is designed for offline verification by parties who did not
participate in the run. A separate verifier package, with a minimal
dependency surface (canonicalization, SHA-256, Ed25519, JSON schema
validation), can establish the artifact's structural and cryptographic
integrity without any of the code that produced it. After sealing, the
integrity of the record does not depend on trust in the operator.</t>
      <t>This document complements the declaration-side agents.txt and ai.txt
well-known URI proposals (both filed, under review at the IANA
Well-Known URIs registry). Declaration says what an agent was permitted
to do. An RER artifact records what the runtime attested actually
happened. The two surfaces together cover the before-and-after of an
agent interaction.</t>
      <t>Two on-the-wire schema versions are defined here: rer-artifact/0.1 and
rer-artifact/0.2. Version 0.2 adds a bundle format, manifest binding,
and approval-protocol metadata while preserving the verification semantics
of 0.1.</t>
    </abstract>
  </front>
  <middle>
    <?line 106?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The deployment of AI agents that take action -- calling tools, invoking
external services, completing transactions -- has outrun the audit
mechanisms available to verify what those agents actually did. Logs
produced by operators are necessarily trusted by consumers of those logs:
the operator owns the log, the storage, the redaction policy, and the
key. There is no structural reason for a third party to believe an
operator's account of an agent run.</t>
      <t>Several adjacent surfaces address parts of this problem. <xref target="AGENTSTXT"/>
specifies what an agent is permitted to do on a site, in advance.
<xref target="AITXT"/> specifies training-policy and licensing declarations. Both are
declarations at the boundary; neither describes what happened inside an
agent run.</t>
      <t>This document specifies the artifact half of the picture: a
hash-chained, cryptographically signed record of one execution. The
artifact is structured so that a verifier with no relationship to the
operator can establish, offline, that:</t>
      <ol spacing="normal" type="1"><li>
          <t>The events in the log have not been reordered, removed, or modified.</t>
        </li>
        <li>
          <t>The envelope declaring the run's permissions has not been substituted.</t>
        </li>
        <li>
          <t>The runtime that produced the artifact attested to the (envelope,
log-head) pair with an Ed25519 signature.</t>
        </li>
        <li>
          <t>Where payloads are present, their content has not changed since the
event was sealed.</t>
        </li>
      </ol>
      <section anchor="trust-boundary-verify-never-imports-runtime">
        <name>Trust boundary: verify never imports runtime</name>
        <t>A design constraint enforced throughout the reference implementation is
that the verifier package has no compile-time or run-time dependency on
the runtime that produces artifacts. The verifier depends only on:</t>
        <ul spacing="normal">
          <li>
            <t>An RFC 8785 <xref target="RFC8785"/> canonicalization implementation.</t>
          </li>
          <li>
            <t>A SHA-256 hash implementation conformant with <xref target="FIPS180-4"/>.</t>
          </li>
          <li>
            <t>An Ed25519 signature verification implementation conformant with
<xref target="RFC8032"/>.</t>
          </li>
          <li>
            <t>A JSON Schema validator.</t>
          </li>
        </ul>
        <t>A third party who wants to check a proof installs only the verifier.
They do not install, configure, or run the operator's runtime. This
constraint is what allows the verification result to be meaningful
independently of the operator's posture.</t>
      </section>
      <section anchor="relationship-to-other-standards">
        <name>Relationship to other standards</name>
        <t>W3C Verifiable Credentials <xref target="W3C-VC"/> is the closest existing analog.
VC defines a signed claim about an entity; an RER artifact is a signed
record about an execution. The two surfaces are compatible -- a VC could
be issued attesting the contents of an RER artifact -- but RER carries
information VC does not address natively, including a hash-chained
event log and a separation between envelope (what was allowed) and
events (what occurred).</t>
      </section>
      <section anchor="requirements-language">
        <name>Requirements language</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <ul spacing="normal">
        <li>
          <t><strong>run</strong>: A single execution of an AI inference loop. A run begins
when an envelope is bound to it and ends when a terminal event
(success, failure, or block) is recorded.</t>
        </li>
        <li>
          <t><strong>envelope</strong>: A signed declaration of the permissions, limits, and
policy bindings under which a run is authorized.</t>
        </li>
        <li>
          <t><strong>event</strong>: A single record in the run's append-only log. An event
represents a model call, a tool call, a policy decision, or a
lifecycle transition.</t>
        </li>
        <li>
          <t><strong>event log</strong>: The ordered sequence of events produced during a run.
Each event after the first carries a hash of the immediately prior
event's event_hash, forming a linear hash chain.</t>
        </li>
        <li>
          <t><strong>artifact</strong>: A document containing the envelope, the event log, and
a runtime signature. The deliverable record of a run.</t>
        </li>
        <li>
          <t><strong>bundle (v0.2 only)</strong>: An artifact plus its associated manifest and
any binary blob payloads referenced by the artifact's events. Bundles
package artifacts with side-data for portable distribution.</t>
        </li>
        <li>
          <t><strong>manifest (v0.2 only)</strong>: A document inside a bundle that lists each
blob, the artifact's content hash, the runtime key hash, and counts
derived from the artifact. The manifest is itself signed and hashed.</t>
        </li>
        <li>
          <t><strong>runtime</strong>: The software implementation that executes the run and
produces the artifact. The runtime holds the signing key.</t>
        </li>
        <li>
          <t><strong>verifier</strong>: The software (or party) checking an artifact. The
verifier holds the public key and the artifact only.</t>
        </li>
      </ul>
    </section>
    <section anchor="artifact-format">
      <name>Artifact format</name>
      <t>An RER artifact is a JSON document. Two on-the-wire versions are
defined: rer-artifact/0.1 (frozen) and rer-artifact/0.2 (frozen).</t>
      <t>This section specifies the wire format. Section 4 specifies the event
log carried inside the artifact. Section 5 specifies the envelope.
Section 6 specifies the cryptographic primitives. Section 7 specifies
the seven-check verification algorithm. Section 8 specifies the
additions made in version 0.2. Section 9 specifies the bundle format
(v0.2 only).</t>
      <section anchor="schema-identifiers">
        <name>Schema identifiers</name>
        <t>Three families of schema identifier appear:</t>
        <ul spacing="normal">
          <li>
            <t>envelope_version: rer-envelope/0.1 or rer-envelope/0.2.</t>
          </li>
          <li>
            <t>event_version: rer-event/0.1 or rer-event/0.2.</t>
          </li>
          <li>
            <t>artifact_version: rer-artifact/0.1 or rer-artifact/0.2.</t>
          </li>
        </ul>
        <t>An rer-artifact/0.1 artifact MUST contain only rer-envelope/0.1 and
rer-event/0.1 sub-records. An rer-artifact/0.2 artifact MUST contain
only rer-envelope/0.2 and rer-event/0.2 sub-records. Mixed-version
artifacts are not defined and MUST be rejected.</t>
      </section>
      <section anchor="top-level-structure">
        <name>Top-level structure</name>
        <t>The artifact is a JSON object with the following fields:</t>
        <artwork><![CDATA[
{
  "artifact_version": "rer-artifact/0.2",
  "run_id":           "<implementation-defined run identifier>",
  "envelope_hash":    "<hex SHA-256 over canonical envelope>",
  "log_head_hash":    "<hex SHA-256 -- last event's event_hash>",
  "manifest_hash":    null,
  "runtime": {
    "implementation": "<runtime name>",
    "version":        "<runtime version string>",
    "key_id":         "<base64url SHA-256 of public key>",
    "algorithm":      "Ed25519"
  },
  "runtime_signature": "<hex Ed25519 signature over header>",
  "envelope":          <SignedEnvelope>,
  "events":            [<Event>, <Event>, ...]
}
]]></artwork>
        <section anchor="field-semantics">
          <name>Field semantics</name>
          <dl>
            <dt>artifact_version (REQUIRED):</dt>
            <dd>
              <t>The schema identifier. MUST be rer-artifact/0.1 or rer-artifact/0.2.</t>
            </dd>
            <dt>run_id (REQUIRED):</dt>
            <dd>
              <t>A run-unique identifier. Format is implementation-defined; the
identifier is opaque to the verifier and is not parsed.</t>
            </dd>
            <dt>envelope_hash (REQUIRED):</dt>
            <dd>
              <t>Lower-case hexadecimal SHA-256 over the RFC 8785 canonical JSON form
of the envelope's signable bytes (see Section 5 for the signable byte
rule).</t>
            </dd>
            <dt>log_head_hash (REQUIRED):</dt>
            <dd>
              <t>Lower-case hexadecimal value equal to the event_hash of the final
event in the events array. When events is empty the artifact MUST
fail verification (see Section 7).</t>
            </dd>
            <dt>manifest_hash (v0.2 only):</dt>
            <dd>
              <t>Present in rer-artifact/0.2 artifacts. When the artifact is
distributed standalone, the value MUST be JSON null. When the
artifact is distributed inside a bundle, the value MUST equal the
bundle's bundle_hash (Section 9). In v0.1 the field MUST be absent
entirely (not null, not present-with-null) -- null and absent have
different canonicalization outcomes and therefore different
signature domains. This is intentional.</t>
            </dd>
            <dt>runtime (REQUIRED):</dt>
            <dd>
              <t>An object describing the producing runtime. The implementation
field is a free-form identifier (for example, "@rer/runtime") used
to distinguish runtimes. The version field SHOULD be a semantic
version string. The key_id field MUST be the base64url-encoded
<xref target="RFC4648"/> SHA-256 of the raw 32-byte Ed25519 public key. The
algorithm field MUST be the literal string "Ed25519".</t>
            </dd>
            <dt>runtime_signature (REQUIRED):</dt>
            <dd>
              <t>Lower-case hexadecimal Ed25519 signature, 128 hex characters,
computed over the canonical form of the artifact header (Section 6).</t>
            </dd>
            <dt>envelope (REQUIRED):</dt>
            <dd>
              <t>The signed envelope under which the run executed. See Section 5.</t>
            </dd>
            <dt>events (REQUIRED):</dt>
            <dd>
              <t>An ordered array of zero or more events. See Section 4. An empty
events array MUST fail verification.</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
    <section anchor="event-format">
      <name>Event format</name>
      <t>Each event in the events array is a JSON object with the following
fields:</t>
      <artwork><![CDATA[
{
  "event_version":      "rer-event/0.2",
  "step_index":         0,
  "event_type":         "rer.run.started",
  "parent_event_hash":  null,
  "timestamp":          "2026-05-13T12:34:56.789Z",
  "payload":            { ... } | absent,
  "payload_redacted":   false,
  "payload_hash":       "<hex SHA-256>",
  "event_hash":         "<hex SHA-256>"
}
]]></artwork>
      <section anchor="field-semantics-1">
        <name>Field semantics</name>
        <dl>
          <dt>event_version (REQUIRED):</dt>
          <dd>
            <t>rer-event/0.1 or rer-event/0.2. Within a single artifact all events
MUST share the version implied by the artifact_version (Section 3.1).</t>
          </dd>
          <dt>step_index (REQUIRED):</dt>
          <dd>
            <t>A non-negative integer that increases monotonically across the
events array. step_index is not required to be a dense sequence
(gaps are permitted) but MUST be strictly increasing between
consecutive events.</t>
          </dd>
          <dt>event_type (REQUIRED):</dt>
          <dd>
            <t>A dotted lower-case string identifying the event family. The base
set of event types defined by this specification is:
</t>
            <ul spacing="normal">
              <li>
                <t>rer.run.started -- first event in every run</t>
              </li>
              <li>
                <t>rer.policy.evaluated -- a policy decision applied to a model or
tool action</t>
              </li>
              <li>
                <t>rer.policy.step_blocked -- a model or tool action denied by policy</t>
              </li>
              <li>
                <t>rer.model.called -- a request was issued to a model</t>
              </li>
              <li>
                <t>rer.model.returned -- a model returned a response</t>
              </li>
              <li>
                <t>rer.tool.called -- a tool was invoked</t>
              </li>
              <li>
                <t>rer.tool.returned -- a tool returned a result</t>
              </li>
              <li>
                <t>rer.artifact.written -- an out-of-band artifact (blob) was produced
during the run</t>
              </li>
              <li>
                <t>rer.run.ended -- final event in every run</t>
              </li>
            </ul>
            <t>Implementations MAY define additional event types under the rer.*
namespace. Verifier behavior MUST NOT depend on the specific
event_type other than for human-readable inspection.</t>
          </dd>
          <dt>parent_event_hash (REQUIRED):</dt>
          <dd>
            <t>The event_hash of the immediately prior event in the events array.
For the first event (step_index = 0) the value MUST be JSON null.
This field is what makes the log a hash chain.</t>
          </dd>
          <dt>timestamp (REQUIRED):</dt>
          <dd>
            <t>An RFC 3339 timestamp with fractional seconds and "Z" timezone. The
timestamp is informational; verification does not depend on
timestamp ordering.</t>
          </dd>
          <dt>payload (OPTIONAL):</dt>
          <dd>
            <t>The event-specific data structure. The shape of payload depends on
event_type and is documented per event family. When the payload is
redacted (payload_redacted is true), the payload field MUST be
absent. When the payload is present (payload_redacted is false), the
payload field MUST contain the data over which payload_hash was
computed.</t>
          </dd>
          <dt>payload_redacted (REQUIRED):</dt>
          <dd>
            <t>A boolean. true means the producer chose not to embed payload bytes
in this event record. Verifiers MUST still recompute payload_hash
for non-redacted events (Section 7, check 7).</t>
          </dd>
          <dt>payload_hash (REQUIRED):</dt>
          <dd>
            <t>Lower-case hexadecimal SHA-256 over the RFC 8785 canonical form of
the payload. When payload is absent because the event has no payload
data at all (rather than because it is redacted), the canonical form
is canonicalize(null) and the hash is SHA-256 over that canonical
form. The payload_redacted flag distinguishes "redacted (data
existed)" from "no data."</t>
          </dd>
          <dt>event_hash (REQUIRED):</dt>
          <dd>
            <t>Lower-case hexadecimal SHA-256 over the canonical JSON form of the
event-header object, where the event-header object consists of
exactly these fields:
</t>
            <ul spacing="normal">
              <li>
                <t>event_version</t>
              </li>
              <li>
                <t>step_index</t>
              </li>
              <li>
                <t>event_type</t>
              </li>
              <li>
                <t>parent_event_hash</t>
              </li>
              <li>
                <t>timestamp</t>
              </li>
              <li>
                <t>payload_hash</t>
              </li>
            </ul>
            <t>Note: event_hash itself is NOT a field of the event-header object.
This breaks the obvious circular dependency in computing event_hash.</t>
          </dd>
        </dl>
      </section>
      <section anchor="hash-chain-rule">
        <name>Hash chain rule</name>
        <t>For every event at position i &gt; 0 in events:</t>
        <artwork><![CDATA[
events[i].parent_event_hash == events[i-1].event_hash
]]></artwork>
        <t>For event at position 0:</t>
        <artwork><![CDATA[
events[0].parent_event_hash == null
]]></artwork>
        <t>Any deviation MUST fail verification.</t>
      </section>
    </section>
    <section anchor="envelope-format">
      <name>Envelope format</name>
      <t>An envelope is a JSON object declaring the permissions and limits of
a run. The envelope is signed by the same key that signs the artifact
header. The envelope is sealed at run start; events are appended after.</t>
      <section anchor="top-level-structure-1">
        <name>Top-level structure</name>
        <artwork><![CDATA[
{
  "envelope_version": "rer-envelope/0.2",
  "permissions": {
    "allowed_models":  ["<model id>", ...],
    "allowed_tools":   ["<tool id>", ...]
  },
  "limits": {
    "max_steps":       <integer> | absent,
    "max_spend_usd":   <number>  | absent,
    "rate_limit_rpm":  <integer> | absent
  },
  "expiry":   "<RFC 3339 timestamp>" | absent,
  "metadata": { ... } | absent,
  "required_approvals":     [<ApprovalRule>, ...] | absent,   (v0.2)
  "required_signer_types":  ["<signer-type>", ...] | absent,  (v0.2)
  "signature":              "<hex Ed25519 signature>"
}
]]></artwork>
        <section anchor="field-semantics-2">
          <name>Field semantics</name>
          <dl>
            <dt>envelope_version (REQUIRED):</dt>
            <dd>
              <t>rer-envelope/0.1 or rer-envelope/0.2.</t>
            </dd>
            <dt>permissions.allowed_models (REQUIRED):</dt>
            <dd>
              <t>An ordered array of model identifier strings the run is permitted to
invoke. Order is significant for canonicalization but not for policy
semantics.</t>
            </dd>
            <dt>permissions.allowed_tools (REQUIRED):</dt>
            <dd>
              <t>An ordered array of tool identifier strings the run is permitted to
invoke.</t>
            </dd>
            <dt>limits (REQUIRED, fields OPTIONAL):</dt>
            <dd>
              <t>Implementation-enforced caps. Fields that are absent denote "no
limit on this dimension." The max_spend_usd field MAY be 0,
denoting "spending is forbidden." The max_steps and rate_limit_rpm
fields MUST be at least 1 when present.</t>
            </dd>
            <dt>expiry (OPTIONAL):</dt>
            <dd>
              <t>A wall-clock deadline after which the envelope MUST NOT authorize
further actions. Runtimes SHOULD reject envelopes whose expiry has
passed at the moment of run start; verifiers MAY surface an expired
envelope as informational and SHOULD NOT use expiry to make the
artifact fail verification, since verification can occur arbitrarily
later than the run.</t>
            </dd>
            <dt>metadata (OPTIONAL):</dt>
            <dd>
              <t>An open object. Producers MAY place application-specific data here.
Verifiers MUST treat metadata as opaque.</t>
            </dd>
            <dt>required_approvals (v0.2 only, OPTIONAL):</dt>
            <dd>
              <t>An ordered array of ApprovalRule objects describing actions that
require an explicit approval token before execution. Each
ApprovalRule MUST contain an action field naming the action requiring
approval and MAY contain tool_pattern, model_pattern, and
signer_types fields scoping the rule. signer_types values MUST be
drawn from the identifier set defined for required_signer_types
below.</t>
            </dd>
            <dt>required_signer_types (v0.2 only, OPTIONAL):</dt>
            <dd>
              <t>An ordered array of signer-type identifiers that approvers MUST
satisfy across the run as a whole. Each identifier MUST be one of
"human", "delegate", or "automated"; schema validation (check 1)
rejects other values. The semantics of "satisfy" (counting rules,
role hierarchy, threshold) are out of scope for this document.</t>
            </dd>
            <dt>signature (REQUIRED):</dt>
            <dd>
              <t>Lower-case hexadecimal Ed25519 signature, 128 hex characters,
computed over the envelope's signable bytes (Section 5.2).</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="signable-bytes">
        <name>Signable bytes</name>
        <t>The envelope is signed over its canonical form with the signature
field removed:</t>
        <artwork><![CDATA[
signable = canonicalize(envelope \ { signature })
]]></artwork>
        <t>Equivalently: copy the envelope, delete the signature field, then run
RFC 8785 canonicalization over the result. The signature is computed
over the UTF-8 bytes of the canonical string.</t>
        <t>The envelope_hash referenced from the artifact header is the SHA-256
over those same signable bytes. The envelope_hash is therefore
independent of the signature value -- substituting a different valid
signature does not change envelope_hash, but the envelope's signature
check (Section 7, check 3) will still fail because the public key the
verifier uses is the one bound to runtime.key_id, not to the swapped
signature.</t>
      </section>
    </section>
    <section anchor="cryptographic-primitives">
      <name>Cryptographic primitives</name>
      <t>This section binds the document to specific algorithms. Implementations
MUST use exactly these primitives. Algorithm agility is intentionally
not provided: the artifact format is small, the primitives are widely
supported, and a future version (rer-artifact/0.3 or later) would
declare alternative primitives in a new versioned envelope rather than
through field-level negotiation.</t>
      <section anchor="signing-ed25519">
        <name>Signing: Ed25519</name>
        <t>All signatures (envelope.signature and runtime_signature) MUST use the
Ed25519 signature scheme as specified in <xref target="RFC8032"/>. The signature
value MUST be exactly 64 bytes, encoded as 128 lower-case hexadecimal
characters in the JSON representation.</t>
        <t>The signed bytes are always the UTF-8 representation of an RFC 8785
canonical JSON string, computed over the field selection rules
specified in the appropriate section above (Section 5.2 for envelopes,
Section 6.6 for the artifact header).</t>
      </section>
      <section anchor="hashing-sha-256">
        <name>Hashing: SHA-256</name>
        <t>All hashes MUST be computed using SHA-256 as specified in
<xref target="FIPS180-4"/>. Hashes appear in JSON as 64 lower-case hexadecimal
characters representing the 32-byte digest.</t>
      </section>
      <section anchor="canonicalization-rfc-8785-jcs">
        <name>Canonicalization: RFC 8785 (JCS)</name>
        <t>All canonical JSON forms MUST be computed using JSON Canonicalization
Scheme <xref target="RFC8785"/>. The key properties this provides:</t>
        <ul spacing="normal">
          <li>
            <t>Object members are emitted in lexicographic order of UTF-16 code
units of the member name.</t>
          </li>
          <li>
            <t>Whitespace is eliminated outside string values.</t>
          </li>
          <li>
            <t>Number serialization follows ECMAScript ToString semantics with
specific normalization rules.</t>
          </li>
          <li>
            <t>String escaping is normalized.</t>
          </li>
        </ul>
        <t>This makes the byte representation of a JSON value a function only of
the value's structural content, not of the encoding choices of the
producer.</t>
      </section>
      <section anchor="key-format">
        <name>Key format</name>
        <t>For key import and export, this specification uses JSON Web Key (JWK)
<xref target="RFC7517"/> format with the OKP key type and the Ed25519 curve.</t>
        <t>A public key JWK has the form:</t>
        <artwork><![CDATA[
{ "kty": "OKP", "crv": "Ed25519", "x": "<base64url 32-byte public>" }
]]></artwork>
        <t>A private key JWK additionally includes a "d" member encoding the
32-byte private key seed:</t>
        <artwork><![CDATA[
{ "kty": "OKP", "crv": "Ed25519",
  "x": "<base64url public>", "d": "<base64url private seed>" }
]]></artwork>
        <t>Internally to a runtime or verifier implementation, keys MAY be held
as raw octet sequences. JWK is the on-the-wire form when keys are
exchanged.</t>
      </section>
      <section anchor="key-identifier-keyid">
        <name>Key identifier (key_id)</name>
        <t>The key_id field carried in the artifact's runtime object is computed
as:</t>
        <artwork><![CDATA[
key_id = base64url(SHA-256(raw_public_key_bytes))
]]></artwork>
        <t>where raw_public_key_bytes is the 32-byte Ed25519 public key in the
form defined by <xref target="RFC8032"/> Section 5.1.5. The base64url encoding
follows <xref target="RFC4648"/> Section 5 (URL-safe, padding stripped).</t>
        <t>The key_id is a stable, content-addressed identifier for the key. Two
artifacts produced under the same key will carry the same key_id. A
verifier obtains the public key out-of-band (from a key directory, a
TOFU pin, a CA-issued certificate, or any other channel appropriate
to the deployment) and confirms that the public key's key_id matches
the value embedded in the artifact.</t>
        <t>This document does not specify how public keys are distributed. The
key_id is the index into whatever distribution mechanism is in use.</t>
      </section>
      <section anchor="artifact-header-canonicalization">
        <name>Artifact header canonicalization</name>
        <t>The artifact header object -- what runtime_signature signs over -- is
a derived object containing the following members of the artifact:</t>
        <artwork><![CDATA[
header = canonicalize({ artifact_version, run_id, envelope_hash,
                        log_head_hash, runtime })
]]></artwork>
        <t>In rer-artifact/0.2 the header additionally includes the
manifest_hash member, carrying its value at signing time (null when
the artifact is not bound to a bundle, or the bundle_hash when it
is). This is the only signature-domain difference between the two
versions (Section 8.1). In rer-artifact/0.1 the member is absent
from the header, matching its absence from the artifact.</t>
        <t>The envelope object and the events array are not signed directly by
the runtime_signature; they are covered indirectly through
envelope_hash and log_head_hash, which a verifier independently
recomputes from the envelope and event bytes before checking the
signature (the "recompute, don't trust" rule in Section 7.1).</t>
        <t>The fields covered by the runtime_signature are therefore:</t>
        <ul spacing="normal">
          <li>
            <t>artifact_version</t>
          </li>
          <li>
            <t>run_id</t>
          </li>
          <li>
            <t>envelope_hash (binding the entire signed envelope)</t>
          </li>
          <li>
            <t>log_head_hash (binding the entire ordered event array)</t>
          </li>
          <li>
            <t>runtime (entire object)</t>
          </li>
          <li>
            <t>manifest_hash (rer-artifact/0.2 only; value or null)</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="verification-algorithm">
      <name>Verification algorithm</name>
      <t>A verifier MUST perform seven checks. Failure of any check MUST cause
the verification to return failure. A conforming verifier MUST NOT
short-circuit: all seven checks MUST be evaluated regardless of
earlier failures, and the verifier's output MUST include the per-check
result so consumers can distinguish, for example, a signature failure
from a chain failure.</t>
      <t>The no-short-circuit rule exists because verifier output is consumed
by downstream audit pipelines that benefit from a complete check
matrix, not a single pass/fail. The performance cost of running all
checks on an already-failing artifact is negligible compared to the
diagnostic value.</t>
      <section anchor="the-seven-checks">
        <name>The seven checks</name>
        <t><strong>Check 1 -- schema validation.</strong> The artifact, viewed as a JSON object,
MUST conform to the rer-artifact/0.1 or rer-artifact/0.2 JSON Schema.
The envelope and every event MUST conform to their corresponding
versioned schemas. Type errors, missing required fields, and
unexpected field types cause this check to fail.</t>
        <t><strong>Check 2 -- envelope hash.</strong> Recompute envelope_hash by:</t>
        <ol spacing="normal" type="1"><li>
            <t>Taking the artifact's envelope object,</t>
          </li>
          <li>
            <t>Removing the signature field,</t>
          </li>
          <li>
            <t>RFC 8785 canonicalizing the remainder,</t>
          </li>
          <li>
            <t>SHA-256 over the UTF-8 bytes of the canonical string.</t>
          </li>
        </ol>
        <t>The recomputed hash MUST equal the artifact's envelope_hash field,
compared using a constant-time hex-string equality.</t>
        <t><strong>Check 3 -- envelope signature.</strong> Verify the Ed25519 signature
artifact.envelope.signature against the public key (identified by
runtime.key_id and supplied to the verifier out-of-band) over the same
signable bytes computed in check 2.</t>
        <t><strong>Check 4 -- event chain hash.</strong> For each event at index i:</t>
        <ul spacing="normal">
          <li>
            <t>Recompute event_hash as SHA-256 over the canonical form of the
event-header subset specified in Section 4.1, which includes the
event's payload_hash field as carried. Verify it equals the
event's event_hash field.</t>
          </li>
          <li>
            <t>For i &gt; 0, verify events[i].parent_event_hash equals
events[i-1].event_hash.</t>
          </li>
          <li>
            <t>For i == 0, verify events[0].parent_event_hash is null.</t>
          </li>
        </ul>
        <t>Payload bytes themselves are not examined in this check; payload
integrity is established by check 7. For redacted events the
producer-stated payload_hash is bound through the event_hash
recomputation here and is never recomputed (the payload bytes are no
longer present).</t>
        <t>Any deviation fails this check.</t>
        <t><strong>Check 5 -- artifact header hash (log_head_hash).</strong> Verify that the
final event's event_hash equals the artifact's log_head_hash. An empty
events array fails this check.</t>
        <t><strong>Check 6 -- artifact header signature.</strong> Verify the Ed25519
runtime_signature against the public key, over the canonical form of
the artifact header as specified in Section 6.6.</t>
        <t>Important: in check 6 the verifier MUST use the freshly recomputed
envelope_hash from check 2 and the freshly recomputed log_head_hash
from check 5 -- not the values as carried in the artifact header. If
the artifact carries inconsistent values (a tampering attack that
changes envelope_hash but not envelope), the verifier independently
arrives at the correct hashes from the underlying envelope and event
bytes, then verifies the signature over those values. This is the
"recompute, don't trust" rule.</t>
        <t><strong>Check 7 -- payload hashes.</strong> For each non-redacted event, recompute
payload_hash as SHA-256 over canonicalize(payload) and confirm it
matches the event's payload_hash. For redacted events this check
trivially passes (the payload bytes are not present, so there is
nothing for the verifier to recompute -- the bound exists through the
event_hash check in step 4, which covered the producer-stated
payload_hash).</t>
      </section>
      <section anchor="result-structure">
        <name>Result structure</name>
        <t>A verifier conformant with this document MUST return a result
structure containing:</t>
        <ul spacing="normal">
          <li>
            <t>A boolean overall pass.</t>
          </li>
          <li>
            <t>A per-check boolean matrix containing exactly seven booleans, one
per check above.</t>
          </li>
          <li>
            <t>A list of human-readable reason strings describing every check
that failed.</t>
          </li>
        </ul>
        <t>The pass value MUST be true if and only if every check passed.</t>
      </section>
      <section anchor="safe-parsing">
        <name>Safe parsing</name>
        <t>Implementations MAY expose a "safe" verification entry point that
accepts arbitrary input (raw JSON string, untyped object, or any
other value) and never throws. Such an entry point applies, in order:</t>
        <ol spacing="normal" type="1"><li>
            <t>JSON parsing (failures are surfaced as schema_valid = false).</t>
          </li>
          <li>
            <t>Structural type guarding (non-object inputs fail schema_valid).</t>
          </li>
          <li>
            <t>JSON Schema validation (failures fail schema_valid).</t>
          </li>
          <li>
            <t>The full seven-check verification.</t>
          </li>
        </ol>
        <t>This is the recommended interface for verifiers that receive
artifacts from untrusted sources. A separate "strict" entry point
MAY throw on schema failure, suited for use by code that has already
validated the input.</t>
      </section>
    </section>
    <section anchor="version-02-additions">
      <name>Version 0.2 additions</name>
      <t>Version 0.2 extends 0.1 in four areas while preserving the
verification semantics of 0.1.</t>
      <section anchor="manifesthash">
        <name>manifest_hash</name>
        <t>The artifact header gains a manifest_hash field. Its value is JSON
null when the artifact is distributed standalone (without a bundle),
and equals the bundle's bundle_hash (Section 9) when distributed in a
bundle. The field MUST NOT appear in rer-artifact/0.1 artifacts.</t>
        <t>The field is included in runtime_signature coverage (Section 6.6),
carrying null when the artifact is standalone and the bundle_hash
when bundled. This inclusion is the only signature-domain difference
between 0.1 and 0.2.</t>
      </section>
      <section anchor="requiredapprovals">
        <name>required_approvals</name>
        <t>The envelope gains an optional required_approvals array. Each
ApprovalRule is a JSON object:</t>
        <artwork><![CDATA[
{
  "action":         "<action identifier>",
  "tool_pattern":   "<glob>" | absent,
  "model_pattern":  "<glob>" | absent,
  "signer_types":   ["<signer-type>", ...] | absent
}
]]></artwork>
        <t>When a run executes an action that matches an ApprovalRule, the
runtime MUST have received a valid approval token (mechanism out of
scope for this document; signing of approvals is reserved for a
future v0.3) before the action's policy event records an "allow"
decision.</t>
      </section>
      <section anchor="requiredsignertypes">
        <name>required_signer_types</name>
        <t>The envelope gains an optional required_signer_types array. Each
identifier MUST be one of "human", "delegate", or "automated"
(enforced by schema validation in check 1). The operational
semantics are deployment-specific -- the field is a contract between
the runtime and the operator's approval policy. Beyond schema
validation, verifiers do not interpret the field; it is part of the
signed envelope so its presence and content are tamper-evident.</t>
      </section>
      <section anchor="step-identity">
        <name>Step identity</name>
        <t>Events gain optional step_id, tool_call_id, and approval_id fields
inside their payloads. These are correlation identifiers for tracing
related events (a model.called and its paired model.returned; an
approval and the action it authorized). The fields are part of the
event payload, not the event header -- they affect payload_hash but
not event_hash directly. They are opaque to the verifier.</t>
      </section>
    </section>
    <section anchor="bundle-format-v02-only">
      <name>Bundle format (v0.2 only)</name>
      <t>A bundle is a portable distribution form for an artifact, a manifest,
the public key, and any blobs referenced by rer.artifact.written
events. Bundles are the recommended distribution form when artifacts
reference out-of-band payloads.</t>
      <section anchor="manifest-structure">
        <name>Manifest structure</name>
        <t>A manifest is a JSON object:</t>
        <artwork><![CDATA[
{
  "artifact_hash":        "<hex SHA-256 over artifact content>",
  "runtime_key_hash":     "<hex SHA-256 over raw public key>",
  "total_event_count":    <integer>,
  "redacted_event_count": <integer>,
  "blobs": [
    {
      "name":       "<filename or label>",
      "hash":       "<hex SHA-256 over blob bytes>",
      "size_bytes": <integer>
    },
    ...
  ],
  "bundle_hash":          "<hex SHA-256 over manifest minus bundle_hash>"
}
]]></artwork>
        <section anchor="artifacthash-manifest-field">
          <name>artifact_hash (manifest field)</name>
          <t>The manifest's artifact_hash is SHA-256 over the canonical form of
the artifact with manifest_hash and runtime_signature removed:</t>
          <artwork><![CDATA[
content_fields = artifact \ { manifest_hash, runtime_signature }
artifact_hash  = SHA-256(canonicalize(content_fields))
]]></artwork>
          <t>These two fields are excluded because manifest_hash is computed
downstream of the manifest (would-be circular) and runtime_signature
is downstream of the artifact content hash. Excluding them breaks the
circular dependency while preserving binding (the bundle_hash, which
references artifact_hash, is itself referenced by the artifact's
manifest_hash -- closing the binding from the other direction).</t>
        </section>
        <section anchor="bundlehash-manifest-field">
          <name>bundle_hash (manifest field)</name>
          <t>The manifest's bundle_hash is SHA-256 over the manifest with
bundle_hash itself removed:</t>
          <artwork><![CDATA[
self_minus_hash = manifest \ { bundle_hash }
bundle_hash     = SHA-256(canonicalize(self_minus_hash))
]]></artwork>
          <t>The bundle_hash is then referenced by the artifact's manifest_hash
field. Together this creates a closed binding: artifact carries
bundle_hash, bundle_hash is over manifest, manifest carries
artifact_hash which is over the rest of the artifact.</t>
        </section>
      </section>
      <section anchor="ten-check-bundle-verification">
        <name>Ten-check bundle verification</name>
        <t>When verifying a bundle, a conformant verifier MUST perform ten
checks (the seven artifact checks plus three bundle-specific checks).
As with single-artifact verification, no short-circuiting is
permitted: all ten checks MUST be evaluated.</t>
        <t>The ten checks are:</t>
        <t><strong>Bundle check 1 -- artifact verification.</strong> Run the full seven-check
artifact verification (Section 7) on the artifact carried in the
bundle. This check passes only if all seven artifact checks passed.</t>
        <t><strong>Bundle check 2 -- manifest self-integrity.</strong> Recompute bundle_hash
over the manifest with bundle_hash removed and confirm it matches
the manifest's bundle_hash field.</t>
        <t><strong>Bundle check 3 -- artifact content hash.</strong> Recompute the manifest's
artifact_hash by canonicalizing the artifact with manifest_hash and
runtime_signature removed, and SHA-256 over the canonical bytes.
Confirm it matches the manifest's artifact_hash.</t>
        <t><strong>Bundle check 4 -- manifest binding.</strong> Confirm
artifact.manifest_hash equals manifest.bundle_hash. This closes the
binding from artifact to manifest.</t>
        <t><strong>Bundle check 5 -- key integrity.</strong> Confirm SHA-256 over the supplied
raw public key bytes equals manifest.runtime_key_hash.</t>
        <t><strong>Bundle check 6 -- blob integrity.</strong> For each entry in manifest.blobs,
confirm that the supplied blob with that hash exists and that its
SHA-256 matches.</t>
        <t><strong>Bundle check 7 -- blob completeness.</strong> For every event in the
artifact with event_type rer.artifact.written, confirm the payload's
artifact_hash references a blob present in manifest.blobs.</t>
        <t><strong>Bundle check 8 -- event count.</strong> Confirm manifest.total_event_count
equals events.length.</t>
        <t><strong>Bundle check 9 -- redacted count.</strong> Confirm
manifest.redacted_event_count equals the number of events with
payload_redacted = true.</t>
        <t><strong>Bundle check 10 -- blob metadata.</strong> For each manifest blob, confirm
its size_bytes equals the supplied blob's byte length.</t>
        <t>A conforming verifier MUST return a ten-boolean per-check matrix and
a list of human-readable reasons for each failed check.</t>
      </section>
      <section anchor="export-form">
        <name>Export form</name>
        <t>A bundle is distributed as a directory or a tar/zip-equivalent
package containing:</t>
        <ul spacing="normal">
          <li>
            <t>artifact.json -- the RER artifact.</t>
          </li>
          <li>
            <t>manifest.json -- the manifest above.</t>
          </li>
          <li>
            <t>key.bin -- the 32-byte raw Ed25519 public key (or key.jwk -- a JWK
public key file).</t>
          </li>
          <li>
            <t><tt>blobs/&lt;hash&gt;.bin</tt> -- one file per manifest.blobs entry, named by its
hex hash.</t>
          </li>
        </ul>
        <t>The exact filesystem layout is informational; verifier interfaces
typically accept the four components as parameters rather than
prescribing a directory shape.</t>
      </section>
    </section>
    <section anchor="operational-considerations">
      <name>Operational considerations</name>
      <section anchor="empty-and-minimal-artifacts">
        <name>Empty and minimal artifacts</name>
        <t>The smallest valid artifact contains exactly two events
(rer.run.started and rer.run.ended). An events array of length zero
MUST fail verification (check 5 cannot pass) and is not a permitted
shape. Implementations producing very short runs SHOULD still emit
both lifecycle events.</t>
      </section>
      <section anchor="time">
        <name>Time</name>
        <t>Timestamps are RFC 3339 with fractional-second precision and "Z"
timezone. Producers SHOULD use a monotonically non-decreasing
timestamp source across consecutive events. Verifiers MUST NOT use
timestamp values to gate verification; the hash chain is the
authoritative ordering primitive.</t>
      </section>
      <section anchor="redaction">
        <name>Redaction</name>
        <t>Setting payload_redacted = true and omitting the payload removes the
payload bytes from the artifact while preserving the hash binding.
This is the supported redaction primitive. Operators MUST NOT remove
events from the chain to redact -- that breaks check 4. The supported
operation is "this event happened, here is its hash chain, the
payload bytes have been withheld."</t>
        <t>A consequence is that redacted events are partially opaque: the
verifier confirms structural integrity but cannot recompute the
payload contents. Whether to trust the producer-stated payload_hash
in a redacted event is a deployment policy question -- for high-trust
deployments where the producer is the operator, this is acceptable;
for low-trust deployments, non-redacted events are required.</t>
      </section>
      <section anchor="key-rotation">
        <name>Key rotation</name>
        <t>Key rotation is supported by reference: each artifact embeds its
runtime.key_id, and a verifier obtains the public key by looking up
that key_id. When a runtime rotates keys, the new key gets a new
key_id (because key_id is content-addressed), and the operator
publishes the new key in whatever directory the verifier consults.
Old artifacts continue to verify against their original key_id;
their public key remains discoverable so long as the directory
retains it.</t>
        <t>This specification does not define a key directory format. Several
plausible options exist (a JWKS endpoint, a CT-like log, a TOFU
pinning model). The choice is deployment-specific.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <section anchor="what-the-format-establishes">
        <name>What the format establishes</name>
        <t>A successful verification establishes, with cryptographic strength:</t>
        <ul spacing="normal">
          <li>
            <t>The events have not been reordered, inserted, or removed since the
artifact was sealed.</t>
          </li>
          <li>
            <t>The envelope has not been substituted for a different envelope
since the artifact was sealed.</t>
          </li>
          <li>
            <t>The runtime that signed the artifact had access to the private key
corresponding to runtime.key_id at signing time.</t>
          </li>
          <li>
            <t>Non-redacted payloads have not been modified since the event was
sealed.</t>
          </li>
        </ul>
      </section>
      <section anchor="what-the-format-does-not-establish">
        <name>What the format does not establish</name>
        <t>A successful verification does NOT establish:</t>
        <ul spacing="normal">
          <li>
            <t>That the recorded events correspond to what actually occurred at
creation time. The runtime holds the signing key; a runtime (or an
operator with access to the key) can produce a fully valid artifact
describing events that never happened, or seal a log from which
events were omitted before signing. The hash chain makes the record
tamper-evident after sealing; it does not make the record's creation
honest. Assurance about the producing runtime's integrity must come
from outside the artifact -- for example, attestation of the runtime
build, operational controls, or cross-checks against counterparty
records.</t>
          </li>
          <li>
            <t>That the policy decisions recorded in events were correct. The
verifier sees that "policy decided allow"; it does not verify that
allow was the right answer given the envelope. Policy correctness
requires re-running the policy engine against the same envelope
and inputs, which is outside the scope of verification.</t>
          </li>
          <li>
            <t>That the model or tool responses recorded in events are themselves
truthful. The model's output is part of the signed record, but the
signature attests that the runtime saw that output, not that the
output is accurate.</t>
          </li>
          <li>
            <t>That the operator is honest about which key signed which run. The
key_id is content-addressed; if the operator publishes a key under
a misleading label, the artifact still verifies against the actual
key bytes. Operator identity binding is the job of the key
directory.</t>
          </li>
        </ul>
      </section>
      <section anchor="trust-boundary-in-the-implementation">
        <name>Trust boundary in the implementation</name>
        <t>The reference implementation enforces, as a build-time rule, that
the verifier package does not import or depend on the runtime
package. The verifier's dependencies are limited to:</t>
        <ul spacing="normal">
          <li>
            <t>RFC 8785 canonicalization.</t>
          </li>
          <li>
            <t>Node.js SubtleCrypto (or equivalent) for SHA-256 and Ed25519
verification.</t>
          </li>
          <li>
            <t>A JSON Schema validator (e.g., Ajv).</t>
          </li>
        </ul>
        <t>This constraint is the technical realization of the trust boundary.
A third party can install the verifier and check any artifact without
the operator's runtime code being present in the verification path.</t>
      </section>
      <section anchor="redaction-and-verifiability">
        <name>Redaction and verifiability</name>
        <t>Redaction trades transparency for verifiability of the chain. The
chain still proves the event happened; it no longer proves what the
event contained. Operators redacting sensitive payloads SHOULD
clearly publish their redaction policy so verifiers can evaluate
whether they accept redacted-payload artifacts as sufficient for
their use case.</t>
      </section>
      <section anchor="replay-and-uniqueness">
        <name>Replay and uniqueness</name>
        <t>The artifact format does not include a nonce or anti-replay
mechanism. run_id is implementation-defined and the verifier treats
it as opaque. Deployments needing replay protection (e.g., billing,
non-repudiation against duplicate-claim attacks) SHOULD layer a
deduplication index over run_id at the audit pipeline level.</t>
      </section>
      <section anchor="algorithm-agility">
        <name>Algorithm agility</name>
        <t>Algorithm agility is not provided at the field level. Ed25519 and
SHA-256 are the only primitives. A future revision of this document
(rer-artifact/0.3 or later) MAY define alternative primitives in a
new envelope version. Verifiers MUST reject artifacts whose version
identifiers they do not recognize.</t>
        <t>This decision trades flexibility for security predictability. The
artifact format is small; supporting algorithm negotiation in a
small format adds substantial complexity for limited benefit.
Versioning the entire envelope is the upgrade path.</t>
      </section>
      <section anchor="side-channels">
        <name>Side channels</name>
        <t>Constant-time comparisons MUST be used for all signature and hash
equality checks in the verifier. The reference implementation uses
the host platform's constant-time comparison primitive (Node.js
crypto.timingSafeEqual) for hex-encoded hash and signature
comparisons. Implementations on other platforms MUST use the
equivalent primitive.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA considerations</name>
      <t>This document does not request a new IANA registration. The related
well-known URI registrations on which this work depends have been
filed and are under review at the IANA Well-Known URIs registry
<xref target="IANA-WK"/>:</t>
      <ul spacing="normal">
        <li>
          <t>agents.txt and agents.json -- filed, under review
(well-known-uris filings #72 and #73)</t>
        </li>
        <li>
          <t>ai.txt and ai.json -- filed, under review (#76 and #77)</t>
        </li>
        <li>
          <t>connect.txt, connect.json, connect-ledger.json -- filed, under
review (#81, #82, #85)</t>
        </li>
        <li>
          <t>verify.txt and verify.json -- filed, under review (#83 and #84)</t>
        </li>
      </ul>
      <t>These declarations cover the declaration-side surface (what an agent
is permitted to do, what training policies apply, how to connect,
what physical claims are verifiable). RER artifacts cover the
proof-side surface (what an agent actually did).</t>
      <t>A future revision of this document MAY register a media type for RER
artifacts (provisional candidate:
"application/vnd.rer.artifact+json"). A media type registration is
not requested at this time because operational deployments have not
yet generated the practice from which a stable registration request
should be derived.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="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="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="FIPS180-4" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf">
          <front>
            <title>Secure Hash Standard (SHS)</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="AGENTSTXT" target="https://datatracker.ietf.org/doc/draft-car-agents-txt-wellknown/">
          <front>
            <title>AGENTS.TXT: Capability Declarations for Web Agents</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-car-agents-txt-wellknown-00"/>
        </reference>
        <reference anchor="AITXT" target="https://datatracker.ietf.org/doc/draft-car-ai-txt-wellknown/">
          <front>
            <title>AI.TXT: Training Policy, Licensing, and Attribution Declarations for AI Systems</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-car-ai-txt-wellknown-00"/>
        </reference>
        <reference anchor="CONNECTTXT" target="https://github.com/kaylacar/connect-txt">
          <front>
            <title>CONNECT.TXT: Agent Connection Declarations</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="VERIFYTXT" target="https://github.com/kaylacar/verify-txt">
          <front>
            <title>VERIFY.TXT: Physical Verification Declaration Standard</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="W3C-VC" target="https://www.w3.org/TR/vc-data-model/">
          <front>
            <title>Verifiable Credentials Data Model</title>
            <author>
              <organization/>
            </author>
            <date year="2022" month="March"/>
          </front>
        </reference>
        <reference anchor="IANA-WK" target="https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml">
          <front>
            <title>Well-Known URIs</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 1093?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The RER artifact format was designed and developed by the author at
Tech Enrichment as part of a broader stack covering both declaration
and proof for AI agent interactions. The companion declaration
specifications appear in <xref target="AGENTSTXT"/>, <xref target="AITXT"/>, <xref target="CONNECTTXT"/>,
and <xref target="VERIFYTXT"/>.</t>
      <t>The trust-boundary discipline -- verify never imports runtime -- was
informed by long-standing practice in cryptographic software
engineering, where verification surfaces are isolated from key
material and execution surfaces. The seven-check structure with no
short-circuit, and the ten-check structure for bundles, reflects the
discipline that a verifier's value comes from telling the consumer
exactly which property failed, not from reaching a single pass/fail
decision quickly.</t>
    </section>
    <section anchor="worked-example-a-minimal-run">
      <name>Worked example: a minimal run</name>
      <t>The following non-normative example shows the smallest
verifiable artifact: a run with two lifecycle events
(rer.run.started, rer.run.ended), no model or tool calls, no redacted
events. All hash and signature values are placeholders represented as
"&lt;hex...&gt;".</t>
      <sourcecode type="json"><![CDATA[
{
  "artifact_version": "rer-artifact/0.2",
  "run_id": "01HX9C3MPN5K8VYE0G2DZ1Q7HA",
  "envelope_hash": "<hex64>",
  "log_head_hash": "<hex64>",
  "manifest_hash": null,
  "runtime": {
    "implementation": "@rer/runtime",
    "version": "0.2.0",
    "key_id": "<base64url 43 chars>",
    "algorithm": "Ed25519"
  },
  "runtime_signature": "<hex128>",
  "envelope": {
    "envelope_version": "rer-envelope/0.2",
    "permissions": {
      "allowed_models": ["claude-sonnet-4-5"],
      "allowed_tools": []
    },
    "limits": { "max_steps": 4 },
    "expiry": "2026-05-13T14:00:00.000Z",
    "signature": "<hex128>"
  },
  "events": [
    {
      "event_version": "rer-event/0.2",
      "step_index": 0,
      "event_type": "rer.run.started",
      "parent_event_hash": null,
      "timestamp": "2026-05-13T12:34:56.789Z",
      "payload": { "envelope_hash": "<hex64>",
                   "runtime_version": "0.2.0" },
      "payload_redacted": false,
      "payload_hash": "<hex64>",
      "event_hash": "<hex64>"
    },
    {
      "event_version": "rer-event/0.2",
      "step_index": 1,
      "event_type": "rer.run.ended",
      "parent_event_hash": "<hex64 -- events[0].event_hash>",
      "timestamp": "2026-05-13T12:34:57.123Z",
      "payload": { "status": "completed",
                   "reason": "no work requested",
                   "total_model_calls": 0,
                   "total_tool_calls": 0,
                   "total_spend_usd": 0 },
      "payload_redacted": false,
      "payload_hash": "<hex64>",
      "event_hash": "<hex64>"
    }
  ]
}
]]></sourcecode>
      <t>A verifier running the seven checks against this artifact, given the
correct public key, will recompute envelope_hash from the canonical
envelope-minus-signature bytes, verify the envelope signature, walk
the chain (parent_event_hash, event_hash, payload_hash for each
event), confirm the second event's event_hash equals log_head_hash,
verify runtime_signature over the artifact header, and confirm
payload hashes for both events. Every check resolves to a boolean;
the overall pass requires all seven booleans to be true.</t>
    </section>
    <section anchor="worked-example-tampering">
      <name>Worked example: tampering</name>
      <t>The following non-normative example shows two equivalence-class
attacks the seven checks catch.</t>
      <t><strong>Attack A -- event removal.</strong> Remove events[1] from the example
above. Effects:</t>
      <ul spacing="normal">
        <li>
          <t>Check 4 (chain) still passes -- events[0] alone has no parent
inconsistency.</t>
        </li>
        <li>
          <t>Check 5 (log_head_hash) fails -- events[0].event_hash no longer
equals the artifact's log_head_hash field.</t>
        </li>
        <li>
          <t>Check 6 (runtime_signature) fails -- the runtime signed over the
original log_head_hash, which no longer matches the recomputed
one.</t>
        </li>
      </ul>
      <t>The verifier returns pass = false with two failed checks identified.</t>
      <t><strong>Attack B -- payload swap on a non-redacted event.</strong> Modify events[0]
payload from {"envelope_hash": "X", ...} to {"envelope_hash": "Y",
...} without changing payload_hash. Effects:</t>
      <ul spacing="normal">
        <li>
          <t>Check 7 (payload hashes) -- recompute payload_hash from
canonical(new payload) and compare to events[0].payload_hash.
Mismatch. Fails.</t>
        </li>
        <li>
          <t>Check 4 (chain) -- unaffected: event_hash covers the carried
payload_hash field, which was not changed.</t>
        </li>
      </ul>
      <t>The verifier returns pass = false with one failed check identified.</t>
      <t>A check matrix that distinguishes (envelope failure | chain failure |
log-head failure | signature failure | payload failure) is more
informative for audit pipelines than a single pass/fail bit. That is
the operational rationale for the no-short-circuit rule.</t>
    </section>
    <section anchor="implementation-notes">
      <name>Implementation notes</name>
      <t>The reference implementation is available at
github.com/kaylacar/rer. It is structured as an npm monorepo with the
following packages relevant to this document:</t>
      <ul spacing="normal">
        <li>
          <t>@rer/core -- types, canonicalization, hashing, Ed25519, key
primitives.</t>
        </li>
        <li>
          <t>@rer/evidence -- the verifier (seven-check artifact verification,
ten-check bundle verification). Depends on @rer/core only.</t>
        </li>
        <li>
          <t>@rer/runtime -- the producer-side runtime. Depends on @rer/core;
not imported by @rer/evidence.</t>
        </li>
      </ul>
      <t>A standalone verifier (kaylacar/rer-verify) packages the verifier
with zero JavaScript runtime dependencies beyond Node.js's built-in
crypto and a JCS implementation. It is the operational realization
of the "anyone can check a proof without trusting the producer"
property.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA719eXPbVpbv//gUKKZqIuaRtCSvkZPUqBVl2lnsjK3E3Z2X
8gNJUEIMARwAlKx43J/9nd9Z7gJAsqdmalJdbZG8+z37dufzedIVXZkfpZOX
py/Tl7sqPW66YpOtuvS7urnMuqP0r1l7MT+5yIoqX8/SV8U5/Zu+zFd1s27T
epMeP0ufVZu8yatVnp6+y1e7rqirSZItl01+dZQ2eTPPdNBkXa+q7JLmWzfZ
ppuvsmYe/j7fP0jWWUe/H+4fPprvP5ofHCYr+uK8bm6O0qLa1EmxbY7Srtm1
3eH+/pf7h0nW5NlRerzdlgU1pbnbNKuwxKycnxWXeXJdN2/Pm3q3PaKVrvNt
Tv9Xdemr3fKyaFvqkCRv8xtqtT5K0nSOHWXn1KLlT9luXXT816q52Xb1eZNt
L4oV7WuVF1ttdEGHlK5wSPzxdH348OHBl/z39yev+N/CHZIfkQ49SdqOlvsm
K+uK9n2Tt0myLbCQrl7J5zRt66Zr8k3rPt9c+o9Jtusu6uZIZ6Fvf1ikJ1mz
Lsqypi/TVI78h+ymzOIf6uY8q4o/+dSO0rN8dZGeVk2xurik7XOL/DIryqN0
VVcd3c9bDEGXtv7Xc3y/WNWXSVIxoBRXOVbw8ruTw4ODL/XPJwePH9if+/cP
9c/HDw8e27ePnzzUPx88evAEf3737OdXB0/259yRTkHh8xUBVpMzNKavcGK0
inTv1V9fTSfczh8C/ptja9TrOW8tK+niWxpp1+UAWesvgIJtV3VZn9/ISAaA
Bw/n+09kDVlznhMqXHTdtj26d6+6Kre7ZbuoirZbnNdX9/AHvrmHxd97/uzV
2QJ/LXgfi+16kySA3eCcjv/t9PnZq7O/ncW7lK8X+J5uapsti7LobtJv81WZ
NQrcNE76Ol+mxwyjk9EV0h6yrslWb/NmUeTdZkHHcY+Q757HOwHxefeum1/n
Zfm2qq+re9EBHD7ij23eFHmL9dvpPqu6vKnybv4tRguReWzQ+f4+NvxsuNln
stGzhvCmqM7Tn2tC4ZtZ+mOxyiua8XzGF3TcdU2xZLIyPAlC1lc3bZdf/jdO
ovifPoVi7AROXjx/fnpyNjgG/V7Ogi81PamrKl8NNjy+w/Oiu9gtgYv3DD/v
rWQALGO4mV9PXz777u+DdcjXsoyfL25aoqZl+itte6N0NVyLw6FPX9MVhroZ
X9Lr+yfzX0966+Gps2WZpydNDpJdZGWbfksXmv5Ur/NyfOrr6+vF9X2+5rOX
965Wc0DA/BIdehd7ON+/T988O35+PH/9Qzz5a7q7+Q+4vPSXl89uOXlMVWRV
xpNlxErOKxDO9h5ufi5Xv2uKwefFu4vuskyS+ZzYy7IFeHZJcnZRtClB5g5j
pO02X9H28zbtLnLmzKfVVV7WW/7QEV9L94h9TFPjnelGGXaWgBvNV8aylRnN
W2Hd37968RzMi9gdaGGWAtHojAmRPItqdtUiPa4SSAVuArpE4EC6dzDlbjxc
bqtaM3AAjbHgbd4oc2Uim5TFZdG16Y5Yb5NeE/+84GY0T3qdtUq9iz+x3r1D
DB/uIc2vcCREopNVDTCiSeir5ibla6WFleWM+GVtf4JqbJmYYFkFlpFeZmta
5A6dk9zEFGm6dx8zNnqs2FjWgdksi2ptG3L7ZFaPXryohBaVXuTZmqa3HfEo
xeW2zHGTgi7dRdal26Ze71a0H27IV7DAvef+jAECuR4tyFu92ZR0BOlViIfL
m3SLHnQX1xd1ui7WaVV3CX+3KrYE33SVthq6RyJeW+CtDUNXsCWKSMR6ll4T
ptLmL4kCX2ZlYuIRnVy7a2hJBGarrKorUAOVFEgK/Ovx/PDhIwdbM4GqdnVB
8kJyRS3X3HI6owup0pxEnGVZtHLnttfP25RAf7eioyZCgxONBCzimCT3NWB/
WGO966jNDUAWg6zo4nuHWnS01Q3RZNourQDcg1oGw2hXhf11TcdHx5bKllNc
EqRKOzq6azqyuln0MZOIml6t4ObaU0XCMVqWMMEFETreVVbgz8TTAFAULHtb
tyBoe8uarmBTlAB+QRASnIv8OqXdYQIQqKRHkKjJOQkdzc10EZHlNrsBUGSY
WhbC+MXo2HX5OiEwXdfA7TTC7UYFeu4awnFGvYi90jboogi5boi6bOnA8vUi
BeR217VBCh1HTfTxgjbAaMrjLHMC43xOBzHP+HJAc6pEloa7AfGjleOYaSg6
Q+o1vy4I/QScALNKRxoc9oYpAk2Sx7rFvf3FAZOa3peHCzAxJgH0Ic3WEPvS
JR00ET2hmTMiDlWxoX0ays8Svrkt3RJB85z+IWmcyMtl3mXgJyBh1H3b5CQX
XBmNiJC0pbXTEa7ahHZMa1sIvb8s1jRxknwG+YFBt2MN5IwhaVvWNwxkolgJ
JAmcd9nbPJWzSmkcEDqel6heO6OTvKrfCmmDVEIIxQujS5kpwHbcusmqVgZp
MQoRs5QwC2SYUZM1k0sSiOk82ks6qCsS85kFE9wIAzcQqVuDdAcaoESL9Mf6
vE0cVhKtMkySGyS5JG9b4hTUnhFOGpHE0hJ+Na2gKUYn0toeJSEupgT+gnT0
G6M3kZC6YUImqL3WE9qqKIlrBBUgBY/hlRZQAO1D0kP6Y0tdQG4zalwQcQAp
vcGel3lZEKEHyNoiPseGV/VObsmhGUhtkrwCXwI5W/9BGAE+brhBgEfQ0vLQ
uklaCZ0Tne7lIn3/3qkEHz4knvvHuFwEqJwyKoNugRl3OYCAZrnKiIEvEhrv
GY8VShIqaM+VN+JwSpO1QzrWLtK/gCjRfSXh10aRlrR7Ev5untJtFozwxLRW
JKTbgo1GQB9lkmgYL6d0l6jjSNJFVm6MZm8L3FU+FG4ilsEwqMzTSzikV6eO
4TMQJCG7NUCgPm0tqJZ5PsnskcClyUs5gotiq6zeAUTM42bGs2c82FGSHAil
ZHmhNfbCckNGkAUWtMzziqagBROA0q6a/JIIKP1Bg5OIg6WQpHCo44xLXHSy
n7eR3AXkdqO3pJ6KBkwj3ZeRjMYPhRN3QI78q3izZ7PPIBHTJuYQfqYE1YUe
Fp2FSgVeklokDxbpa8a+LakDdbYWWsD0s+oYeYuGrQwACFs4yNA57qWATIoj
h0Xiypga2Dx2k3z2GemQYN0Gl0dGqyqgI2SxGkin+02SYxWymOowVnR0rEQA
ZP9NvTtngUNoignFPZGuaJPOuGVfrtItMOklRjHnY6bLpBXI34GcRdS/u+Uy
WncRrdyYm0f6Ex2pSoxAUDZnnv7dSQqbCpETta4QAejLb72NLNDVRDoRb3s7
pVNiRolzxxW/f++MNB8+LGTmwZ3H3PDuEeleZcH79w91RJEoX6kIIBIlC2PH
EYmG/HudMZOk077IV28Je+n0CO+J9HREEfSMwltagNvegHgCyrTdjBdVnNPS
Z3pVkRz4uYMfXAVdfgA7hdHpsqyv26EsQGC+KzvhJyRDZCDCm11JsqkzR5ZO
Pg0mJAlR0Acg/rJHgmomvK3ZspKElOj0FqX5/XvRsAkaClnfqiQWSyiTvyMx
EjSE9FhC50Xy64kKWa1X8ojOFJekqooQnmLUjoh/1hMiC98lUfrr+0QUOBYb
QQqAKbQ9LBxacUrLIB5brpMlOHa7gwTKtMjonRKLVplwtBAaYUnT4jtVWr39
ja4DWzTp39hyxaa58gZcdFXuWO+LtdDEaaEi1ptWxRpZ3l2DyjravMfwwKot
YCInEgnZVHmA/FqvVruGLmlq9/sfOxJ7RbEoifLtiJCIYEjSS3rN8vnkp19e
nU1m8m/6/AX//fL033959vL0W/xNePzjj+4PaZHQhxe//Ki/4y/f8+TFTz+d
Pv9WOtO3ae+rn47/PmExKpm8+Pns2Yvnxz9OhIeFLBw3KNDNIj3RdVYZWicX
QBJI/nLyc3rwQFAdVmKCRkH7g8dESAiFclXIGWPlYwdMhTSRNSzflGWyyrYF
YSxJtmACF1CJwFpwiukZ+J9Yc0ESv/iCcPaLL46gA4uZw8Ghwk1k9ijregt9
Gbi/JAWrgrEd6xCo17uljTOjwY4L0fGYFkvDtOMlkAwoBoI03Wt3K8i8s3RD
0rTRl2VZr95OMZigCjgZFmzT2KoZAQMhzIlEntPPUjGvyD2lZvpQXSa2urCd
gzHVmVx0Xqw2OipFYW9KgOQLuW495wsCuQDpt302ufJzkIHQMpNFtpm+ZYZP
I6P+Jalgq5sVlA2oKYUxJ10b5sP6gBAqKREK/seOb44ORXHLyTFi65ENL2j4
04y2LyOJJopdbYqm9ZYtQXg74eLyMl8XWUdUgUYt6iZR6YPOgf99g9YzViJl
Joh9BKfeGyTLN7okpxsYEogdiuU7tDCJKuO2bJc6YqASUkrnXEDpWPorY7se
bxvTq667dwX9Fzc35YVUnl5uyx0Jpri3tq1X2PLaq8Q6fcUARcIVIHfp5Tgn
H7Ea1zPwyJ2QNsFLADaZgOQEGxEpoCWwpZbVMIhrvJ81bBxq+5fNuGX1t+PP
1XQOU/JZoiLRnObKCQZoEdjBrL/WQPq8mEU2EJBf+ZatVFD9sBUCQTr4dbpp
6stoMLkXt9KCzzYnbUaxGaNgPEM9nceAu6033TUo6pgNUeiX6kpAZUV5ExiH
67BdXNTlWn7HMgB1UIp5ASYYDVawh8uAoDUV4UoEhXgCmt2JpX6O7Y60oRUf
nergHtxwaUytj2PbNQl3YxIFS4J2uzRlz0wU2ocStQ+NmIb26Jr+zCvmw/1f
D92vppy26n6JdVOeT9a6SF9pkwe9Rt4uLGTFKcHx1Vj3h/3uSgYWibV41GsR
+6GJMhHtJ0Bs/ZiPfQ/WLVqsaS7icSSYZuU58YDu4tL3fRLPlpCAVIjyzxZ0
4gZX3pzmu33ZW2RkYEsCZBVhRwX7giVUgE6Lg29y6pFdFiVGISLW9lupJMDq
jh3UG12P3Ll9y3cOMT7+7hAAL8Q77oavoj76BXewW4v7ROCl3SLDI8Pz0EZp
wM0inDIBEXkGGzB7pl8e6fFzNdYy8x1A8ujwydjwhw4V3Gbj4X8q3uXrue45
8RSbzXhsORdjLIbh2ZbgQH8QRDi1vN7OSxq99GaWocNDMbxeoqewA2bNNSRn
UBy6eSIrdOn//Oc/k/dEbyb9C5kcpZP+SUxgopgQ9XtTrOl3/9/kq5iwzm0f
LBk5WPtGBnBgBoot40y+usjfOY2ZTd1Ox3Zgqd2JDryBieTW7qSrlBkUsYFk
oSMYHwlGqHYkSenuQNvp2/fsoZzEO8OxfGX0H1EgMiS18+fmDsXaGXqD81bn
rgdR8vggJ18tszZ/9GDXlP4sNgHhd10dlbHeE7UWwK36IdzIGyfb8NJxTkPD
Ah84znRwR+E1fyWhSuY1/UYasjwSQUP621en+PabWer+WCwWvycfGNwIij9L
vwMABhb9pA9/8MWKDjY9SpSH9mnXIsCRTyIeArq9oVk5me+qggTfaHCJ12Jh
YxS6n6oBLSCm1LbeZhhIrXuOjwOjC1GQif23jM4RIvRW9SOpuM18RfBAF/Mu
g2h/mZUxirAf2+xTHl8Y98EmaG0qeNtM8BDi1iEJLm8g9Oy1xCE854SsaAKN
awVNZFfmYDQR8n3akq+yks6D1Ar6W0/FY6QtcAP9zrQBU5BU/yCen92wtbNy
Jl/C6sttF0vHDA00BnTCmClHm3yMfUQkIJR8sZGfRenCMm5lBq0uqItJL4RY
k7ChTbEtCYFoIv/KWRjU8kWB8vixoBeEnutgrJ4QPhhQT5jHkCZ02/KH7tJJ
FtNF+oykDiCKHD6Q0VaVLVvRPgHVDVS1PUAtU0iBXzmeOfjKHF9PQXLxh5hx
uD+b4vk0NqzNdEOjab3rVvVl3po427Bj0/dAWJ4jUev6krhuK5ZCxknWLTgW
TTDbIjhC1K6MB6rVxAVTsHCPT4EFsq8eAJT4ZJijbkiUmgOrQnzfA74QrKPf
LJ38K4HLPeMg03RHaM5hh3yPNNsOHnv93dufmdzJTGpLwi044ijaQMBApKNw
j97dsZxoPIQkEzj112YLRjzghw8hZ2GNJ7tO7x/OgeeOM3iOY/qIYzgjE5ZF
xx46WZ1nRf5aPBP6NJIx4FCz9ODwCZrACAD/Nh0I2A9snIwcjh56Msh3pZv0
LjBmch4VHk0DOjzGc3oxOWPhNqpAriG6B7QUA6txcgCUamxhyoY1/pk3tbim
mtyp+OFoD8QuBJpnVFIJo1zFgOaxNsjc16mCgblmhMB+ityYDOXGSPJ30kgk
AotE0Xb59g3M8+8CYWHfyxBvuptI3MAYC1hciIY2dLoyCvFOtPUMBD2c8MZ4
1RE2hvLIRCKfH84P7p8dHB7df3D08NHi8ZMv/2EjstkllmDeQ2BJP6T/qdQs
bPlGfOK5dNlkZZtHP3uhsi+ZmmwVLX68oZeVhqJSdOQ94PqI5pW+pjstKh+j
5t2SpZpXwcIYpNoLtkEHNArksRhapfxSDFrvLw6AV/7KByIXIem8ys/ZRcCk
/JzxF+JWtUL4ALGFy5q4jSAzMaFs1dRtq/wtlgyCeVTEasTyv1YTekb0v2pz
Z9yECfk826rL1Nz/U3ZxGGUDNVvBiaQLAmlTpwQTHhoPZu8rh692MYDjwX7X
NQcYlJ7eKbVUZnLjbJaCslDZhfgyPQcrzDtnk00xR+u0Rb4PmFjEXmAOQuAp
Ard7iARmLUZaRwsk9I/auPZiUV7kkC8y7TSwM8N2wABBp2z2abbppmKelsiR
/ph8W2yrt2GtZ9gLN6awJv3cMNx6AaCw/rhtmAXhHFLPll9Rr1+TEz+p4pnd
dxiq3eJqXS8sKZqM18gzIUCIuWvQMh6e28aj78rO9XCmq+sGAMhRSBnLRfN6
M1+yMGX4uQcL61RCz9QeL7G3uzBeIbpvuEH1tp3zJL5txOpGIk+b/nT8d4Wr
1OxUrq9AnbBAceQ3iy8SyYZot9kqX6i3lH5f5iQAFnSn5lYLowLBWBVWDZkF
bcQDS3RAgocudkT05oR9a9ZFSP7b5hbbNuAEI9x7qGcMPBB3aBxInahDp4Y0
3QvIzdfp/vROwZ7GYIHVCZLsp7zM3uYu6sp8JOreSBwTG8oNUPbu37//Zerb
MJPeaMgfB6kRadI8jMk/JtzyT9I/TJDzPVmGdi7crHwa60zDaM6oN4swEEZx
E8z40j1zZ8bnP7erTtkb4cxWQt2Iy2zZ2WSj+DiMGDRUgTarNUE2Ee4euXQa
mQ3GCpnx63Svz8HZdd/s8uks6hWJuBB+WQYYHd6UofGxWTiQwdlRMxjebJUY
lE+H5VgRL0N5AngfiLv+0P10fY6zJNqTZ9WCN8ghEm2g+sDAxiGBuGEilvkl
PMq2QjYNwLKhXmk5ZY2vdjjeqpzQFWXJP/LionVDhSIUArd3CzWh2OnjMw0z
YcU82vX/mElEdQFAsL8+vdDgMlV1XearjHS3gB9r8JE2TVK5LIlPSfeazJMt
61t04oiWTSuAxQvCAbehWpzviTZt7h2JHGr7O8wCXVoO+FJwaQATmzI7D3VP
wuiJBxjsATiGeBVa4kTcbhPaJ35ZTEyg+W9cxYhRSimxIfdcNTLROWZw+TfB
ycc/s9jFbke+S5qZJTRq3ebepg0eGMnI/I2n2kEDUBb+OOAm/K0jd9omAGz6
5nmNtJfgjNQnSTcGfpcpopsJbrgdxx2WxOLeCnrWS+KaOwKLolntyqwJ49qK
SimApmvovOIY+KvjIWysS5LvhLkRq1cXfYfop0Jkw/Rfzrun6b6KA4SPqtPJ
h9+K3xdD/vr116n9PD/4fRGcFasq3zlmGs60Hw+8f8vAAHwZ5riCgHlVCBe6
S7k1nTxwdYYRJbEye2cyjUZ7AKrEyx+HhRat2QFU82kz9WEzMuK32E2cyDWP
DMMBljggGA5YIH/qhY5cg0HQAvEUd3h8vP7d89mZ3yb0Sqmi6/fsvRsaS/WG
BWE24/82+Uqk4mJN+iob7mdxWw6QZ9WV2rKI65s694OcqJ/oMnv3BijoXQVf
qdr3TaRlW1Ocw5tdK0r2V9WO+BO17DdFCs4bnupNs2VnyHBUt6T83bZobnjA
yVdDUeqbSazuW2YC9jBmDjAd840lNdjWfvvqWL95SYiozg/fl1qwvXkaDcIA
1jBBsmuQr+b4yo43HMUPErp4ov9u8feE5oUx+0IPpMZMDB/1CScBuC1iKPsE
e5hBoDO0irbsYzR6Yfssq0AdW6QvMJahLFMMMYEN7c/Q9iH+SHyM6pjuHG7Z
AgP/J+xA8eK/voHEMvvcHDNlbWkkX8eK29wFW6+ybbuQS9U8FyYsItnQeohp
gcdzdBjNI/oYuxoukbZAxHWiwTYBFprMSsohqTdsteOh2N7LrdiWwQnEy2JN
v4WjAO3FMx6hq9nXW+966FKSWUnTOpDQPxWuYVph3O2pGMckFpflfAVbAq0n
W3Nin4SieROto79OE3WBeljBrmHhTVN4FpYL2potXtzvbhROEGwR9cgLusgk
BKtthaxjwsvaEo4CIn/lhWY6RMsE5DDeLQgA+1t0oVlPM+Oz82Gm8CvY/CS6
Q5nsu44GHHOmIf+RiocsCw6ZpY7Loms4hQiAkXUmziq4wmNmiVq9O6gQXm1+
lkX6s6oXss9tybv0lSR6yqBEmaZ9laIjeajzqWGZeVXhURhQ3cB7N0sHa+vj
ZUiaddFt6B2yVC5gDuuOPJ1eFO0C4ak6BB3+27zSfLwwHPtUYuKiqSJ1DwFf
ovwIXlXZpUkm+r3MC5N76ufjqBA6Vac1Eo15s0UQd0MXzDTTf5QotpCtGLa1
q3rrbUYl0cyoFZsy2kD9XTfZdeVj8kKilvuQlQ2zgRFuBnckwfV1eHnRhP+l
+wuYYhjrpJSOT8rACNsnoGs3ofFYIvwgHRIeY+/sFQn2ZLQISU6sZUzYCoXI
bTpfmKzzCQfYToiM1Jcwjk6eusxKl6ib7olSezBlKBI4E/OWHLCaP4zdYG8T
Xe6EOiMkUvyTZc6uroZWm17QCrNmdXEDfZKII6IDp0zgkRTA8V0qEcfh5DDG
/6+54O4INvDOsUMLW4taSCjTiODNg4Mr9nR656Ny6xQflSV8qfbh1vF1rG+7
mf4vyXj+hD5MRTw6JXCl28qRTIKSLdubXlwxIKLL4wUImrHCX7GVdWiPcB7w
K2dJhWF44VyOMhCsA3q6iWv6y9l38yd6npa67c5EHcTxMYqSFUQVD8JrzS2q
mSyqxtucYHes8cS3GWs3b8xY4Rz5YS6OrTTIZWKD6Xzu0+gk4NvHCzAuJWEE
QB4mscUzz1iaG4M+hgnBxaHJ6f6UIKgs1YbFXDM0/gQht2CwLphnB/eUHhbo
hEtesGgCcc7PzLrGW7+GchdsiJXYk1siT3tBs0g80Nx4i8mmYR0vdd55upSe
QT9heiYSQ2gtCYNcj51zPzuX8jhxfAUJBRL3UV8RoVwfxbCzcWFS7aWUjbgI
h2fqdE39aJR2t0UgOvIwJeFns7PENlE0euE290FnWRqhe+LcJVHjafaSk7LZ
/xbMxa7NKr+2EUPXfWClSzQjUVBVtesqPyeB1tkXhDQRUB654lPJMUDF7q/1
qZsLD6Us5vajHqapuwXA0TAAj9kHC34W88tZImEKX0wbktjhYHf76IHg5izV
2A8MCbpdjlL5xJNy84BoMROVvO00glAIoTxyB9eojeCJUtzN0siU+iU9W6CQ
qtkI/9ioQloq8DMLTKKDYQAEs6e7RxUOw5NsSaNEbIZ5oRPeZz4EfPHIBbv1
yODUG9T4+o0c8vVzloHXWNzqd+wgNgNo7yKTOL+Th87bIAmLT4Q60f19/Kbc
MZsQZ+E76+I8bztZ/UmP1xx5s/je9yevprKbEfvsrXvjFv1hk1cCuUF2rAtP
4oocuVRVsdR8EJCWg81fiF3uEp4HLWSQqzpMB1Lm74qVo4ssBQKeAGcHj7hW
CYkeu6roHBOUgdgXiQDz1xdFJ05JDhaE0lmxI5sEJY6jU/+7CmPU4znbmLgs
lefQEvrSpqcnPx2/Ih1h26Vn9Svp6mU3zbh19JgLuLkxGH4xg/YjZSPbqr5s
LfO15Ul43yDf6QhOyU0IAQAJrQSiJXF5kzh3ZFwORpNxhCe5sFA6SaxkdVGj
soXZ5s1HJKD0A12l2Vhh5MXVSgK4ZOq9w5+zsRAE5pO8WpRXwzh737/+YZow
tKBo3YcPxj6cIPfih5+F4ZrTD18axSRd9SrnlOWANdOQ7KCRUKXm0sKT0snb
Dua+CQ0J8X3VXOGThafRN+84JtoHXRsiyeDfTFI1kx2Dx1yB0Nh83jcuESLl
bs3ZbpP1xCDRHS5O1I0cjNPmTj796Fqhh/RXa6uEZtL/SafBFH4bUl+Nl8zx
ERY0SXfqRJs4BHKGhbZm97kgupzQQSNksCZa1LmAGhIicCpOJPK5RCKlQxTm
kZBRlL/TMgQevMKQSpGdpi5P10c5+uyfiGz7PHIz9oeCc2auDR3qax8guafk
eo829EZO8w1aMYubqg4gDqmxFrbd26MndaUJH0IQrRPw9SBe8GDx0Ef8yD0a
DCVGh6JAThe1vffLyx/nbbYhjWQLyARxIloDeXO6iA5SEso5FXBmJGGuGds4
WX8PxhwlCPS6DrJVXEKoDwVxHhEWp3FRsafkDerYHHsJul7CgjFIbAtDX/ZY
Tcn4+zWB0qqrG9SfSc5efPdLSgQUma8nx3ON+FmB0zDlkWxgLm3FEh+grSIB
LxAYEhXKfX2gqWYiVpsCPNDVofCLIzDTQyR6RVyv9ZRW3OfrIWgOKrM4JUYI
5U16UV8Hc2hJJh/1LWEb/vLYACORbhXtAdEkXJAjTOtMXbkhkeNBhgXVjnv6
Xl8h7WUSxb5X0tU4eGUY0ysOMJbfqFHRJpnL5PR+2zAx1yciGfvvxekqyuoC
ekr7+0Hk4SyVzI5ZTylM0lv+i9IYZo58mN7/bCTwnx3ysp5x4g9Ej9MKZHMz
QQdm+F1rfLtzOaMSt87h86CTSSSRajyjUzB99L+iZxjgz2S26JKinfo4eSHI
WsaH72susfRO1V7lrtoCGneE6y4D1InSTxDSmQ4P5iAUvlwIReJMDHJkM8EZ
OwNuRNMO83x7BiAFHxMDonhly5mzhH4mEbTP5U1Y/cWDKafr3GhpjCu2KiKd
X3upRtjLyWHfcAwrlvTvOWZYciRxcTCt35037FuRQ9Wi1HTsEoEBQoGdDn0n
bsAZEY/q805KfE1YqgRyO5uGxNyemQLVul2q03qItxrfK+YaFsr7iEVfCWaF
2aESDxKXcuyKZhAsP6VOvXyhkU5m4dXQAVztVKYVxLBmDAn4pZe6M0BUAPtT
RTPEHiGkBqaWX0fTdCHcuatkzYdUFubXnOIrdwOHmhSaEKX2Rs1HYtSHuUh4
QTgDrEEc+Wk1KlAGQ6v0sOIRTfr8xVnSXpAcPefAjwJVR2FsCNbglX0XlNvk
51mDMgAcukC6ZMmcW+ZrXa02N9fnXJtua1HOSrosIkLSmRMtrdPWQQU5eIqC
OKJZGuW9ZKHxUyZPlHlLQIqdgIBnVc+jrQoocxhS68xvXlKQBbNIx8tZJ0tU
GrpGraA8u5QSeyQPbPOSa+ww617mFYlbXWrLkIJ9impEpolZvhNVyIXCw4l3
DyvVYCoBA9R+o+6t+fOYZHPNFLmUWrw5JYJUb+bozg1C+p2fl8U51+HhkjyN
q/2VrIvsvKKxifkzvGrAx0UeXXySfPHFiTgT2GDadzUsvvgiDfn2LEWtS7H9
REEws8S8UAzgVl/1E3Inw9pRi5hEK01zYUYjU3AhskZCq1ma9dY52QxsyVD3
8qapG4Jb9rrD+WFh/ELRxKm1q0jjzCW+jdUC8SKZ1RaAwodFc/Nt+uM7xPFF
ZWdxdC9d5GJM4ZY3HEuGWnOZUeeoEkfMpCBsHC5otMvala/s+wSoyf3FSHxi
8afzx6E8PKRqtH2wGEbUfbr53zEOKY3RSxIc24nsW5fqYFWsP5lUdstIXZDa
F/m7uZpQeMyiuwlO+n500t7kTcf9q9SRC7V6b9V0csCYZfUcGkNfKk/3nM4C
TpfEFniGTlidLU0hpIahtjH1JwyVJYldHd4UVihSpofBbh/wbhn6hd4ZaHFI
XFAkpzPZXaMUA9Dz0XDZIODzlqw2lm6jsEL4UvIutiH7DLIDE14ikdUNgupo
YfCtIFfWmtq9sKsjsspXPuwf7IJ7L3iXOAULOJxZHcG7Ag1ldD/yIOAwHPfr
r4ejjkYZghRzSH7ycxjmjE1ctnlprgrwBHC2ojJ1zijKUxf/6ysgw7ZodSq1
7KrEMnP6eNoPeg6Na4Q+zMSjQ/eVsNRD4cReibQ0pBYZg00TllnOemCA9Cw+
RhHdur+krCukW6lhcbroB12CbLbBxgNQf8g5Kj0FUQSxSNSbRqguunQS5KHE
wOLBKSRL0YBB/mOkBdyx1kdja/0ILRrJWB2nO7M7kDNW4UxpbMfx8tHiEa35
GdtTiboeeRLzKKZWoQsJ2cjtBRcgcYauHhWH4KOkysmBw17xISdBL75p9l+a
laMNiEHf0JFaxOuz3u6tEBjRHIndVtcuhtvLUgReSvn5rOsycG3E3Yh9sM+Y
LF7P6Rez+IBiRQzzMk7LDlgAWXXmv3G6GZuwStbOh2paos40duXrPL7gU1A7
Q5zkPrDDqd7JnfpbAKyPcdyGrbLIiIMMUyhm/hrjrIk+A4mMJ9oyMnfBZqA2
LU9veuzgNnpmeJeQLED0AxYRjoZrb6c/na9Sy/WBpYQ0XMxsIDDDo7tX1qSM
UdIpsdmDiaTqDAGtDFMWBI6LikP/0wfG/UwtFjd1RIujc3RFJEUd8rHXgcLY
r+Ma13BkjFUl0CX/uYECo5gUm7WUHb41aH84SCnd6rQz10ZUmNCwZj5gUR20
HQEvydkIUWRDKFdzhY9UhkUJNwgTvTw7Ld9tIatBdJwI+nLhqRB2EODcXl3A
inu5cJx+VGx8FcpiEw6jsZPqcc82OZdHgZKQjKUmwtmEMumIldrkk1jlpqYN
0kVRQJbpSLZa5VtmFRLeCGsdlEkY/GMvNFF90iLWLg1FDMhJELAlGCNcFgB3
jQz93epCy7e6iSUnlgvIi21D6lXzbLq1dM9UdMYIDQZlWUv0oTes3KVfawIZ
F6p+5V157Bo73+HdKQwG0mCOD2yvlUCWcKgpV6geKQDMURduNWP9Hog6vNmZ
OWKk6pmZudXcyNh6KYkMXL2UY103gZtJtXR+8esqD1wLTJfpMrSMfVvvGvYu
BS9uTCQzexKeegLY4FuBQq4asqsN2u6KTiMUwT+5Nr49dnHBBWVZe7dnNpQ2
8Fku1HIUvnYgxduSJPwajwQgRAf6MwweNQfVEh6NvmuQjL9rkLp3DQgXIjPX
uGGeBRNkMUcWMZG802fO1lyIDzZxJuaYc/fKzPiSNemeeyZEzcxTecUhENc+
VmhG5ovL2KRZIq0Vsnw6JAdnu6CIW+u8taGdU3wcrNDw4EMBjgk+KmTuBTIX
bcWZ5W8/mOAwTIYKNppwH/libWwfS5FqCZ9me0/M9q7V6VJJnyAIGIY696zj
ev+IwNZA8ZHoaK2RwDHJUURyP0Uqqga36qJaZunkKw1MHlRzC4OQNbfmvKyX
g2yaMDoZ7cab9dNgPpYHY4ksr6VScFCOpQ2irDtJuhYJByWKg3OQ7FwzNzMY
8isCSpsQpSbUuBf2vee9bBJ7m9wSe/vUeXpgO3b3wtmhoAlKmbLEguH2F/en
5hpggORNcPFyLr8QZuPydiQza5JYXYYe+ETB2J8MQVGIdghEt8ZKf0qkdLLn
ElWIDA+jpp3yczAV6iC123ltiSeU8nCN+W59UoFKh0HZJghICJxytTsCV4jD
6fAhErtlrVaR/iW/qav18CWmWcDMXN17rdTtF/FUE4FR8tXMNv2aQm3NTjER
ile5SeZdbmXAWUea51d88iopQaSVmyCNODkVcfyc617aVUrG61re8XqDGhb8
KXyHx8VWoJy7lVQtGleLmO+gzdVp1tibHVHkPQM8HTFkNm4Q5HhrhQ0roMGm
Cmw1Y6tuXJHjKb9pEuY6eODnquCuvPY0YBxawyU4XkEP3cHMqbCayC2cU+Dk
Js2ICq+62ARDbIrDXQNNwryEPK+4EMfL/LG48JewUGtYWw6qg1ZxZdgcLcos
RgSmCFVg0vdcfpb0LRF8o5WUke6Xjx6rM5L0ikibIzAS3IZrkmrsxoMT/4xH
GLXhIIfB9Cer2BypT2Ed59tZkLki40JJI5VCva1BkOYbV6eUBQFYgoMxRgaA
NtAvskl8rSP8ECDgbAzp7/JLNQdU9OFeu7gRXwt9+xtbNN9rUMIEkYpBnSg8
V4avJOR5mZdW7BMZKLeWlJINcP1wVrGDTi2higQqhSviXz9II+Kk9O/vskgv
1kTFs4aTudu7LKpdJPjFeaXRBRK7tG6MthreZV9+3vaaD6sefNTOxgp4LAqP
BmP3UkMUaN4oNfnaD4ickGi82chgH5J44TSARZVFdpd4GgsuE+qKpzsCYpa/
U2nWfKHxpsLgtsANamGwrpo7B8zPEcerpQSm4+eRsKzSH6ePVOLTSE/f2VMe
MJsHhQuSsYIFA93H/P97PUlabTOepvTgYRaUfL+rPH4vAAevupV1a841m90Z
/0S9F+pOZE4sPp/FuszH4DZsPAa1rj8HCUetbT9RphJ99YYxS2sj+AEAj2H/
D9Fo+O8W2OuNGQBff/Vs6Lzz/YFYLVVd88xeKRR7ILI3ORqWn8RZ27kfDazC
SQQCvbVExCZ4UND6xninnq02yqnq+tCsDnZnxFBuHKrjqkuIQ0k8nxZylYX2
vvGgEXBXjQxgGBdjnN+3/MSvQ3RcnF3G9hKstCBIPHbvOCA6wSnCvaxevLsX
xlJIWHniUssljKS7I4hEdemgScbBQF98oXLMyocejC6Cfej6tFPfSpSM9ggS
saZWD6wHGuZgCCwFzrGv9mUzJvo4mcExm2mxtxeOA3DwBOyYO49eHBEQKvvj
GB1BraJyz7YexYveQjnUXdpf6f3o1CNSHK0zHrmHGrB3DSMNPsI3Rxxh7g09
SUe/lTtLdmByMjiA3jJjEj/c/IPompSIYN86so8WiFev5in7chGcs8ERP9Ul
8BXyBHcmnFav3QfrYs+YRHcHQGPbHRyMhR8ksZipLpH+YvtS63B6dmuyxBfN
72MN2CxaVMEBQABFRIes0MU2u8AIHk0dGGITvTDfiuhhiFwgkd/2pvc5XNtj
tzaLuKry1juygjAhRe8YCoNyb2N6yyz1W3CupQG4hzKEvqzj63nHZzLcwJMg
lAPCfHizru9ANUj0FlWvIkH+vBu5uS8xuHOh9cdPPAyMaBWh0VWq4QQvNLFo
Maj+9TX7XobLONh3t2QlFiIA8ijHj/romSdQ3L1OEa4ngiMQNmRDuEO4I+rR
+cbocufm2fK+LvVxgRpld/uqxArBqxd/lAsGIHZ/yglKUnIt0sBDszTHyrk0
g1Rers2ae38W23nu0sATe2yp57tzkPpHK48J41jCd3cWQeBq1Mg/CmVuOSRc
EFWyBpZdAuoxkmGyJwlZiz+u30rN0e9f/wB3n28BxXKKgf8fw/y9r1hVwxT/
Dz1gu9uwmB6IW4IeQkpmnFPHsmDB1YGhESppYmPiO84CpiHam7YjpaDMbmqJ
2BytL8meenUKEU+82boCv3DWiRgB9wkoCC2OQz3YgEarkPzHIJEXqO1KdwT3
x2Ul2RrzwhsQpXzcWj+3Ahz8jAConD7YHlg4JO0VSc24ILUCh8yYracur5q0
OK2gvNcvuavPwviyrFP/zptFshBsC85wNfBkvPKZlZXg4EF5TKJtp+HrElnw
NLmcwqDGq69+zwSZBUjoha7mjaTDIx0z4afU/TtyrtYxxGh++fXM6meJ8urq
avUKk86lMClosRUPlgqlia9Q6mvH6Dp27OqN60BX/ACHlWQOqqWKr9BKfYwU
aO5XmdFSOsEQGpdC3B/G6+jgOXsgKNRq8R1qlewkFd2qovqcdAsi0Ge08Z51
x1L6LeRa/OS4P1erTkMoRPzSGLIorGJYz2H0MXURBlWMihy2Li8/fO/b7UBR
qA7PTRZjoVhuAXI0HLCBcYSGIRxb7AQq12kuu02aOBs/1jMJKo7ao9ez1N4Z
BxPylzAbOQx23vADzYBApCyikuWxAIS+bVg4/3MczmKmZIljERPvUeCw1YgP
zhALUmt9OCBClBQxm1A4d2u0N1a59qiQsVoigsbiUeKSk4VEkYRLFgtq8Mq9
uoi4HnYhXIYLKRfnF3OeJvGN26DYpqsKa15LvXJN6y1aJc/guU+Rz4g8dRkx
mL6djZZ6zVh5EL+Sz/lsan1mIwk/sdfVgSMbsFWcOxL+7mCcc+4YIpJ+2Q0p
LvGxZMMlHtysObR7t5WXpy1T0bsT2U/Ei8s5/0+iwbjGBMY4z/ltTvpoSXp7
ZrXzSXuDPMvpbOB6SnhhrWlJNj7deZDjZ9wtCo/itIgSRPlF6fmTzFpU4qPQ
8NgglLGgY2mKc47IlJU+TdT3409IotFZUBInOiSutk4RQJpqxrVbVULSHLcu
XNpjnA0eVJSW+uJxamfwDCDHPyXbks6R8ybEpdWKTgKvEgk5r/BELAd/cB7o
2bws3ub6vGeKFNFkW0i2BruZ1Gckie4s/A3dhywvvCKuwbg8Iiy8Ns1JfTs+
9LcFidFXaTe7Hs8Oms2EL8YPDsLyCsbPouTZhctzu/U1ezrlXMqocEyeGB3C
N909IwhedZ/H5UgvbnnMXnxPQSEe68HlxHSOu2aI3l1XZ2ccK0qEMOOjMv9Z
kBbPJaWCZJFhWZ1+8iQXbwjJjntJNT5AggOJvvW7ECIqxbVtE2MX7UDXXeVd
982twSVda71ZHdSeJ7Z79vtNNacXbs+dMCF90jrlcnRsWuWIBvdm0Z2PkT4N
iNgeuxRpECM5AorxRVCfKWd7KUPgAhNYRyz9cv3HMCpQgkFp4RIg5xl33fDB
4infWq0sYup3j3hcgwfVWvpDwx50C7LDQOjyxTHkDBGEGHnHtfojpqT+7H13
d2eFErXv5607Tig1JIGS3pMety3xdHbD80PrnjkGr0V93gY8/xI8EA9ZoZok
9mcVRiKYV0bsc+b46fXo/WkdHPXydgUqiNWx6tI1NZ7oRilTiLhzM9cqUWcz
Qd7w47Jcc07enAwBr/d+h38o29eBluvQaOnBa7Rtbgl2k2AsrjPEISjxgV/5
+H/QJLRgcsGbJYkEib3tNQLZiisNvnJ5P+nPMr6uBGYkX44RC59bMl6wMaKi
zFiCiH0uQBBQMNaUOEpyFvgMghuTKB66kjjAMTjF+LkSezFk9DDVsa75JYDW
hvQFwih90Bgj+aTMOE7ESKcM6wqcJeGraAJFQbkC96J1di1fytAWBpHZEH7G
DASGaG+0RUciqIFghqKDHBlXL5HVyRdWM5tGvkPseQpzfTS8F3pEGOBofNwS
UgDLPGMGwN7w+HFp1VBdSH5440I6ZSVWqe6F24+GzDhfoMq7f9RLO3bhQU4s
UV2XJV2OOpcwYgkRjd+L07Q7C4voPTatgU/IYmTLJHBccukaDUMjNIkkOzM2
OYTSqjt103tMxSiHdnAvy1nSr3PJFhrswTV4OSOOOdOtFQqFta7zxR+kk++W
XZlLwTpmJt4sNmXa5opf0cIsnSYdoNHxWBgy9d7LF+eLWXr8x5V7MpozDpus
ED2nYy/V6kKcDE0elFGUi+uiO1oQgybdpVnLc9vM1AAj7A+76L3MqZHx1U3s
FiGIT0J4DSrNcATxMhdd35mX/cAqCmyz7qJnAuAJpVG25HJ7SeJ/pP1yZh7x
oJZz2FY3QeS0dnCZn/xkDCOe8EdBCy6CGqRyOHbM5LkS+Z0TwLjdtZEFs3uz
YQsRrV7xV7sAV72q2kLq7pmYJdaaZFUiA/3GkFq1jMCiIES6rYPIOdyKuSIR
TquWvdyZA02om5sGHTyaDE1xQ0dd5FLiWxUYKF+on2bnTnqEWPjkjVdmJXE8
dV/Ks8T4DOrsKpdsgK4gCRNjJS7yc6HVEW5/I3aQgi+1jdsEAW2urHH6baCU
V3m+luRnXjhdUqfeUkURggEIN7NEdO3tbq15e0YF1zupt5zPV2VWXGpqVTs1
sxoNC7hPiFftXGVmTU2VgCjZlTKDOME+5WqJWk+mXzgSVeVGakmG1SNtVInR
lMGcYRumfkdG1DTBft6oXKWVjWxI6GsdAQhCbpO7CkmGL1zdXkUygQbudCVN
WB+YELU4uIdJKQ5u1TPiAsVQduvUbEMk4P6Zu/pAZhRV9N+g/p3i+oZFaFVK
idasi1WndEBQ/7ZKnE/NkCIlC+xegjqXslNubJ2JWbeiDQLiWfAEYL+zlRjn
0AILC8uC6FX1CEv44uvd9hw7C+jhKwhcWpqJ8PEkyi6X5POCPTsWsYDXVEU3
DatwMoKxeczS0M37H5Fje4zjVu6MUnVM6y9Q64Ewr8OBfN720t79wjzApHvK
IhNR6xcdig2eI5npFGsS7oiEeSvK6YLTggq1fsdDgz1AnCmjrauNC4p6Thwb
ntNnx8+PB4aMWypS2St6UkCVezb5OVxkwrv1/DjAN7nOy3L+tqqvq/SXl8+i
hrxcK7+PF8/q5q171ctZZ5NNYRHBQHSpJAaEprmVQvASXmOiH2yi1ma6Sd6/
x+/z1z98+CAuuHO2q3bvpFyQfjRXG882i6Yh2WTPb2NO+IUK6SWnvH32WJJm
P3t8HyVnssKPW9w1Zrr32eNH2vMxetLZV1CkqPvMfcAA7tOcBiFmPDoqazw6
7pODWfrZk0P830OMLMqVW5d+vHttT+7L2p48mFrsoRTU1YtbuaCF4Ou5lMvU
Fwv2xDxRyQEnvWcsCJpmKk80mpbIXL+Qaqeo8I6CZ11tu58l3Hp7cdOyWMcM
S2RUk3jgvYx8qcE6kUxfb+5aobekrDmdLfk492AOIXAGNpnyi4GSdAdEpqUE
CWt7zNdaVdLpdDmD7CiZBI8e3Luq1oswoOH/4Jom8AGGg4dIpAmxhpTGNkFN
QYbMxhxaCELDvhm+kpu8S+kY0MqlvEIcs+JbVs1KSgLGS9C5UZdoV4LiW1U3
OsU5IghIqACROV4BgwDGPLnIVuGFuRqfGSeTiuIIQFznwiV8oCF702DrOiMZ
Kz2tGloe30nmdWPSnZpakvk5ZZyhgaNL4asMIJeT1RhC+OKOnylIsPs5swc/
2CwM6lux7S7oHpmvw3K9798f/9vp87NXZ387+/Bhho/P3J8nL54/Pz05k8+8
gvfvfz19+ey7v/NXFm4HXWXu9EkY2Isti1dzQ201pYnO5xUPlOHLkK6BQ5WT
gzg/51Q1UUf0gpFLE9uZ6013zRU42U6SS+qrOIHijERBJcFD4kmS1MEAA+0Y
qTwokqvlX/XdC9fLXjbwuaI+55lNjlUd17ry3pBupAuuTmI2WqS8b0p+SqHj
8knu1OT5h1DnldxHeWBe/JM5i82iOGllq8Sc9/rkohQsvtEgErGacOcGvicJ
MuiXi3JpVylx4dXbki0G6WvierDwir3viC0aEl/AD6+eXYRVEPk1ZImUuMqt
D/zy12rR1RiExNNEXypR094kfOu6HjjrB9EIs14oAkeRxkYtuNrZmef0L5cz
YkWwY/nFVYiABxWPvsAcHRWr5hibZPIvZfeURKHFYoGCMHgj/p///GcKethL
+7iK3zMLq1G5/A5SUvD7/sFf//blyf2ffn7+8Icnv/79dP/fDr/9x8G/P/7r
sT64HZaR4Eq5tIJHDzTRI6qAMfg1Ci2kX91b44qP/oWzWKDEQP9KC79n7fTF
smBbSPTct+/FbNYr4/vgPj+24bI6Jk6KD4sDuwfOBiGbtpuDwyffxEfhl/3J
D8jd8oTc2CNyv02IiJICPW/B5bv5g/nDye+zfnN7R+6338OklODluPjVuAeu
hXvILXra/cHR/j79b7G/v/8PW/D4SfgX4Rimh6k50euR7kCi9+xl+PBN+/1Z
3F3fsx99x15Oc+QtewMvbhA+Z3/3K/Y6nr1k//4jMD/4z4HOADzt0IMH7o0k
UCOuTzBocNuUk2ir7ufw9v97V3DwkStgenf3BeiqXBgoF5PyLYLNfOR2Hi8O
Du/fdjvw/OwAeBOLk13fdjEc34iWRIxZlXIi4S09JDpV8q2ZjoewOdbUpYd+
tGX4KuP+/xpkIEctcZXYnSEt9P9EdTK9M6DwMeYz72RKrBZQmEN5HT9iPFJM
qQuD3F21pTnn1cw9I9SSQc73lY/UwZvh4bq3iY+Y2huA4iwN/44Ls2moq7Dk
aRwVrWF2txfZisvZJrrOYbS/UwV7VSdmYXZDElcsElmttkhukhZOg0ovJAfU
XGZN6hhLuO9TMbAHFW+8k89ndlg1G3TVmjKjUpYrJ/VfkrAQuGkWlBUbTds2
UaPpELxWCH7nqOpjKVl17GPGORYjKyU5A2EZRkQOfg/KAcvsiUT8pqecgyyP
Ylg9wT0Gi6nZ8yXhJSRJqRSluLB3qQE9SRpW2VrdLNyAD/vV2bRs2i1EzrsI
4KX/eG02y16x6R6leyNP4LgpIz9l8LyXeiYtKmm07rJ3XoQ5JUEVtBQBzapk
eVLBceaSEGRVdbzAHEaMtz61fR3e8V/C8lx4yokLv45Eu+Hqf0KgSVCM0GEJ
g8D7IW/+m5S1+ADwHvn570Qn+Werx8L10cIgUk3OHEDSY/cuvWLoVFIQxt5q
59UhxsRo3B7sgL16YVwTlB+MDyotBmug/j8VLd+N1ExuFyNgTWvYVZJ7jxS1
sGaXPN8ntJYTwRDMPihLaeBwnYVPgq0//d456j249/jaj9MoAYGVy/gZdf9y
nFYZSv8zrnWc/mdCAMyFOYMmgzrJ9J0DDvlmCpP5pbyftnEUi+3ew0LH1Yg+
mi4LDtxgT0DgvtT6HvqHFSq5pRyzWI9jEzmejm0/4uQGx72iRYiK2iXndNi7
5YIA595b2mdGl3qv4TqBWl9HtXxJwKA5tpcc701qY+3ehEk8HVcPN5hEmV9l
lT6vFljvGPpZ81ohkgj0BiVMZgPf9oxRgk0gqknN1PcfOJtsLAkvWrn6cw7E
9kI7x3iSJsI+7so4nbL/j83jdIJ+6XB8uQUE5p84UBimT4uPGx3nKc3vgwfE
YhTtiQE+qHTk9xZe2Vwkham/gvAcEr4rJC6k3xMA6FNJtugo/mApBVXUZ8J5
kEXZzYtK3Scavfv9yasecBnQDEDahwIk6hifZNUNtgL3sl6NGgKNhLIBzoUP
6WlOErMALZL/D02KtAjLuQAA

-->

</rfc>
