From 0377da48f58e2fd54d194861382837ba2ae1fca5 Mon Sep 17 00:00:00 2001 From: Rohan Gupta Date: Thu, 20 Aug 2026 19:05:14 -0700 Subject: [PATCH] chore: publish MCPB release assets --- .github/workflows/release.yml | 72 ++++++++++++++++ README.md | 6 +- icon.png | Bin 6328 -> 47103 bytes manifest.json | 4 +- mcp-directory/README.md | 8 +- mcp-directory/icon.png | Bin 6328 -> 47103 bytes mcp-directory/manifest.json | 4 +- scripts/prepare-mcpb.js | 152 ++++++++++++++++++++++++++++----- tasks/lessons.md | 5 ++ tests/release-metadata.test.ts | 54 ++++++++++++ tests/release-workflow.test.ts | 54 +++++++++++- 11 files changed, 324 insertions(+), 35 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2924c7628..7b7a6199e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,6 +4,12 @@ on: push: tags: - "v*.*.*" + workflow_dispatch: + inputs: + release_tag: + description: "Existing v GitHub Release to backfill with an MCPB asset" + required: true + type: string permissions: contents: write @@ -11,6 +17,7 @@ permissions: jobs: release: + if: github.event_name == 'push' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -64,3 +71,68 @@ jobs: else gh release create "$GITHUB_REF_NAME" --title "$GITHUB_REF_NAME" --generate-notes fi + + mcpb: + needs: release + if: >- + always() && + (github.event_name == 'workflow_dispatch' || needs.release.result == 'success') + runs-on: ubuntu-latest + env: + RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} + steps: + - name: Check out packaging tooling + uses: actions/checkout@v4 + with: + path: .packaging-tools + + - name: Verify release tag + env: + GH_TOKEN: ${{ github.token }} + run: | + [[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { + echo "Release tag must match v..: $RELEASE_TAG" + exit 1 + } + gh release view "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" >/dev/null + + - name: Check out release source + uses: actions/checkout@v4 + with: + ref: ${{ env.RELEASE_TAG }} + path: release-source + + - uses: pnpm/action-setup@v4 + with: + version: 10.18.2 + + - uses: actions/setup-node@v4 + with: + node-version: 24 + cache: pnpm + cache-dependency-path: release-source/pnpm-lock.yaml + + - name: Verify package version + run: | + TAG_VERSION="${RELEASE_TAG#v}" + PACKAGE_VERSION=$(node -p "require('./release-source/package.json').version") + test "$PACKAGE_VERSION" = "$TAG_VERSION" || { + echo "package.json version $PACKAGE_VERSION does not match tag $RELEASE_TAG" + exit 1 + } + + - name: Install release dependencies + working-directory: release-source + run: pnpm install --frozen-lockfile + + - name: Build and validate MCPB + run: | + node .packaging-tools/scripts/prepare-mcpb.js \ + --source-dir release-source \ + --output-dir artifacts + echo "MCPB_ASSET=artifacts/harness-mcp-server-${RELEASE_TAG#v}.mcpb" >> "$GITHUB_ENV" + + - name: Upload MCPB to GitHub Release + env: + GH_TOKEN: ${{ github.token }} + run: gh release upload "$RELEASE_TAG" "$MCPB_ASSET" --repo "$GITHUB_REPOSITORY" --clobber diff --git a/README.md b/README.md index 628fe08ad..b8d0f55b1 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ pnpm inspect # Test with MCP Inspector ### Anthropic MCP Directory bundle -The MCPB bundle manifest lives in `[mcp-directory/](mcp-directory/)`, and the bundle icon is tracked at `[icon.png](icon.png)` in the repository root. Copy `mcp-directory/manifest.json` to the bundle root after `pnpm build` so the generated archive contains root-level `manifest.json`, `icon.png`, `build/`, `package.json`, and production `node_modules/`. +The MCPB bundle manifest lives in `[mcp-directory/](mcp-directory/)`, and the 512×512 bundle icon is tracked at `[icon.png](icon.png)` in the repository root. The packaged archive contains root-level `manifest.json`, `icon.png`, `server/`, `package.json`, `npm-shrinkwrap.json`, and production `node_modules/`. To keep the archive small, build MCPB packages from a staging directory: @@ -94,7 +94,9 @@ To keep the archive small, build MCPB packages from a staging directory: pnpm prepare:mcpb ``` -The staged package is written to `dist/mcpb/` with production dependencies installed using npm's flat layout. +The staging directory is written to `dist/mcpb/` with production dependencies installed from `npm-shrinkwrap.json` using npm's flat layout. The pinned official MCPB CLI validates it and creates `dist/harness-mcp-server-.mcpb`. + +Version tags matching `v*.*.*` publish that bundle to the corresponding GitHub Release automatically. To backfill an existing release without republishing npm, run the `Release` workflow manually with its `release_tag` input (for example, `v3.2.20`). The workflow checks out and builds that exact tag before replacing only its versioned MCPB asset. ### CLI Usage diff --git a/icon.png b/icon.png index b7f3878aa5c7c2ba03f09fe3a047359f2dfd0036..c834322f3ce3d4ae6debdc7333b3f6e69acc9a13 100644 GIT binary patch literal 47103 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%0AxJ8Kks{8|n!G9`aM?emdxT>(1LeQ>u+gA#E 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 ZPs6Yz&VwH{!wdp`3NlL4#gfK>{~sE8_1ORb literal 6328 zcmX9@dpy(a`&ScU4moXe$b%eK%r=K8QVx?0Ipnx9Y@}4C

{WIc|97xOt){qLgwf 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 diff --git a/mcp-directory/manifest.json b/mcp-directory/manifest.json index 651b8c07a..f0d8cce4a 100644 --- a/mcp-directory/manifest.json +++ b/mcp-directory/manifest.json @@ -33,11 +33,11 @@ "prompts_generated": true, "server": { "type": "node", - "entry_point": "build/index.js", + "entry_point": "server/index.js", "mcp_config": { "command": "node", "args": [ - "${__dirname}/build/index.js", + "${__dirname}/server/index.js", "stdio" ], "env": { diff --git a/scripts/prepare-mcpb.js b/scripts/prepare-mcpb.js index db74b8400..c970caef6 100644 --- a/scripts/prepare-mcpb.js +++ b/scripts/prepare-mcpb.js @@ -1,42 +1,150 @@ #!/usr/bin/env node -import { copyFileSync, cpSync, existsSync, rmSync, mkdirSync } from "node:fs"; -import { join } from "node:path"; +import { + cpSync, + existsSync, + mkdirSync, + readFileSync, + rmSync, + writeFileSync, +} from "node:fs"; +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { parseArgs } from "node:util"; import { spawnSync } from "node:child_process"; -const root = process.cwd(); -const outDir = join(root, "dist", "mcpb"); +export const MCPB_CLI_PACKAGE = "@anthropic-ai/mcpb@2.1.2"; -function run(command, args, options = {}) { +export function assetNameForVersion(version) { + if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(version)) { + throw new Error(`Invalid MCPB version: ${version}`); + } + return `harness-mcp-server-${version}.mcpb`; +} + +export function normalizeBundleManifest(manifest, version) { + if (manifest.version !== version) { + throw new Error( + `Bundle manifest version ${manifest.version} does not match package version ${version}`, + ); + } + + return { + ...manifest, + server: { + ...manifest.server, + entry_point: "server/index.js", + mcp_config: { + ...manifest.server.mcp_config, + args: manifest.server.mcp_config.args.map((arg) => + arg === "${__dirname}/build/index.js" ? "${__dirname}/server/index.js" : arg, + ), + }, + }, + }; +} + +export function bundlePackageJson(packageJson) { + const directDependencies = new Set([ + ...Object.keys(packageJson.dependencies ?? {}), + ...Object.keys(packageJson.optionalDependencies ?? {}), + ]); + const overrides = Object.fromEntries( + Object.entries(packageJson.pnpm?.overrides ?? {}).filter( + ([name]) => !directDependencies.has(name), + ), + ); + + return { + name: packageJson.name, + version: packageJson.version, + description: packageJson.description, + private: true, + type: packageJson.type, + license: packageJson.license, + engines: packageJson.engines, + dependencies: packageJson.dependencies, + optionalDependencies: packageJson.optionalDependencies, + overrides, + }; +} + +function readJson(path) { + return JSON.parse(readFileSync(path, "utf8")); +} + +function run(command, args, cwd) { const result = spawnSync(command, args, { - cwd: options.cwd ?? root, + cwd, stdio: "inherit", shell: process.platform === "win32", - env: { ...process.env, ...options.env }, }); if (result.status !== 0) { - process.exit(result.status ?? 1); + throw new Error(`${command} ${args.join(" ")} failed with exit code ${result.status ?? "unknown"}`); } } -rmSync(outDir, { recursive: true, force: true }); -mkdirSync(outDir, { recursive: true }); +export function prepareMcpb({ sourceDir = process.cwd(), outputDir } = {}) { + const sourceRoot = resolve(sourceDir); + const toolingRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."); + const outputRoot = resolve(outputDir ?? join(sourceRoot, "dist")); + const stageDir = join(outputRoot, "mcpb"); + const packageJson = readJson(join(sourceRoot, "package.json")); + const manifest = normalizeBundleManifest( + readJson(join(sourceRoot, "mcp-directory", "manifest.json")), + packageJson.version, + ); + const bundlePath = join(outputRoot, assetNameForVersion(packageJson.version)); + + rmSync(stageDir, { recursive: true, force: true }); + rmSync(bundlePath, { force: true }); + mkdirSync(stageDir, { recursive: true }); -run("pnpm", ["build"]); + run("pnpm", ["build"], sourceRoot); -for (const path of ["build", "package.json", "LICENSE", "NOTICE", "icon.png"]) { - const from = join(root, path); - if (existsSync(from)) { - cpSync(from, join(outDir, path), { recursive: true }); + cpSync(join(sourceRoot, "build"), join(stageDir, "server"), { recursive: true }); + for (const path of ["npm-shrinkwrap.json", "LICENSE", "NOTICE"]) { + const from = join(sourceRoot, path); + if (existsSync(from)) { + cpSync(from, join(stageDir, path), { recursive: true }); + } } -} + cpSync(join(toolingRoot, "icon.png"), join(stageDir, "icon.png")); + writeFileSync( + join(stageDir, "package.json"), + `${JSON.stringify(bundlePackageJson(packageJson), null, 2)}\n`, + ); + writeFileSync(join(stageDir, "manifest.json"), `${JSON.stringify(manifest, null, 2)}\n`); -copyFileSync(join(root, "mcp-directory", "manifest.json"), join(outDir, "manifest.json")); + run("npm", ["ci", "--omit=dev", "--ignore-scripts", "--no-audit", "--no-fund"], stageDir); + run("npx", ["--yes", MCPB_CLI_PACKAGE, "validate", join(stageDir, "manifest.json")], sourceRoot); + run("npx", ["--yes", MCPB_CLI_PACKAGE, "pack", stageDir, bundlePath], sourceRoot); + run("npx", ["--yes", MCPB_CLI_PACKAGE, "info", bundlePath], sourceRoot); + + console.error(`[mcpb] Bundle created: ${bundlePath}`); + return bundlePath; +} -run("npm", ["install", "--omit=dev", "--ignore-scripts", "--package-lock=false"], { cwd: outDir }); +function main() { + const { values } = parseArgs({ + options: { + "source-dir": { type: "string" }, + "output-dir": { type: "string" }, + }, + }); -const mcpbPath = join(root, "mcp-server.mcpb"); -rmSync(mcpbPath, { force: true }); -run("zip", ["-r", mcpbPath, "."], { cwd: outDir }); + prepareMcpb({ + sourceDir: values["source-dir"], + outputDir: values["output-dir"], + }); +} -console.error(`[mcpb] Bundle created: ${mcpbPath}`); +const invokedPath = process.argv[1] ? resolve(process.argv[1]) : undefined; +if (invokedPath && fileURLToPath(import.meta.url) === invokedPath) { + try { + main(); + } catch (error) { + console.error(`[mcpb] ${error instanceof Error ? error.message : String(error)}`); + process.exitCode = 1; + } +} diff --git a/tasks/lessons.md b/tasks/lessons.md index 43d53d01b..97a55e59b 100644 --- a/tasks/lessons.md +++ b/tasks/lessons.md @@ -1,5 +1,10 @@ # Lessons Learned +## Production Shrinkwraps Need a Production Staging Manifest +- **Issue**: `npm-shrinkwrap.json` intentionally captures the production dependency tree and npm-native mirrors of the repository's pnpm security overrides. Running `npm ci --omit=dev` against that shrinkwrap and the full development `package.json` still makes npm validate missing dev dependencies and ignore `pnpm.overrides`, so MCPB staging fails even though the release shrinkwrap check is healthy. +- **Fix**: Generate a minimal staging `package.json` with runtime dependencies, optional dependencies, and transitive pnpm overrides mirrored into npm's `overrides`, then run `npm ci` against the checked-in shrinkwrap. +- **Rule**: When consuming a production-only shrinkwrap outside npm publish, pair it with the same production manifest shape used to generate it; `--omit=dev` changes installation, not lockfile validation. + ## List-Filter Enums Must Be Canonicalized at Dispatch - **Issue**: `listFilterFields.enum` is only visible via `harness_describe`. The global `harness_list` schema cannot encode per-resource enums, so agents often send lowercase (`pending`) while APIs require PascalCase/UPPERCASE. Those 400s count as `tool_error` and can page on-call. - **Fix**: `canonicalizeListFilterEnums` in `Registry.dispatch` rewrites case-insensitive matches to declared enum values (including comma-separated tokens). Also clarify that some resources have a lower `size` max than the global 1–100 tool schema. diff --git a/tests/release-metadata.test.ts b/tests/release-metadata.test.ts index 827787313..aebd38b1f 100644 --- a/tests/release-metadata.test.ts +++ b/tests/release-metadata.test.ts @@ -1,13 +1,21 @@ import { readFileSync } from "node:fs"; import { join } from "node:path"; import { describe, expect, it } from "vitest"; +import { + MCPB_CLI_PACKAGE, + assetNameForVersion, + bundlePackageJson, + normalizeBundleManifest, +} from "../scripts/prepare-mcpb.js"; const root = process.cwd(); interface BundleManifest { version: string; server: { + entry_point: string; mcp_config: { + args: string[]; env: Record; }; }; @@ -29,6 +37,52 @@ describe("release metadata", () => { expect(directoryManifest.version).toBe(packageJson.version); }); + it("uses a relocatable server entry point in packaged manifests", () => { + for (const manifest of [readJson("manifest.json"), readJson("mcp-directory/manifest.json")]) { + expect(manifest.server.entry_point).toBe("server/index.js"); + expect(manifest.server.mcp_config.args).toEqual([ + "${__dirname}/server/index.js", + "stdio", + ]); + } + }); + + it("keeps bundle naming stable and can normalize legacy release manifests", () => { + const legacyManifest = readJson("mcp-directory/manifest.json"); + legacyManifest.server.entry_point = "build/index.js"; + legacyManifest.server.mcp_config.args[0] = "${__dirname}/build/index.js"; + + expect(assetNameForVersion("3.2.20")).toBe("harness-mcp-server-3.2.20.mcpb"); + expect(MCPB_CLI_PACKAGE).toBe("@anthropic-ai/mcpb@2.1.2"); + expect(normalizeBundleManifest(legacyManifest, "3.2.20").server).toMatchObject({ + entry_point: "server/index.js", + mcp_config: { args: ["${__dirname}/server/index.js", "stdio"] }, + }); + }); + + it("creates an npm-ci-compatible production package manifest", () => { + const packageJson = JSON.parse(readFileSync(join(root, "package.json"), "utf8")); + const bundled = bundlePackageJson(packageJson); + + expect(bundled).not.toHaveProperty("devDependencies"); + expect(bundled).not.toHaveProperty("scripts"); + expect(bundled.dependencies).toEqual(packageJson.dependencies); + expect(bundled.optionalDependencies).toEqual(packageJson.optionalDependencies); + expect(bundled.overrides.sharp).toBe(packageJson.pnpm.overrides.sharp); + expect(bundled.overrides).not.toHaveProperty("hono"); + }); + + it("ships matching 512×512 directory icons", () => { + const icons = [readFileSync(join(root, "icon.png")), readFileSync(join(root, "mcp-directory/icon.png"))]; + + for (const icon of icons) { + expect(icon.subarray(1, 4).toString("ascii")).toBe("PNG"); + expect(icon.readUInt32BE(16)).toBe(512); + expect(icon.readUInt32BE(20)).toBe(512); + } + expect(icons[0].equals(icons[1])).toBe(true); + }); + it("exposes FME config in packaged manifests", () => { for (const manifest of [readJson("manifest.json"), readJson("mcp-directory/manifest.json")]) { expect(manifest.server.mcp_config.env.HARNESS_FME_API_KEY).toBe("${user_config.HARNESS_FME_API_KEY}"); diff --git a/tests/release-workflow.test.ts b/tests/release-workflow.test.ts index 7d35a43bf..74def5764 100644 --- a/tests/release-workflow.test.ts +++ b/tests/release-workflow.test.ts @@ -6,11 +6,25 @@ import { describe, expect, it } from "vitest"; type WorkflowStep = { name?: string; run?: string; + uses?: string; + with?: Record; }; type ReleaseWorkflow = { + on: { + push: { tags: string[] }; + workflow_dispatch: { + inputs: { release_tag: { required: boolean; type: string } }; + }; + }; jobs: { release: { + if: string; + steps: WorkflowStep[]; + }; + mcpb: { + if: string; + needs: string; steps: WorkflowStep[]; }; }; @@ -22,8 +36,12 @@ function readReleaseWorkflow(): ReleaseWorkflow { return parse(readFileSync(join(root, ".github/workflows/release.yml"), "utf8")) as ReleaseWorkflow; } -function runScriptForStep(workflow: ReleaseWorkflow, stepName: string): string { - const step = workflow.jobs.release.steps.find((candidate) => candidate.name === stepName); +function runScriptForStep( + workflow: ReleaseWorkflow, + jobName: keyof ReleaseWorkflow["jobs"], + stepName: string, +): string { + const step = workflow.jobs[jobName].steps.find((candidate) => candidate.name === stepName); expect(step, `Expected release workflow to include step ${stepName}`).toBeDefined(); expect(step?.run, `Expected release workflow step ${stepName} to run shell commands`).toBeDefined(); return step?.run ?? ""; @@ -32,7 +50,7 @@ function runScriptForStep(workflow: ReleaseWorkflow, stepName: string): string { describe("release workflow", () => { it("does not fail when the package version is already published to npm", () => { const workflow = readReleaseWorkflow(); - const script = runScriptForStep(workflow, "Publish to npm"); + const script = runScriptForStep(workflow, "release", "Publish to npm"); expect(script).toContain("npm view \"$PKG_NAME@$PKG_VERSION\" version"); expect(script).toContain("npm publish"); @@ -41,10 +59,38 @@ describe("release workflow", () => { it("does not fail when the GitHub Release already exists", () => { const workflow = readReleaseWorkflow(); - const script = runScriptForStep(workflow, "Create GitHub Release"); + const script = runScriptForStep(workflow, "release", "Create GitHub Release"); expect(script).toContain("gh release view \"$GITHUB_REF_NAME\""); expect(script).toContain("gh release create \"$GITHUB_REF_NAME\""); expect(script).toContain("already exists"); }); + + it("publishes versioned MCPB assets for tags and exact-tag backfills", () => { + const workflow = readReleaseWorkflow(); + const verifyTag = runScriptForStep(workflow, "mcpb", "Verify release tag"); + const verifyVersion = runScriptForStep(workflow, "mcpb", "Verify package version"); + const build = runScriptForStep(workflow, "mcpb", "Build and validate MCPB"); + const upload = runScriptForStep(workflow, "mcpb", "Upload MCPB to GitHub Release"); + const sourceCheckout = workflow.jobs.mcpb.steps.find( + (step) => step.name === "Check out release source", + ); + + expect(workflow.on.push.tags).toEqual(["v*.*.*"]); + expect(workflow.on.workflow_dispatch.inputs.release_tag).toMatchObject({ + required: true, + type: "string", + }); + expect(workflow.jobs.release.if).toBe("github.event_name == 'push'"); + expect(workflow.jobs.mcpb.needs).toBe("release"); + expect(workflow.jobs.mcpb.if).toContain("github.event_name == 'workflow_dispatch'"); + expect(verifyTag).toContain("^v[0-9]+"); + expect(verifyTag).toContain('gh release view "$RELEASE_TAG"'); + expect(sourceCheckout?.with?.ref).toBe("${{ env.RELEASE_TAG }}"); + expect(verifyVersion).toContain('PACKAGE_VERSION=$(node -p'); + expect(build).toContain("--source-dir release-source"); + expect(build).toContain("harness-mcp-server-${RELEASE_TAG#v}.mcpb"); + expect(upload).toContain('gh release upload "$RELEASE_TAG" "$MCPB_ASSET"'); + expect(upload).toContain("--clobber"); + }); });

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 ZPs6Yz&VwH{!wdp`3NlL4#gfK>{~sE8_1ORb literal 6328 zcmX9@dpy(a`&ScU4moXe$b%eK%r=K8QVx?0Ipnx9Y@}4C

{WIc|97xOt){qLgwf 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 diff --git a/manifest.json b/manifest.json index 529170096..1a568fd41 100644 --- a/manifest.json +++ b/manifest.json @@ -33,11 +33,11 @@ "prompts_generated": true, "server": { "type": "node", - "entry_point": "build/index.js", + "entry_point": "server/index.js", "mcp_config": { "command": "node", "args": [ - "${__dirname}/build/index.js", + "${__dirname}/server/index.js", "stdio" ], "env": { diff --git a/mcp-directory/README.md b/mcp-directory/README.md index ea44e6f46..e41bdfd30 100644 --- a/mcp-directory/README.md +++ b/mcp-directory/README.md @@ -1,16 +1,18 @@ # MCPB directory bundle files This directory contains the tracked metadata copied to the root of the Anthropic MCP Directory bundle. -The bundle root also includes `icon.png`, which is the same Harness logo tracked at the repository root. +The bundle root also includes `icon.png`, which is the same 512×512 Harness logo tracked at the repository root. - `manifest.json` follows MCPB manifest spec `0.3`. - `icon.png` is the bundle icon referenced by the manifest. -Build the staging directory before packing: +Build, validate, and pack the bundle: ```bash pnpm install --frozen-lockfile pnpm prepare:mcpb ``` -Pack `dist/mcpb/`, not the repository root. The staging directory contains only the files needed at runtime: `manifest.json`, `icon.png`, `build/`, `package.json`, `LICENSE`, and production `node_modules/` installed with npm's flat layout. \ No newline at end of file +The staging directory at `dist/mcpb/` contains only the files needed at runtime: `manifest.json`, `icon.png`, `server/`, `package.json`, `npm-shrinkwrap.json`, `LICENSE`, and production `node_modules/`. The versioned output is `dist/harness-mcp-server-.mcpb`. + +The `Release` GitHub Actions workflow attaches this cross-platform bundle to every `v*.*.*` GitHub Release. Its manual `release_tag` input safely backfills an existing release from that exact tag. diff --git a/mcp-directory/icon.png b/mcp-directory/icon.png index b7f3878aa5c7c2ba03f09fe3a047359f2dfd0036..c834322f3ce3d4ae6debdc7333b3f6e69acc9a13 100644 GIT binary patch literal 47103 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%0AxJ8Kks{8|n!G9`aM?emdxT>(1LeQ>u+gA#E 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