@corca-org/ceal-host-win32-x64 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/ceal-host.exe CHANGED
Binary file
@@ -2420,6 +2420,9 @@ var DOCTOR_FLAGS = Object.freeze({
2420
2420
  // host/client-doctor.ts
2421
2421
  var execFileAsync = promisify(execFile);
2422
2422
 
2423
+ // host/claude/src/claude-installer.ts
2424
+ var CLAUDE_LOCAL_CAPABILITY_ACTIVATION = Object.freeze({ environment: "CLAUDE_CODE_ENTRYPOINT", value: "cli" });
2425
+
2423
2426
  // host/claude/bin/ceal-claude-hook.ts
2424
2427
  async function main() {
2425
2428
  return runClaudeHookCli();
@@ -2201,7 +2201,7 @@ function boundedMilliseconds(value) {
2201
2201
  import { createHash as createHash3 } from "node:crypto";
2202
2202
 
2203
2203
  // host/codex/src/codex-types.ts
2204
- var CODEX_SESSION_ID_ENVIRONMENT = "CODEX_THREAD_ID";
2204
+ var CODEX_THREAD_ID_ENVIRONMENT = "CODEX_THREAD_ID";
2205
2205
  var CODEX_OUTBOX_SCHEMA_VERSION = "ceal.codex_observation_outbox.v1";
2206
2206
  var CODEX_TURN_BINDING_SCHEMA_VERSION = "ceal.codex_turn_binding.v1";
2207
2207
  var CODEX_SESSION_SCHEMA_VERSION = "ceal.codex_session.v1";
@@ -3966,7 +3966,7 @@ var CODEX_INVOCATION_AUTHENTICATION_DESCRIPTOR = {
3966
3966
  command_name: "ceal-codex-invocation-authentication",
3967
3967
  producer_id: "codex",
3968
3968
  create_store: (directory) => new CodexOutboxStore(directory),
3969
- session_id_env: CODEX_SESSION_ID_ENVIRONMENT,
3969
+ session_id_env: CODEX_THREAD_ID_ENVIRONMENT,
3970
3970
  session_ref: hostSessionReference,
3971
3971
  config_flag: HOST_PRODUCER_CONFIG_FLAG,
3972
3972
  parse_config_flag: parseHostProducerConfigFlag,
@@ -2897,7 +2897,7 @@ var CEAL_REQUEST_RUN_BATCH_JSON_SCHEMA = {
2897
2897
  };
2898
2898
 
2899
2899
  // packages/ceal-client-protocol/src/host-observation.ts
2900
- var CEAL_LOCAL_HOST_CAPABILITIES_SCHEMA_VERSION = "ceal.local_host_capabilities.v6";
2900
+ var CEAL_LOCAL_HOST_CAPABILITIES_SCHEMA_VERSION = "ceal.local_host_capabilities.v7";
2901
2901
  var CEAL_HOST_OBSERVATION_REF_PREFIX = "host-observation:";
2902
2902
  var HOST_OBSERVATION_PRODUCER = /^[a-z][a-z0-9]{0,31}$/u;
2903
2903
  var HOST_OBSERVATION_DIGEST = /^[a-f0-9]{8,64}$/u;
@@ -4181,7 +4181,8 @@ var CODEX_CLI_VERSION = "0.152.0";
4181
4181
  var CODEX_HOOK_FEATURE = "hooks";
4182
4182
  var CODEX_HOOKS_CONFIG_FILE = "hooks.json";
4183
4183
  var CODEX_HOOK_OWNER = "ceal-codex-host-observation-v1";
4184
- var CODEX_SESSION_ID_ENVIRONMENT = "CODEX_THREAD_ID";
4184
+ var CODEX_THREAD_ID_ENVIRONMENT = "CODEX_THREAD_ID";
4185
+ var CODEX_SESSION_ID_ENVIRONMENT = "CODEX_SESSION_ID";
4185
4186
  var CODEX_OUTBOX_SCHEMA_VERSION = "ceal.codex_observation_outbox.v1";
4186
4187
  var CODEX_TURN_BINDING_SCHEMA_VERSION = "ceal.codex_turn_binding.v1";
4187
4188
  var CODEX_SESSION_SCHEMA_VERSION = "ceal.codex_session.v1";
@@ -6256,7 +6257,7 @@ function hostLocalCapabilityDescriptor(input) {
6256
6257
  return {
6257
6258
  schema_version: CEAL_LOCAL_HOST_CAPABILITIES_SCHEMA_VERSION,
6258
6259
  owner: input.owner,
6259
- ...input.activationEnvironment === void 0 ? {} : { activation_environment: input.activationEnvironment },
6260
+ ...input.activation === void 0 ? {} : { activation: input.activation },
6260
6261
  authentication: { mode: "nonce", execution: { mode: "verbatim", argv: [...argv, "authenticate", "--client-nonce"] } },
6261
6262
  capabilities: []
6262
6263
  };
@@ -6264,7 +6265,7 @@ function hostLocalCapabilityDescriptor(input) {
6264
6265
 
6265
6266
  // host/claude/src/claude-installer.ts
6266
6267
  var OWNER = "ceal-claude-host-observation-v1";
6267
- var CLAUDE_LOCAL_CAPABILITY_ACTIVATION_ENVIRONMENT = "CLAUDE_CODE_ENTRYPOINT";
6268
+ var CLAUDE_LOCAL_CAPABILITY_ACTIVATION = Object.freeze({ environment: "CLAUDE_CODE_ENTRYPOINT", value: "cli" });
6268
6269
  function resolveClaudeSettingsPath(claudeHome, environment = process.env) {
6269
6270
  return join8(claudeHome ?? environment.CLAUDE_CONFIG_DIR ?? join8(homedir2(), ".claude"), "settings.json");
6270
6271
  }
@@ -6321,7 +6322,7 @@ async function doctorClaudeHooks(options) {
6321
6322
  return { status, settings_path: settingsPath, configured_events: configured, missing_events: missing, ...executableSha256 === void 0 ? {} : { executable_sha256: executableSha256 }, drift_reasons: reasons };
6322
6323
  }
6323
6324
  function claudeLocalCapabilityDescriptor(authenticationCommand) {
6324
- return hostLocalCapabilityDescriptor({ owner: OWNER, authenticationCommand, activationEnvironment: CLAUDE_LOCAL_CAPABILITY_ACTIVATION_ENVIRONMENT });
6325
+ return hostLocalCapabilityDescriptor({ owner: OWNER, authenticationCommand, activation: CLAUDE_LOCAL_CAPABILITY_ACTIVATION });
6325
6326
  }
6326
6327
  async function installClaudeLocalCapability(path, authenticationCommand) {
6327
6328
  if (!isAbsolute3(path)) throw new ClaudeHostError("configuration", "Claude local capability path must be absolute.");
@@ -6607,7 +6608,7 @@ async function validateAuthenticationCommand(command) {
6607
6608
  }
6608
6609
  }
6609
6610
  function codexLocalCapabilityDescriptor(authenticationCommand) {
6610
- return hostLocalCapabilityDescriptor({ owner: CODEX_LOCAL_CAPABILITY_OWNER, authenticationCommand, activationEnvironment: CODEX_SESSION_ID_ENVIRONMENT });
6611
+ return hostLocalCapabilityDescriptor({ owner: CODEX_LOCAL_CAPABILITY_OWNER, authenticationCommand, activation: { environment: CODEX_THREAD_ID_ENVIRONMENT, value: { environment: CODEX_SESSION_ID_ENVIRONMENT } } });
6611
6612
  }
6612
6613
  async function installCodexLocalCapability(path, authenticationCommand) {
6613
6614
  const current = await readOptionalText(path);
@@ -6961,6 +6962,9 @@ function isHostBundleComponent(value) {
6961
6962
  function isHostBundleProducer(value) {
6962
6963
  return HOST_BUNDLE_PRODUCERS.some((producer) => producer === value);
6963
6964
  }
6965
+ function hostPrivateRuntimeModule(entry) {
6966
+ return `${entry}.mjs`;
6967
+ }
6964
6968
  function hostBundleComponentsForProducers(producers) {
6965
6969
  const selected = /* @__PURE__ */ new Set(["lifecycle", "relay", ...producers]);
6966
6970
  return HOST_BUNDLE_COMPONENTS.filter((component) => selected.has(component));
@@ -7000,14 +7004,14 @@ function resolveInstalledHostRuntimePaths(prefix, platform = process.platform) {
7000
7004
  return {
7001
7005
  private_root: privateRoot,
7002
7006
  node_executable: join10(privateRoot, "node", "bin", platform === "win32" ? "node.exe" : "node"),
7003
- control_module: join10(privateRoot, "control.mjs"),
7004
- codex_hook_module: join10(privateRoot, "codex-hook.mjs"),
7005
- codex_invocation_authentication_module: join10(privateRoot, "codex-invocation-authentication.mjs"),
7006
- claude_hook_module: join10(privateRoot, "claude-hook.mjs"),
7007
- claude_invocation_authentication_module: join10(privateRoot, "claude-invocation-authentication.mjs"),
7008
- relay_module: join10(privateRoot, "relay.mjs"),
7009
- codex_producer_module: join10(privateRoot, "codex-producer.mjs"),
7010
- claude_producer_module: join10(privateRoot, "claude-producer.mjs")
7007
+ control_module: join10(privateRoot, hostPrivateRuntimeModule("control")),
7008
+ codex_hook_module: join10(privateRoot, hostPrivateRuntimeModule("codex-hook")),
7009
+ codex_invocation_authentication_module: join10(privateRoot, hostPrivateRuntimeModule("codex-invocation-authentication")),
7010
+ claude_hook_module: join10(privateRoot, hostPrivateRuntimeModule("claude-hook")),
7011
+ claude_invocation_authentication_module: join10(privateRoot, hostPrivateRuntimeModule("claude-invocation-authentication")),
7012
+ relay_module: join10(privateRoot, hostPrivateRuntimeModule("relay")),
7013
+ codex_producer_module: join10(privateRoot, hostPrivateRuntimeModule("codex-producer")),
7014
+ claude_producer_module: join10(privateRoot, hostPrivateRuntimeModule("claude-producer"))
7011
7015
  };
7012
7016
  }
7013
7017
  function parseHostRuntimeControlRequest(value) {
@@ -7248,13 +7252,13 @@ var InstalledHostRuntimeHookAdapter = class {
7248
7252
  const targets = { runtime: paths.private_root, services: servicesRoot };
7249
7253
  if (producer === "codex") {
7250
7254
  const entryRoot2 = resolveHostEntryRoot(this.homes.codex_home, ".codex");
7251
- const hook2 = hostEntryCommand({ entryRoot: entryRoot2, module: "codex-hook.mjs", configFlag: HOST_PRODUCER_CONFIG_FLAG, configFile: "codex.json" });
7252
- const authentication2 = hostEntryCommand({ entryRoot: entryRoot2, module: "codex-invocation-authentication.mjs", configFlag: HOST_PRODUCER_CONFIG_FLAG, configFile: "codex.json" });
7255
+ const hook2 = hostEntryCommand({ entryRoot: entryRoot2, module: hostPrivateRuntimeModule("codex-hook"), configFlag: HOST_PRODUCER_CONFIG_FLAG, configFile: "codex.json" });
7256
+ const authentication2 = hostEntryCommand({ entryRoot: entryRoot2, module: hostPrivateRuntimeModule("codex-invocation-authentication"), configFlag: HOST_PRODUCER_CONFIG_FLAG, configFile: "codex.json" });
7253
7257
  return { entryRoot: entryRoot2, targets, hook: hook2, authentication: authentication2, configPath: this.configPaths.codex };
7254
7258
  }
7255
7259
  const entryRoot = resolveHostEntryRoot(this.homes.claude_home, ".claude");
7256
- const hook = hostEntryCommand({ entryRoot, module: "claude-hook.mjs", configFlag: HOST_PRODUCER_CONFIG_FLAG, configFile: "claude.json" });
7257
- const authentication = hostEntryCommand({ entryRoot, module: "claude-invocation-authentication.mjs", configFlag: HOST_PRODUCER_CONFIG_FLAG, configFile: "claude.json" });
7260
+ const hook = hostEntryCommand({ entryRoot, module: hostPrivateRuntimeModule("claude-hook"), configFlag: HOST_PRODUCER_CONFIG_FLAG, configFile: "claude.json" });
7261
+ const authentication = hostEntryCommand({ entryRoot, module: hostPrivateRuntimeModule("claude-invocation-authentication"), configFlag: HOST_PRODUCER_CONFIG_FLAG, configFile: "claude.json" });
7258
7262
  return { entryRoot, targets, hook, authentication, configPath: this.configPaths.claude };
7259
7263
  }
7260
7264
  };
@@ -7361,11 +7365,6 @@ function equalStringLists(left, right) {
7361
7365
  // host/lifecycle/src/host-runtime-services.ts
7362
7366
  var HOST_RUNTIME_SERVICE_COMPONENTS = Object.freeze(hostBundleComponentsForProducers(HOST_BUNDLE_PRODUCERS).filter((component) => component !== "lifecycle"));
7363
7367
  var HOST_RUNTIME_SERVICE_COMMAND_TIMEOUT_MS = 2e4;
7364
- var ENTRYPOINTS = Object.freeze({
7365
- relay: "relay.mjs",
7366
- codex: "codex-producer.mjs",
7367
- claude: "claude-producer.mjs"
7368
- });
7369
7368
  var HOST_RUNTIME_SERVICE_STATES = ["absent", "stopped", "running", "unknown"];
7370
7369
  var HostRuntimeServiceContractError = class extends Error {
7371
7370
  code;
@@ -7384,7 +7383,7 @@ function createHostRuntimeServiceSet(input) {
7384
7383
  const node = path.join(prefix, HOST_BUNDLE_PRIVATE_RUNTIME_ROOT, "node", "bin", flavor === "windows" ? "node.exe" : "node");
7385
7384
  const services = selected.map((component) => {
7386
7385
  const config = absoluteNormalizedPath(input.config_paths[component], `${component} service config`, path);
7387
- const entrypoint = path.join(prefix, HOST_BUNDLE_PRIVATE_RUNTIME_ROOT, ENTRYPOINTS[component]);
7386
+ const entrypoint = path.join(prefix, HOST_BUNDLE_PRIVATE_RUNTIME_ROOT, hostPrivateRuntimeModule(component === "relay" ? component : `${component}-producer`));
7388
7387
  const command = { executable: node, args: [entrypoint, "serve", "--config", config] };
7389
7388
  validateHostCommandVector(command);
7390
7389
  return { component, command };
@@ -7943,7 +7942,7 @@ var WINDOWS_TASK_SCHEDULER_PROGRAM = Buffer.from(TASK_SCHEDULER_SOURCE, "utf16le
7943
7942
 
7944
7943
  // host/lifecycle/src/host-runtime-systemd.ts
7945
7944
  import { createHash as createHash8, randomUUID } from "node:crypto";
7946
- import { chmod as chmod3, lstat as lstat10, mkdir as mkdir10, open as open10, readFile as readFile6, rename as rename9, unlink as unlink6 } from "node:fs/promises";
7945
+ import { chmod as chmod3, lstat as lstat10, mkdir as mkdir10, open as open10, readFile as readFile6, readdir as readdir3, rename as rename9, unlink as unlink6 } from "node:fs/promises";
7947
7946
  import { join as join13 } from "node:path";
7948
7947
 
7949
7948
  // host/lifecycle/src/systemd-unit-show.ts
@@ -8023,12 +8022,12 @@ function createLinuxUserSystemdAdapter(options) {
8023
8022
  const previousByComponent = serviceMap(previous);
8024
8023
  const targetByComponent = serviceMap(target);
8025
8024
  await ensurePrivateUnitDirectory(unitDirectory);
8026
- const ownedUnits = await ownedUnitComponents(unitDirectory, identity, previousByComponent, targetByComponent);
8025
+ const ownedUnits = await ownedHostUnits(unitDirectory);
8027
8026
  for (const service of target.services) await replaceOwnedUnit(unitDirectory, identity, service);
8028
- for (const service of previous.services) {
8029
- if (targetByComponent.has(service.component)) continue;
8030
- if (ownedUnits.has(service.component)) await invokeSystemctl(run, systemctl, ["--user", "disable", "--now", unitName(identity, service.component)]);
8031
- await removeOwnedUnit(unitDirectory, identity, service.component);
8027
+ for (const unit of ownedUnits) {
8028
+ if (unit.identity === identity && targetByComponent.has(unit.component)) continue;
8029
+ await invokeSystemctl(run, systemctl, ["--user", "disable", "--now", unitName(unit.identity, unit.component)]);
8030
+ await removeOwnedUnit(unitDirectory, unit.identity, unit.component);
8032
8031
  }
8033
8032
  await invokeSystemctl(run, systemctl, ["--user", "daemon-reload"]);
8034
8033
  for (const service of target.services) {
@@ -8037,9 +8036,7 @@ function createLinuxUserSystemdAdapter(options) {
8037
8036
  if (previousByComponent.has(service.component)) await invokeSystemctl(run, systemctl, ["--user", "restart", name]);
8038
8037
  await requireExpectedReadback(run, systemctl, unitDirectory, identity, service, "running");
8039
8038
  }
8040
- for (const service of previous.services) {
8041
- if (!targetByComponent.has(service.component)) await requireAbsentReadback(run, systemctl, unitDirectory, identity, service.component);
8042
- }
8039
+ for (const unit of ownedUnits) if (unit.identity !== identity || !targetByComponent.has(unit.component)) await requireAbsentReadback(run, systemctl, unitDirectory, unit.identity, unit.component);
8043
8040
  },
8044
8041
  async restart({ target, service }) {
8045
8042
  const identity = prefixIdentity(target.prefix);
@@ -8077,12 +8074,20 @@ function unitPath(directory, identity, component) {
8077
8074
  function serviceMap(set) {
8078
8075
  return new Map(set.services.map((service) => [service.component, service]));
8079
8076
  }
8080
- async function ownedUnitComponents(directory, identity, previous, target) {
8081
- const owned = /* @__PURE__ */ new Set();
8082
- for (const component of HOST_RUNTIME_SERVICE_COMPONENTS) {
8083
- if ((previous.has(component) || target.has(component)) && await ownedUnitPresent(unitPath(directory, identity, component), identity, component)) owned.add(component);
8077
+ async function ownedHostUnits(directory) {
8078
+ const owned = [];
8079
+ for (const name of await readdir3(directory)) {
8080
+ const match = /^ceal-host-([a-f0-9]{64})-(lifecycle|relay|codex|claude)\.service$/u.exec(name);
8081
+ if (match === null) continue;
8082
+ const identity = match[1];
8083
+ const component = match[2];
8084
+ if (identity === void 0 || !UNIT_ID_PATTERN.test(identity) || !isHostRuntimeServiceComponent(component)) continue;
8085
+ if (await ownedUnitPresent(unitPath(directory, identity, component), identity, component)) owned.push({ identity, component });
8084
8086
  }
8085
- return owned;
8087
+ return owned.sort((left, right) => unitName(left.identity, left.component).localeCompare(unitName(right.identity, right.component)));
8088
+ }
8089
+ function isHostRuntimeServiceComponent(value) {
8090
+ return value !== void 0 && HOST_RUNTIME_SERVICE_COMPONENTS.some((component) => component === value);
8086
8091
  }
8087
8092
  async function ensurePrivateUnitDirectory(directory) {
8088
8093
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corca-org/ceal-host-win32-x64",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -3,12 +3,12 @@
3
3
  "product": "ceal-host",
4
4
  "version_source": {
5
5
  "product": "ceal-host",
6
- "version": "1.0.6"
6
+ "version": "1.0.7"
7
7
  },
8
8
  "source": {
9
9
  "repository": "corca-ai/ceal",
10
- "commit": "2f5fdf77dcc3e3ea15c920e429b40b5e7645c4f0",
11
- "tree": "087f8caa9b3c20febc0ec07ab6fdaa4aed1a2972"
10
+ "commit": "a8d2e68372289765d006db4dfa5a3153e2401cd0",
11
+ "tree": "7e9df152ec5dd90a6eb54d4811b9b8af6c1673ea"
12
12
  },
13
13
  "target": "windows-x64",
14
14
  "required_features": [],
@@ -19,7 +19,7 @@
19
19
  ],
20
20
  "executable": true,
21
21
  "path": "bin/ceal-host.exe",
22
- "sha256": "7131f5da87869cddedb7760b8baf9399126869bb9ec4746a89f5e3f7d5029b72"
22
+ "sha256": "27328ae848c8d3113485b773859899ce41090caa32fb232093f831fc699675c3"
23
23
  },
24
24
  {
25
25
  "owners": [
@@ -27,7 +27,7 @@
27
27
  ],
28
28
  "executable": false,
29
29
  "path": "libexec/ceal-host/claude-hook.mjs",
30
- "sha256": "ed39b7cc61467120420956cdf110305f6d338dbeec74ce94902ed11be3bd9ddf"
30
+ "sha256": "5d38cedda3a1178ff9debf2455ab60e5e1adaf74bcd7a6af7d7a26113360df3a"
31
31
  },
32
32
  {
33
33
  "owners": [
@@ -59,7 +59,7 @@
59
59
  ],
60
60
  "executable": false,
61
61
  "path": "libexec/ceal-host/codex-invocation-authentication.mjs",
62
- "sha256": "2ce3f609ad07ee0c2eb03bb4bf1bdfbc3726bd4ffb9a08b3a357614bd0d36978"
62
+ "sha256": "3056f3ea26ae59faa5ab4e1a1eef548ef4760584a337ffb480216607dc3c97a3"
63
63
  },
64
64
  {
65
65
  "owners": [
@@ -75,7 +75,7 @@
75
75
  ],
76
76
  "executable": false,
77
77
  "path": "libexec/ceal-host/control.mjs",
78
- "sha256": "3715aae4e5622e4b11ad8d4f0b859edfe7e8c4d0aaf00c4ee1c539d17d3064b2"
78
+ "sha256": "31ca0d6e9d224737cf9d91fe6a3c91a6756a067c7e28f7a90f4b45e443dbb33b"
79
79
  },
80
80
  {
81
81
  "owners": [
@@ -1 +1 @@
1
- {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"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"},"tlogEntries":[{"logIndex":"2851888129","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1789510321","inclusionPromise":{"signedEntryTimestamp":"MEQCIDcq0UrNcfJYFvDV1Q35U237A3dQipvp8jh+JtL2yUSCAiAszez0/m0TPCDqHGGY9bwM1VGlfaCYG5EqK816geSKug=="},"inclusionProof":{"logIndex":"2729983867","rootHash":"BWMsQSDbDO+CY0Xjrw/yRmRDdpI/wzCulHx3nBEm51w=","treeSize":"2729983901","hashes":["qBMs6bSw4oDln9Bk2LG4x+viJMw8cP8MfINxAx5iKPQ=","EEn510aK716yngy7I0dH/VCFttNqs2oF4kFtNyh8QBM=","DrUWEmcHY6htBPWM50ZMD8z5NHsGXsyu9QMJfiwq3Wk=","gEOpkugWzRPWUAV4l56159JQYhgSDoteupVa3ssMk1U=","RfrCtWBBpDwtcvbYR6H6R55eQYl9qBvHISBKLjSYl4E=","gB2Y9IQA4brii232OIp5gMx7QECDRrXKoez2cFtz0Gc=","XBY4zKkaEqbQ7zd5qRGJdZOjvKS2UKY+k0zr1xeRcOQ=","dVjH9qnbfId+AIuPJ8Sowkd363iHT1K3qJOOftJ/kKQ=","8VnTUl1T0pyYKQHDaaPvGphiQJ2blvqTAWLeSk8ShMg=","6eJ2wL6DyCPmR2paAMnCoA9UB5Y0dP2GZBKq8nB4J7A=","0yXg08Rdp0sMymnXs60CJ91pj8Cy8YByJ8mft2+xzAo=","/r6e/oZDAaPAU7ZiHA4nPHqwTV906BhyF7AXKiKFTbQ=","8L18Md5aGoBwBlDMyr6RWGH1R8FxNVJoQVNZAdUiGp0=","jD8cvGxxxWJBKtdGs1KwTri/UGL3fv4a/QLD3WyZKbo=","xPjCST8WHvK11hCFqS6gbNPTMB3aUPaNdWFbeH72kgo=","Ty12lwhXheAvfCO/5aYZ9leO0iPQ/txxYFtTQMlm9JY=","oCmst3Ks4vD7eWBowjSTm262iNrZs+SVJ/DUgAa87O8=","UHTD4gppDpUbvjVt5JlrR1znuqkF/Be+5C53hqcVmDA=","jhevWFOJ2cWU6SvzMnAe08zHGcVquRlP7gAed39+wI4=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2729983901\nBWMsQSDbDO+CY0Xjrw/yRmRDdpI/wzCulHx3nBEm51w=\n\n— rekor.sigstore.dev wNI9ajBGAiEAxTdulSQ1dQVy65L6C3tZv6CkFXKWBNoHlu+uae0FmSACIQCGFD4VNhH1x76AtCKOf/ifZ1A41rSt419pHJpQy5VDnA==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIxZWFmZTA4YWE3YzQwZjE4MjQ0ZDk0MWZhNDU4MTMxYzQ4NTcwNWY1ZmUxNjg0MDJmNDdiMDlkMjkwNzkxYWFjIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUR6Vi9HQUdkY01kR1cxdUtaMjdwYzV5NzlueUJiNkovbWg5K1BlcnVpNlZRSWdJTnQ2MjBLall1eHdMUCt2N2s1TkV5TUt0RE1SVERqY0w5WGYvNC9qQm5NPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaEVWRU5EUW5CUFowRjNTVUpCWjBsVlNUaDNRa2x4VXl0UGFVd3hWa3g0TUdoSGFWQmlSRzF5UlhSUmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlVUlRGTmFrbDRUV3BCZUZkb1kwNU5hbGwzVDFSRk1VMXFTWGxOYWtGNFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZaY21WbE0xaFdRVzByUkVwb2FHZHNNMjFqYTNsNVJtd3ZjMWRJWlhacmFUZE1SRzRLZDFSSk9VbEtjV05RV210SmJtTXhSRlZrYkd0cFlsY3ZRVFZuWVRadVdIZDFiVlU0V1c1UVUySnJhMk5aVFVabmEyRlBRMEppU1hkbloxZDFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZ2Vm1wbkNsSkhaRTVMYUhSek1Hc3dTa1ZDYzNodWFXeFFOWFIzZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDFwbldVUldVakJTUVZGSUwwSkdkM2RYYjFwWllVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKT2RtTnRUbWhNVjBad1RESk9iQXBaVjNkMlRHMWtjR1JIYURGWmFUa3pZak5LY2xwdGVIWmtNMDEyWTIxV2MxcFhSbnBhVXpGcVdWYzFhMkZYVW1oa1IxVjFaVmN4YzFGSVNteGFiazEyQ21GSFZtaGFTRTEyWWxkR2NHSnFRVFZDWjI5eVFtZEZSVUZaVHk5TlFVVkNRa04wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUNPRWREYVhOSFFWRlJRbWMzT0hkQlVVbEZSVmhrZG1OdGRHMWlSemt6V0RKU2NBcGpNMEpvWkVkT2IwMUVXVWREYVhOSFFWRlJRbWMzT0hkQlVVMUZTMFJLYlU1WFdtdGFhbU16V2tkT2FrMHlWWHBhVjBWNFRsZE5OVTFxUW14T1JFazFDbGxxVVhkWmFsWnNUbnBaTUU1WFRUQmFha0YzU2tGWlMwdDNXVUpDUVVkRWRucEJRa0pCVVZkUk1sWm9Za05DZVZwWGVHeFpXRTVzU1VkT2FHSnRVbkFLV2tkR01GcFVRV0pDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0V4YW1JelNtcFpVekZvWVZNNWFscFhSbk5OUWpCSFEybHpSMEZSVVVKbk56aDNRVkZaUlFwRU0wcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRVGRDWjI5eVFtZEZSVUZaVHk5TlFVVkpRa013VFVzeWFEQmtTRUo2VDJrNGRtUkhPWEphVnpSMUNsbFhUakJoVnpsMVkzazFibUZZVW05a1Ywb3hZekpXZVZreU9YVmtSMVoxWkVNMWFtSXlNSGRoUVZsTFMzZFpRa0pCUjBSMmVrRkNRMUZTWVVSR2FHOEtaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV3BpTWpCMldUSTVlVmt5UlhSWlYydDJXVEpXYUdKRE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNd3BqZVRsNVdsZDRiRmxZVG14TVYwNW9ZbTFTY0ZwSFJqQmFVelUxWWxkNFFXTnRWbTFqZVRsdldsZEdhMk41T1hSWlYyeDFUVVJuUjBOcGMwZEJVVkZDQ21jM09IZEJVVzlGUzJkM2IwMXRXVEZhYlZKdFRucGthMWt5VFhwYVZFNXNXVlJGTVZsNmEzbE5SMVV3VFdwc2FVNUVRbWxPVjFVelRtcFJNVmw2VW0wS1RVUkJaRUpuYjNKQ1owVkZRVmxQTDAxQlJVeENRVGhOUkZka2NHUkhhREZaYVRGdllqTk9NRnBYVVhkTlFWbExTM2RaUWtKQlIwUjJla0ZDUkVGUmFRcEVRMEp2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJXVEk1ZVZreVJYUlpWMnQyV1RKV2FHSkVRVFJDWjI5eVFtZEZSVUZaVHk5TlFVVk9Da0pEYjAxTFJFcHRUbGRhYTFwcVl6TmFSMDVxVFRKVmVscFhSWGhPVjAwMVRXcENiRTVFU1RWWmFsRjNXV3BXYkU1NldUQk9WMDB3V21wQmQwaDNXVXNLUzNkWlFrSkJSMFIyZWtGQ1JHZFJVa1JCT1hsYVYxcDZUREpvYkZsWFVucE1NakZvWVZjMGQwZG5XVXRMZDFsQ1FrRkhSSFo2UVVKRWQxRk5SRUZ2ZUFwTlZHdDRUbFJWTUU1VWEzcE5RM05IUTJselIwRlJVVUpuTnpoM1FWSkJSVWhSZDJKaFNGSXdZMGhOTmt4NU9XNWhXRkp2WkZkSmRWa3lPWFJNTWs1MkNtTnRUbWhNVjBad1RVSm5SME5wYzBkQlVWRkNaemM0ZDBGU1JVVkRaM2RKVG5wSk5VNTZaelJPYWtGM1lVRlpTMHQzV1VKQ1FVZEVkbnBCUWtWblVtRUtSRVpvYjJSSVVuZGplbTkyVERKa2NHUkhhREZaYVRWcVlqSXdkbGt5T1hsWk1rVjBXVmRyZGxreVZtaGlRemgxV2pKc01HRklWbWxNTTJSMlkyMTBiUXBpUnprelkzazVlVnBYZUd4WldFNXNURmRPYUdKdFVuQmFSMFl3V2xNMU5XSlhlRUZqYlZadFkzazViMXBYUm10amVUbDBXVmRzZFUxRVowZERhWE5IQ2tGUlVVSm5OemgzUVZKTlJVdG5kMjlOYlZreFdtMVNiVTU2Wkd0Wk1rMTZXbFJPYkZsVVJURlplbXQ1VFVkVk1FMXFiR2xPUkVKcFRsZFZNMDVxVVRFS1dYcFNiVTFFUVdoQ1oyOXlRbWRGUlVGWlR5OU5RVVZWUWtKTlRVVllaSFpqYlhSdFlrYzVNMWd5VW5Cak0wSm9aRWRPYjAxR1VVZERhWE5IUVZGUlFncG5OemgzUVZKVlJWSm5lRVZoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NazUyWTIxT2FFeFhSbkJNTWs1c1dWZDNkbGxYVGpCaFZ6bDFDbU41T1hsa1Z6VjZUSHBOTVUxRVNUVk5SR2QzVFVSQk1rd3lSakJrUjFaMFkwaFNla3g2UlhkR2QxbExTM2RaUWtKQlIwUjJla0ZDUm1kUlNrUkJaSGNLWTIxc01sbFlVbXhOUkZsSFEybHpSMEZSVVVKbk56aDNRVkpuUlV0QmQyMWpiVlozWW5wd2FtSXpTbXBaVXpGb1lWTTVhbHBYUm5OUGJrcHNXbXB3ZVFwYVYxcDZUREpvYkZsWFVucE1NakZvWVZjMGQyZFpiMGREYVhOSFFWRlJRakZ1YTBOQ1FVbEZaa0ZTTmtGSVowRmtaMFJrVUZSQ2NYaHpZMUpOYlUxYUNraG9lVnBhZW1ORGIydHdaWFZPTkRoeVppdElhVzVMUVV4NWJuVnFaMEZCUVdGRGJrbEpWekJCUVVGRlFYZENTRTFGVlVOSlNGTTRWRUZwT0hvNFNVZ0taakJqYlhWQ01VcElOMUUzV0dsNk9XOUxiR2R1YmxNeFIzWlBjaTl5YkV4QmFVVkJNbmQxTWs5ck0wTXpWa0l4T0Rjd1VpOVNiMVo2VEVseldVaDNNd3A2ZDNvMFMyZHRVR0Z1YTJjdlJtZDNRMmRaU1V0dldrbDZhakJGUVhkTlJHRkJRWGRhVVVsNFFVOUZkalpKUzJaRU9WRmpjMlYyWTBWUWVrZHhRMGxGQ2tSbk9IRmpOM1paYW04ME0yeEdkeTlrYW5GWlRIUnROWG95T1dKbFJ6WTFORlZIY21WQ1ZFSnlVVWwzWW5aTWJrcFZha0UwY21ZMlNYTk9lRE5HT0d3S1IzRjNPSHBXVmpSUFoyUXdSMHBPTWtwS01reFBWMWxEUzB4d05HeHVVelpFVEV3elpuQnZXbTFhU2tJS0xTMHRMUzFGVGtRZ1EwVlNWRWxHU1VOQlZFVXRMUzB0TFFvPSJ9fX19"}]},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"Hq/giqfEDxgkTZQfpFgTHEhXBfX+FoQC9HsJ0pB5Gqw="},"signature":"MEUCIQDzV/GAGdcMdGW1uKZ27pc5y79nyBb6J/mh9+Perui6VQIgINt620KjYuxwLP+v7k5NEyMKtDMRTDjcL9Xf/4/jBnM="}}
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"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"},"tlogEntries":[{"logIndex":"2858466272","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1789550070","inclusionPromise":{"signedEntryTimestamp":"MEUCIQDiF5nV4Mt6LSIaIh9DM5xjly0PEaFQ+fuhhxfNzB7ySQIgKIisBJO479klCpXvdtwzsTUOCjVjMHMDjS4fL34MWvI="},"inclusionProof":{"logIndex":"2736562010","rootHash":"bnus1pcYPiJKfEui+8wiHi4Y1fkOPx3fNoxAfcN6wnI=","treeSize":"2736562015","hashes":["/j84qo4igSCtxTxvt12SZfZ/xkQmpxOuNXuVpsxLdQQ=","sGCAULLT4ILqAIQRE5LM4yLerMSZJPetQQne8FOlrvs=","hP/7gJMF1cagXxGi6iWZm1+p/GGNmKGPg/xUV8bORVw=","j4AbHhpES+b5VkPFkLDk4yfgLD8UgJZBlI/zxM+fpz8=","jt/wuoeqJKg64rSEGp8eJ6q7tdr9iCRhzRVxqBLAfj8=","lJWF7fD8svJ/gj8o5xQb1TwjSs+8FrhxdXifb95LRT0=","sNnDtIUPNqmm1Fx1QJRdOJtjXNpFpPwn3lnmfHv8ju8=","m3YO7nPrj+FMoYESXrJ0umhoFIG11zFVYeEhPCDg4z0=","awPmL5bGIELflE6W9kwonBK7FlPH86Bgy1F2/M6FHXs=","jFjGo6VJPBdBZS0IQT2SFWeCHafVY/GIVxsb4rVn5Uc=","EPvjiG9k0nRuUUDSiEMTlFyOaKfz+TNIMltVVL91vV4=","5+SCCtj7/SurODJSftta27gfnuDkHqX53akXW2hhyzA=","n+hxEhyY8wOf+95n5A1RtNWPjG3kTLmhzLyAzxUY9xA=","imrIvZj6JTyKLlSm0Orl7ea26tZp+b9u+qI7QmzJJEM=","bUR40APIlDp+hSRs9Sn61sQzjB3I1nWW/EVYUSplyQk=","gGfwuhE97xnhmxu6exffPtS05ABS4/ldyg66sFcxSRE=","jhevWFOJ2cWU6SvzMnAe08zHGcVquRlP7gAed39+wI4=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2736562015\nbnus1pcYPiJKfEui+8wiHi4Y1fkOPx3fNoxAfcN6wnI=\n\n— rekor.sigstore.dev wNI9ajBFAiEAvTcwWnXOmDJZEyx9mXUStsqKPCAvylmSWxfi3/8wlfcCIBIF3H6YMchHCNTAX5xtvSg1VD0Vhb7WeTHnjasvqzez\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIzMmVlYjcwYzU5ODBmYTMwNzMzZDJlYWM2MjY5NTAwYWJlYjA4NjllMGU4ZTkxOTZlZmY5NWNkZDA0ODM1MzdlIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJSGQyTkZwNEVVRnArQjFuUHh0Z0YyVGo1WlJYNXRrMVlKZFJRK3NWY0FnakFpRUFrNFpUSGw4NlJWUmhCNTBZM3F4cFBUcDdoT2JoNEg0bEVFSW1KcHZzZnI0PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaEVWRU5EUW5CUFowRjNTVUpCWjBsVldqTTRiVzB3Tlhwa05TczJOMG8yTWtzM1dqUlBhVzg1ZVhOemQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlVUlRKTlJHdDRUa1JOZDFkb1kwNU5hbGwzVDFSRk1rMUVhM2xPUkUxM1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVYwZUZocU5qaE5TRXBqUm1zNGJFRm9WMGhFTmpOVldqUk5jWFYyV0hKRk5UZzFUM2tLY1ZjcmEwcGxkRk5xY0V4bGFXRmtPWE54UjFOTVkzSnZRblIzZEM5clFTdHlOVkpvYlRkTlMzSkZZV3RCUlZOeFRXRlBRMEppU1hkbloxZDFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZJUWpCTUNtUlRkMVV6Ukd4dVpqUjJOVEUwWjAxa1RWZDVjVXBSZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDFwbldVUldVakJTUVZGSUwwSkdkM2RYYjFwWllVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKT2RtTnRUbWhNVjBad1RESk9iQXBaVjNkMlRHMWtjR1JIYURGWmFUa3pZak5LY2xwdGVIWmtNMDEyWTIxV2MxcFhSbnBhVXpGcVdWYzFhMkZYVW1oa1IxVjFaVmN4YzFGSVNteGFiazEyQ21GSFZtaGFTRTEyWWxkR2NHSnFRVFZDWjI5eVFtZEZSVUZaVHk5TlFVVkNRa04wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUNPRWREYVhOSFFWRlJRbWMzT0hkQlVVbEZSVmhrZG1OdGRHMWlSemt6V0RKU2NBcGpNMEpvWkVkT2IwMUVXVWREYVhOSFFWRlJRbWMzT0hkQlVVMUZTMGRGTkZwRVNteE9hbWQ2VG5wSmVVOUVhek5PYWxaclRVUkJNbHBIU1RCYVIxcG9DazVYUlhwTlZGVjZXbFJKTUUxRVJtcGFSRUYzU2tGWlMwdDNXVUpDUVVkRWRucEJRa0pCVVZkUk1sWm9Za05DZVZwWGVHeFpXRTVzU1VkT2FHSnRVbkFLV2tkR01GcFVRV0pDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0V4YW1JelNtcFpVekZvWVZNNWFscFhSbk5OUWpCSFEybHpSMEZSVVVKbk56aDNRVkZaUlFwRU0wcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRVGRDWjI5eVFtZEZSVUZaVHk5TlFVVkpRa013VFVzeWFEQmtTRUo2VDJrNGRtUkhPWEphVnpSMUNsbFhUakJoVnpsMVkzazFibUZZVW05a1Ywb3hZekpXZVZreU9YVmtSMVoxWkVNMWFtSXlNSGRoUVZsTFMzZFpRa0pCUjBSMmVrRkNRMUZTWVVSR2FHOEtaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV3BpTWpCMldUSTVlVmt5UlhSWlYydDJXVEpXYUdKRE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNd3BqZVRsNVdsZDRiRmxZVG14TVYwNW9ZbTFTY0ZwSFJqQmFVelUxWWxkNFFXTnRWbTFqZVRsdldsZEdhMk41T1hSWlYyeDFUVVJuUjBOcGMwZEJVVkZDQ21jM09IZEJVVzlGUzJkM2IxbFVhR3ROYlZVeVQwUk5NMDFxU1RSUFZHTXlUbGRSZDAxRVdtdFphbEpyV20xRk1WbFVUWGhPVkU1c1RXcFJkMDFYVG1zS1RVUkJaRUpuYjNKQ1owVkZRVmxQTDAxQlJVeENRVGhOUkZka2NHUkhhREZaYVRGdllqTk9NRnBYVVhkTlFWbExTM2RaUWtKQlIwUjJla0ZDUkVGUmFRcEVRMEp2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJXVEk1ZVZreVJYUlpWMnQyV1RKV2FHSkVRVFJDWjI5eVFtZEZSVUZaVHk5TlFVVk9Da0pEYjAxTFIwVTBXa1JLYkU1cVozcE9la2w1VDBSck0wNXFWbXROUkVFeVdrZEpNRnBIV21oT1YwVjZUVlJWZWxwVVNUQk5SRVpxV2tSQmQwaDNXVXNLUzNkWlFrSkJSMFIyZWtGQ1JHZFJVa1JCT1hsYVYxcDZUREpvYkZsWFVucE1NakZvWVZjMGQwZG5XVXRMZDFsQ1FrRkhSSFo2UVVKRWQxRk5SRUZ2ZUFwTlZHdDRUbFJWTUU1VWEzcE5RM05IUTJselIwRlJVVUpuTnpoM1FWSkJSVWhSZDJKaFNGSXdZMGhOTmt4NU9XNWhXRkp2WkZkSmRWa3lPWFJNTWs1MkNtTnRUbWhNVjBad1RVSm5SME5wYzBkQlVWRkNaemM0ZDBGU1JVVkRaM2RKVG5wSk5VNTZaelJPYWtGM1lVRlpTMHQzV1VKQ1FVZEVkbnBCUWtWblVtRUtSRVpvYjJSSVVuZGplbTkyVERKa2NHUkhhREZaYVRWcVlqSXdkbGt5T1hsWk1rVjBXVmRyZGxreVZtaGlRemgxV2pKc01HRklWbWxNTTJSMlkyMTBiUXBpUnprelkzazVlVnBYZUd4WldFNXNURmRPYUdKdFVuQmFSMFl3V2xNMU5XSlhlRUZqYlZadFkzazViMXBYUm10amVUbDBXVmRzZFUxRVowZERhWE5IQ2tGUlVVSm5OemgzUVZKTlJVdG5kMjlaVkdoclRXMVZNazlFVFROTmFrazBUMVJqTWs1WFVYZE5SRnByV1dwU2ExcHRSVEZaVkUxNFRsUk9iRTFxVVhjS1RWZE9hMDFFUVdoQ1oyOXlRbWRGUlVGWlR5OU5RVVZWUWtKTlRVVllaSFpqYlhSdFlrYzVNMWd5VW5Cak0wSm9aRWRPYjAxR1VVZERhWE5IUVZGUlFncG5OemgzUVZKVlJWSm5lRVZoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NazUyWTIxT2FFeFhSbkJNTWs1c1dWZDNkbGxYVGpCaFZ6bDFDbU41T1hsa1Z6VjZUSHBOTVUxRVl6Tk9WRlY1VFVSQk5Fd3lSakJrUjFaMFkwaFNla3g2UlhkR2QxbExTM2RaUWtKQlIwUjJla0ZDUm1kUlNrUkJaSGNLWTIxc01sbFlVbXhOUkZsSFEybHpSMEZSVVVKbk56aDNRVkpuUlV0QmQyMWpiVlozWW5wd2FtSXpTbXBaVXpGb1lWTTVhbHBYUm5OUGJrcHNXbXB3ZVFwYVYxcDZUREpvYkZsWFVucE1NakZvWVZjMGQyZFpiMGREYVhOSFFWRlJRakZ1YTBOQ1FVbEZaa0ZTTmtGSVowRmtaMFJrVUZSQ2NYaHpZMUpOYlUxYUNraG9lVnBhZW1ORGIydHdaWFZPTkRoeVppdElhVzVMUVV4NWJuVnFaMEZCUVdGRGNHWjNiRUZCUVVGRlFYZENTRTFGVlVOSlJsQTVjRWh3V2tKa2JVc0tkV3RwZERkRmVtMTJjekp1YW1nM01uZGtWVmcyYVdKaVRrOVZNeko0VDJkQmFVVkJObWRrVlRNMU4yOHlNVGRqYTIwdk1FNXdSR3BwZGk5UFVXOW1Md3BUU1VOSmVGWkdiSGhQU1M5MVVGVjNRMmRaU1V0dldrbDZhakJGUVhkTlJHRkJRWGRhVVVsM1ZFdFlXVU5SVGtaVVRrNDFhRWh0T0RSUGMwVTVWV2RpQ2pKVlZtZG5hRE0xSzBOaFVrazFPRXhrYjFaQ1FreHpSM1p6YkdNNVZGQkNhMFV4TlRsVVpFTkJha1ZCYzI5TVR6ZGpTSEJJU1hGc1RtZHNSVTFET0ZnS1IxTmxlRVJWY2t0WVNWUnRZa2szUm1rM1p6VTJUMUkyY0ZKSVJVazVWVmx1VlVGaE5IcFFVVzFUVlVNS0xTMHRMUzFGVGtRZ1EwVlNWRWxHU1VOQlZFVXRMUzB0TFFvPSJ9fX19"}]},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"Mu63DFmA+jBzPS6sYmlQCr6whp4OjpGW7/lc3QSDU34="},"signature":"MEUCIHd2NFp4EUFp+B1nPxtgF2Tj5ZRX5tk1YJdRQ+sVcAgjAiEAk4ZTHl86RVRhB50Y3qxpPTp7hObh4H4lEEImJpvsfr4="}}