From 24f3e4e2495ebd25868274db94f36efaceb2a87f Mon Sep 17 00:00:00 2001
From: Jeremy McSpadden <979742+jeremymcspadden@users.noreply.github.com>
Date: Thu, 21 May 2026 19:15:50 -0500
Subject: [PATCH 1/2] feat: add repo agent instructions
---
client/src/pages/settings.tsx | 22 +++++++++++++++
server/babysitter.test.ts | 4 +++
server/babysitter.ts | 41 +++++++++++++++++++++++++---
server/backgroundJobHandlers.test.ts | 7 ++++-
server/backgroundJobHandlers.ts | 1 +
server/issueWorkAgent.test.ts | 18 ++++++++++++
server/issueWorkAgent.ts | 13 +++++++++
server/memoryStorage.test.ts | 3 ++
server/memoryStorage.ts | 2 ++
server/routes.test.ts | 8 ++++++
server/routes.ts | 2 ++
server/sqliteStorage.ts | 22 ++++++++++-----
server/storage.test.ts | 7 +++++
shared/models.ts | 4 +++
shared/schema.ts | 1 +
15 files changed, 143 insertions(+), 12 deletions(-)
diff --git a/client/src/pages/settings.tsx b/client/src/pages/settings.tsx
index df7cf7d..890b767 100644
--- a/client/src/pages/settings.tsx
+++ b/client/src/pages/settings.tsx
@@ -1118,6 +1118,28 @@ export default function Settings() {
+
+
+
);
})}
diff --git a/server/babysitter.test.ts b/server/babysitter.test.ts
index 206ac06..0e6570c 100644
--- a/server/babysitter.test.ts
+++ b/server/babysitter.test.ts
@@ -5023,6 +5023,9 @@ test("babysitPR retries docs assessment for same-SHA failed state", async () =>
test("babysitPR runs agent for docs-only work when docs assessment says needed", async () => {
const storage = new MemStorage();
+ await storage.updateRepoSettings("alex-morgan-o/lolodex", {
+ agentInstructions: "Use pnpm docs:check before finishing.",
+ });
const pr = await storage.addPR({
number: 106,
title: "Docs-only remediation",
@@ -5092,6 +5095,7 @@ test("babysitPR runs agent for docs-only work when docs assessment says needed",
assert.equal(updated?.docsAssessment?.status, "needed");
assert.match(capturedPrompt, /Approved documentation tasks:/);
assert.match(capturedPrompt, /README and API docs need updates/);
+ assert.match(capturedPrompt, /Use pnpm docs:check before finishing\./);
assert.match(capturedPrompt, /DOCS_SUMMARY_START /);
} finally {
delete process.env.CODEFACTORY_HOME;
diff --git a/server/babysitter.ts b/server/babysitter.ts
index b45a90c..4a8b343 100644
--- a/server/babysitter.ts
+++ b/server/babysitter.ts
@@ -390,14 +390,29 @@ function truncateForPrompt(input: string, maxChars: number): string {
return `${input.slice(0, maxChars)}\n... (truncated)`;
}
+function formatRepoAgentInstructions(instructions?: string | null): string[] {
+ const trimmed = instructions?.trim();
+ if (!trimmed) {
+ return ["Repository agent instructions: none"];
+ }
+
+ return [
+ "Repository agent instructions:",
+ "```",
+ truncateForPrompt(trimmed, 4000),
+ "```",
+ ];
+}
+
function buildDocumentationAssessmentPrompt(params: {
pr: PR;
pullSummary: GitHubPullSummary;
changedFiles: string;
diffStat: string;
diffPreview: string;
+ agentInstructions?: string | null;
}): string {
- const { pr, pullSummary, changedFiles, diffStat, diffPreview } = params;
+ const { pr, pullSummary, changedFiles, diffStat, diffPreview, agentInstructions } = params;
return [
"You are deciding whether a pull request requires repository documentation updates.",
@@ -408,6 +423,8 @@ function buildDocumentationAssessmentPrompt(params: {
`Base branch: ${pullSummary.baseRef}`,
`Head branch: ${pullSummary.headRef}`,
"",
+ ...formatRepoAgentInstructions(agentInstructions),
+ "",
"Changed files (git diff --name-only origin/base...HEAD):",
truncateForPrompt(changedFiles || "None", 4000),
"",
@@ -452,8 +469,9 @@ function buildConflictResolutionPrompt(params: {
pullSummary: GitHubPullSummary;
remoteName: string;
conflictFiles: string[];
+ agentInstructions?: string | null;
}): string {
- const { pr, pullSummary, remoteName, conflictFiles } = params;
+ const { pr, pullSummary, remoteName, conflictFiles, agentInstructions } = params;
return [
`You are acting as an autonomous PR babysitter for ${pr.repo} PR #${pr.number}.`,
@@ -465,6 +483,8 @@ function buildConflictResolutionPrompt(params: {
`Head remote: ${remoteName}`,
"You are running inside an isolated app-owned worktree under ~/.patchdeck.",
"",
+ ...formatRepoAgentInstructions(agentInstructions),
+ "",
"A merge from the base branch into the head branch has been started but has conflicts.",
"The following files have merge conflicts:",
...conflictFiles.map((f) => ` - ${f}`),
@@ -490,8 +510,9 @@ function buildAgentFixPrompt(params: {
commentTasks: FeedbackItem[];
statusTasks: { context: string; description: string; targetUrl: string | null }[];
docsTaskSummary: string | null;
+ agentInstructions?: string | null;
}): string {
- const { pr, pullSummary, remoteName, commentTasks, statusTasks, docsTaskSummary } = params;
+ const { pr, pullSummary, remoteName, commentTasks, statusTasks, docsTaskSummary, agentInstructions } = params;
const commentSection = commentTasks.length
? commentTasks
@@ -543,6 +564,8 @@ function buildAgentFixPrompt(params: {
"GitHub follow-up replies and review-thread resolution will be handled by the babysitter after your run.",
"If a task is invalid after inspection, explain it in your final response and include the exact audit token.",
"",
+ ...formatRepoAgentInstructions(agentInstructions),
+ "",
"Approved review-comment tasks:",
commentSection,
"",
@@ -571,8 +594,9 @@ function buildCodeOwnerFallbackPrompt(params: {
pr: PR;
pullSummary: GitHubPullSummary;
remoteName: string;
+ agentInstructions?: string | null;
}): string {
- const { pr, pullSummary, remoteName } = params;
+ const { pr, pullSummary, remoteName, agentInstructions } = params;
return [
pr.url,
@@ -589,6 +613,8 @@ function buildCodeOwnerFallbackPrompt(params: {
"- Review the latest PR review comments, unresolved review threads, issue comments, and failing checks.",
"- Treat reviewer feedback as actionable by default, but validate it against the current code before changing anything. You can reject the feedback if it's not a valid feedback.",
"",
+ ...formatRepoAgentInstructions(agentInstructions),
+ "",
"Task:",
"1. Fetch and inspect the current PR state.",
"2. For each review comment/thread:",
@@ -3376,10 +3402,12 @@ export class PRBabysitter {
});
await ensureGitIdentity(worktreePath, this.runtime.runCommand);
+ const fallbackRepoSettings = await this.storage.getRepoSettings(pr.repo);
const prompt = buildCodeOwnerFallbackPrompt({
pr,
pullSummary,
remoteName,
+ agentInstructions: fallbackRepoSettings?.agentInstructions ?? "",
});
await updateRunRecord({
@@ -3559,6 +3587,8 @@ export class PRBabysitter {
await updateRunRecord({
resolvedAgent: agent,
});
+ const repoSettings = await this.storage.getRepoSettings(pr.repo);
+ const repoAgentInstructions = repoSettings?.agentInstructions ?? "";
const parsedRepo = parseRepoSlug(pr.repo);
if (!parsedRepo) {
@@ -4479,6 +4509,7 @@ export class PRBabysitter {
changedFiles: changedFilesResult.stdout.trim(),
diffStat: diffStatResult.stdout.trim(),
diffPreview: diffPreviewResult.stdout.trim(),
+ agentInstructions: repoAgentInstructions,
});
await queueLog(pr.id, "info", `Evaluating documentation needs with ${agent}`, {
phase: "evaluate.docs",
@@ -4680,6 +4711,7 @@ export class PRBabysitter {
pullSummary,
remoteName,
conflictFiles: normalizedConflictFiles,
+ agentInstructions: repoAgentInstructions,
});
await queueLog(pr.id, "info", `Launching ${agent} to resolve merge conflicts`, {
@@ -4818,6 +4850,7 @@ export class PRBabysitter {
commentTasks: effectiveCommentTasks,
statusTasks,
docsTaskSummary,
+ agentInstructions: repoAgentInstructions,
});
await updateRunRecord({
diff --git a/server/backgroundJobHandlers.test.ts b/server/backgroundJobHandlers.test.ts
index bba4c9d..fb31f82 100644
--- a/server/backgroundJobHandlers.test.ts
+++ b/server/backgroundJobHandlers.test.ts
@@ -317,6 +317,9 @@ test("work_issue handler opens a PR after a successful repair run", async () =>
codingAgent: "claude",
postGitHubProgressReplies: true,
});
+ await storage.updateRepoSettings("acme/widgets", {
+ agentInstructions: "Use pnpm for this repository.",
+ });
const queue = new BackgroundJobQueue(storage);
const job = await queue.enqueue(
"work_issue",
@@ -332,7 +335,7 @@ test("work_issue handler opens a PR after a successful repair run", async () =>
);
const pullsCreated: Array> = [];
const commentsCreated: Array> = [];
- const repairCalls: Array<{ repo: string; issueNumber: number; baseBranch: string; repoCloneUrl: string }> = [];
+ const repairCalls: Array<{ repo: string; issueNumber: number; baseBranch: string; repoCloneUrl: string; agentInstructions?: string | null }> = [];
const octokit = {
issues: {
get: async () => ({
@@ -375,6 +378,7 @@ test("work_issue handler opens a PR after a successful repair run", async () =>
issueNumber: input.issueNumber,
baseBranch: input.baseBranch,
repoCloneUrl: input.repoCloneUrl,
+ agentInstructions: input.agentInstructions,
});
return {
accepted: true,
@@ -394,6 +398,7 @@ test("work_issue handler opens a PR after a successful repair run", async () =>
issueNumber: 17,
baseBranch: "main",
repoCloneUrl: "https://x-access-token:gho_token@github.com/acme/widgets.git",
+ agentInstructions: "Use pnpm for this repository.",
}]);
assert.equal(pullsCreated.length, 1);
assert.equal(pullsCreated[0]?.head, "issue/17-fix-the-toggle-123");
diff --git a/server/backgroundJobHandlers.ts b/server/backgroundJobHandlers.ts
index b5154bd..1918501 100644
--- a/server/backgroundJobHandlers.ts
+++ b/server/backgroundJobHandlers.ts
@@ -577,6 +577,7 @@ export function createBackgroundJobHandlers(params: {
repoCloneUrl: buildGitHubCloneUrl(issue.repoFullName, githubToken),
agent,
agentSettings,
+ agentInstructions: repoSettings?.agentInstructions ?? "",
subtasks: subtasks.length >= 2 ? subtasks : undefined,
});
} catch (error) {
diff --git a/server/issueWorkAgent.test.ts b/server/issueWorkAgent.test.ts
index 267a083..2daa757 100644
--- a/server/issueWorkAgent.test.ts
+++ b/server/issueWorkAgent.test.ts
@@ -40,6 +40,24 @@ test("buildIssueWorkPrompt includes repository contribution guidance when presen
assert.match(prompt, /Keep changes small and update tests\./);
});
+test("buildIssueWorkPrompt includes custom repository agent instructions", () => {
+ const prompt = buildIssueWorkPrompt({
+ repo: "acme/widgets",
+ issueNumber: 17,
+ issueTitle: "Fix the toggle",
+ issueUrl: "https://github.com/acme/widgets/issues/17",
+ issueBody: "The toggle is stuck",
+ labels: [],
+ author: "alice",
+ baseBranch: "main",
+ agent: "claude",
+ agentInstructions: "Use pnpm test for focused verification.",
+ });
+
+ assert.match(prompt, /Repository agent instructions:/);
+ assert.match(prompt, /Use pnpm test for focused verification\./);
+});
+
test("runIssueWorkRepair commits, pushes, and verifies the issue branch", async () => {
const calls: Array<{ command: string; args: string[]; cwd?: string }> = [];
let agentPrompt = "";
diff --git a/server/issueWorkAgent.ts b/server/issueWorkAgent.ts
index 5cab862..4bf4ed5 100644
--- a/server/issueWorkAgent.ts
+++ b/server/issueWorkAgent.ts
@@ -20,6 +20,7 @@ export type IssueWorkPromptInput = {
agent: CodingAgent;
agentSettings?: AgentRuntimeSettings;
contributionGuidance?: string | null;
+ agentInstructions?: string | null;
subtasks?: IssueSubtask[];
};
@@ -77,6 +78,7 @@ export function buildIssueWorkPrompt(input: IssueWorkPromptInput): string {
const labels = input.labels.length > 0 ? input.labels.join(", ") : "none";
const author = input.author || "unknown";
const contributionGuidance = input.contributionGuidance?.trim();
+ const agentInstructions = input.agentInstructions?.trim();
const guidance = contributionGuidance
? [
"Repository contribution guidance:",
@@ -89,6 +91,14 @@ export function buildIssueWorkPrompt(input: IssueWorkPromptInput): string {
"- No CONTRIBUTING.md was found in the repository.",
"- Use the concise issue-reply and PR-body templates below.",
].join("\n");
+ const customInstructions = agentInstructions
+ ? [
+ "Repository agent instructions:",
+ "```",
+ trimText(agentInstructions, 4000),
+ "```",
+ ].join("\n")
+ : "Repository agent instructions: none";
const hasSubtasks = (input.subtasks?.length ?? 0) >= 2;
const subtaskSection = hasSubtasks
@@ -145,6 +155,8 @@ export function buildIssueWorkPrompt(input: IssueWorkPromptInput): string {
"",
guidance,
"",
+ customInstructions,
+ "",
"Fallback response template:",
"```",
"## Summary",
@@ -448,6 +460,7 @@ export async function runIssueWorkRepair(
repoContributionGuidance ? `CONTRIBUTING.md:\n${repoContributionGuidance}` : null,
repoPullRequestTemplate ? `.github/pull_request_template.md:\n${repoPullRequestTemplate}` : null,
].filter((value): value is string => Boolean(value)).join("\n\n") || null,
+ agentInstructions: input.agentInstructions,
});
const branchCreate = await deps.runCommand(
"git",
diff --git a/server/memoryStorage.test.ts b/server/memoryStorage.test.ts
index 081c761..5a4a845 100644
--- a/server/memoryStorage.test.ts
+++ b/server/memoryStorage.test.ts
@@ -493,6 +493,7 @@ describe("MemStorage", () => {
codexReasoningEffort: null,
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
}]);
});
@@ -516,6 +517,7 @@ describe("MemStorage", () => {
codexReasoningEffort: null,
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
});
const config = await storage.getConfig();
@@ -534,6 +536,7 @@ describe("MemStorage", () => {
codexReasoningEffort: null,
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
});
});
});
diff --git a/server/memoryStorage.ts b/server/memoryStorage.ts
index 96b9ede..0298caf 100644
--- a/server/memoryStorage.ts
+++ b/server/memoryStorage.ts
@@ -300,6 +300,7 @@ export class MemStorage implements IStorage {
codexReasoningEffort: null,
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
};
const next = applyWatchedRepoUpdate(existing, updates);
this.repoSettings.set(repo, next);
@@ -453,6 +454,7 @@ export class MemStorage implements IStorage {
codexReasoningEffort: null,
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
});
}
}
diff --git a/server/routes.test.ts b/server/routes.test.ts
index b9e4d1f..3832ed5 100644
--- a/server/routes.test.ts
+++ b/server/routes.test.ts
@@ -1352,6 +1352,7 @@ test("GET/PATCH /api/repos/settings exposes repo-level settings", async () => {
codexReasoningEffort: "default" | "low" | "medium" | "high" | "xhigh" | null;
claudeModel: string | null;
claudeEffort: "default" | "low" | "medium" | "high" | "xhigh" | "max" | null;
+ agentInstructions: string;
}>;
assert.deepEqual(initial, [{
repo: "acme/widgets",
@@ -1365,6 +1366,7 @@ test("GET/PATCH /api/repos/settings exposes repo-level settings", async () => {
codexReasoningEffort: null,
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
}]);
const updateResponse = await fetch(`${harness.baseUrl}/api/repos/settings`, {
@@ -1382,6 +1384,7 @@ test("GET/PATCH /api/repos/settings exposes repo-level settings", async () => {
codexReasoningEffort: "high",
claudeModel: "sonnet",
claudeEffort: "xhigh",
+ agentInstructions: "Prefer the repo's pnpm scripts before npm.",
}),
});
assert.equal(updateResponse.status, 200);
@@ -1397,6 +1400,7 @@ test("GET/PATCH /api/repos/settings exposes repo-level settings", async () => {
codexReasoningEffort: "default" | "low" | "medium" | "high" | "xhigh" | null;
claudeModel: string | null;
claudeEffort: "default" | "low" | "medium" | "high" | "xhigh" | "max" | null;
+ agentInstructions: string;
};
// Enabling auto-work implicitly enables auto-evaluate — they're dependent settings,
// not independent flags. Verifies coercion in applyWatchedRepoUpdate.
@@ -1412,6 +1416,7 @@ test("GET/PATCH /api/repos/settings exposes repo-level settings", async () => {
codexReasoningEffort: "high",
claudeModel: "sonnet",
claudeEffort: "xhigh",
+ agentInstructions: "Prefer the repo's pnpm scripts before npm.",
});
const persisted = await harness.storage.getRepoSettings("acme/widgets");
@@ -1427,6 +1432,7 @@ test("GET/PATCH /api/repos/settings exposes repo-level settings", async () => {
codexReasoningEffort: "high",
claudeModel: "sonnet",
claudeEffort: "xhigh",
+ agentInstructions: "Prefer the repo's pnpm scripts before npm.",
});
} finally {
await harness.close();
@@ -1465,6 +1471,7 @@ test("PATCH /api/repos/settings can update only ownPrsOnly", async () => {
codexReasoningEffort: "default" | "low" | "medium" | "high" | "xhigh" | null;
claudeModel: string | null;
claudeEffort: "default" | "low" | "medium" | "high" | "xhigh" | "max" | null;
+ agentInstructions: string;
};
assert.deepEqual(updated, {
repo: "acme/widgets",
@@ -1478,6 +1485,7 @@ test("PATCH /api/repos/settings can update only ownPrsOnly", async () => {
codexReasoningEffort: null,
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
});
} finally {
await harness.close();
diff --git a/server/routes.ts b/server/routes.ts
index 753c204..3df62e5 100644
--- a/server/routes.ts
+++ b/server/routes.ts
@@ -429,6 +429,7 @@ export async function registerRoutes(
codexReasoningEffort: codexReasoningEffortSchema.nullable().optional(),
claudeModel: z.string().nullable().optional(),
claudeEffort: claudeEffortSchema.nullable().optional(),
+ agentInstructions: z.string().optional(),
}).refine(
(value) => (
value.autoCreateReleases !== undefined
@@ -441,6 +442,7 @@ export async function registerRoutes(
|| value.codexReasoningEffort !== undefined
|| value.claudeModel !== undefined
|| value.claudeEffort !== undefined
+ || value.agentInstructions !== undefined
),
"At least one repository setting must be provided",
).parse(req.body);
diff --git a/server/sqliteStorage.ts b/server/sqliteStorage.ts
index e5e6f97..46af77c 100644
--- a/server/sqliteStorage.ts
+++ b/server/sqliteStorage.ts
@@ -183,6 +183,7 @@ type WatchedRepoRow = {
codex_reasoning_effort: Config["codexReasoningEffort"] | null;
claude_model: string | null;
claude_effort: Config["claudeEffort"] | null;
+ agent_instructions: string | null;
};
type FeedbackItemRow = {
@@ -604,7 +605,8 @@ export class SqliteStorage implements IStorage {
codex_model TEXT,
codex_reasoning_effort TEXT,
claude_model TEXT,
- claude_effort TEXT
+ claude_effort TEXT,
+ agent_instructions TEXT NOT NULL DEFAULT ''
);
CREATE TABLE IF NOT EXISTS prs (
@@ -969,6 +971,7 @@ export class SqliteStorage implements IStorage {
this.ensureColumn("watched_repos", "codex_reasoning_effort", "TEXT");
this.ensureColumn("watched_repos", "claude_model", "TEXT");
this.ensureColumn("watched_repos", "claude_effort", "TEXT");
+ this.ensureColumn("watched_repos", "agent_instructions", "TEXT NOT NULL DEFAULT ''");
this.exec("UPDATE watched_repos SET issue_auto_evaluate = 1 WHERE issue_auto_work = 1 AND issue_auto_evaluate = 0");
this.ensureColumn("config", "max_concurrent_issue_evaluations", "INTEGER NOT NULL DEFAULT 2");
this.ensureColumn("config", "max_concurrent_issue_work", "INTEGER NOT NULL DEFAULT 1");
@@ -1239,7 +1242,7 @@ export class SqliteStorage implements IStorage {
for (const repo of config.watchedRepos) {
const settings = watchedRepoSettings.get(repo);
this.run(
- "INSERT INTO watched_repos (repo, auto_create_releases, own_prs_only, issue_auto_evaluate, issue_auto_work, pr_auto_monitor, coding_agent_override, codex_model, codex_reasoning_effort, claude_model, claude_effort) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
+ "INSERT INTO watched_repos (repo, auto_create_releases, own_prs_only, issue_auto_evaluate, issue_auto_work, pr_auto_monitor, coding_agent_override, codex_model, codex_reasoning_effort, claude_model, claude_effort, agent_instructions) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
repo,
settings?.auto_create_releases ?? 0,
settings?.own_prs_only ?? 1,
@@ -1251,6 +1254,7 @@ export class SqliteStorage implements IStorage {
settings?.codex_reasoning_effort ?? null,
settings?.claude_model ?? null,
settings?.claude_effort ?? null,
+ settings?.agent_instructions ?? "",
);
}
});
@@ -1269,12 +1273,13 @@ export class SqliteStorage implements IStorage {
codexReasoningEffort: row.codex_reasoning_effort ?? null,
claudeModel: row.claude_model ?? null,
claudeEffort: row.claude_effort ?? null,
+ agentInstructions: row.agent_instructions ?? "",
};
}
private getWatchedRepoRows(): WatchedRepoRow[] {
return this.all(
- "SELECT repo, auto_create_releases, own_prs_only, issue_auto_evaluate, issue_auto_work, pr_auto_monitor, coding_agent_override, codex_model, codex_reasoning_effort, claude_model, claude_effort FROM watched_repos ORDER BY repo ASC",
+ "SELECT repo, auto_create_releases, own_prs_only, issue_auto_evaluate, issue_auto_work, pr_auto_monitor, coding_agent_override, codex_model, codex_reasoning_effort, claude_model, claude_effort, agent_instructions FROM watched_repos ORDER BY repo ASC",
);
}
@@ -2057,7 +2062,7 @@ export class SqliteStorage implements IStorage {
async getRepoSettings(repo: string): Promise {
const row = this.get(
- "SELECT repo, auto_create_releases, own_prs_only, issue_auto_evaluate, issue_auto_work, pr_auto_monitor, coding_agent_override, codex_model, codex_reasoning_effort, claude_model, claude_effort FROM watched_repos WHERE repo = ?",
+ "SELECT repo, auto_create_releases, own_prs_only, issue_auto_evaluate, issue_auto_work, pr_auto_monitor, coding_agent_override, codex_model, codex_reasoning_effort, claude_model, claude_effort, agent_instructions FROM watched_repos WHERE repo = ?",
repo,
);
return row ? this.parseWatchedRepoRow(row) : undefined;
@@ -2079,14 +2084,15 @@ export class SqliteStorage implements IStorage {
codexReasoningEffort: null,
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
};
const next = applyWatchedRepoUpdate(existing, updates);
this.withWriteTransaction(() => {
this.run(
`
- INSERT INTO watched_repos (repo, auto_create_releases, own_prs_only, issue_auto_evaluate, issue_auto_work, pr_auto_monitor, coding_agent_override, codex_model, codex_reasoning_effort, claude_model, claude_effort)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+ INSERT INTO watched_repos (repo, auto_create_releases, own_prs_only, issue_auto_evaluate, issue_auto_work, pr_auto_monitor, coding_agent_override, codex_model, codex_reasoning_effort, claude_model, claude_effort, agent_instructions)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ON CONFLICT(repo) DO UPDATE SET
auto_create_releases = excluded.auto_create_releases,
own_prs_only = excluded.own_prs_only,
@@ -2097,7 +2103,8 @@ export class SqliteStorage implements IStorage {
codex_model = excluded.codex_model,
codex_reasoning_effort = excluded.codex_reasoning_effort,
claude_model = excluded.claude_model,
- claude_effort = excluded.claude_effort
+ claude_effort = excluded.claude_effort,
+ agent_instructions = excluded.agent_instructions
`,
next.repo,
Number(next.autoCreateReleases),
@@ -2110,6 +2117,7 @@ export class SqliteStorage implements IStorage {
next.codexReasoningEffort,
next.claudeModel,
next.claudeEffort,
+ next.agentInstructions,
);
});
diff --git a/server/storage.test.ts b/server/storage.test.ts
index 2678a87..655ae6c 100644
--- a/server/storage.test.ts
+++ b/server/storage.test.ts
@@ -254,6 +254,7 @@ test("SqliteStorage reloads config and PR state from the same root", async () =>
codexReasoningEffort: "medium",
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
});
assert.equal(runtime.drainMode, true);
assert.equal(runtime.drainRequestedAt, "2026-03-18T10:00:00.000Z");
@@ -478,6 +479,10 @@ test("SqliteStorage schema defaults automatic release creation off", async () =>
watchedRepoColumns.find((column) => column.name === "issue_auto_work")?.dflt_value,
"0",
);
+ assert.equal(
+ watchedRepoColumns.find((column) => column.name === "agent_instructions")?.dflt_value,
+ "''",
+ );
} finally {
db.close();
storage.close();
@@ -528,6 +533,7 @@ test("SqliteStorage updateRepoSettings tracks a previously untracked repo", asyn
codexReasoningEffort: null,
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
});
const after = await storage.getConfig();
@@ -546,6 +552,7 @@ test("SqliteStorage updateRepoSettings tracks a previously untracked repo", asyn
codexReasoningEffort: null,
claudeModel: null,
claudeEffort: null,
+ agentInstructions: "",
});
} finally {
storage.close();
diff --git a/shared/models.ts b/shared/models.ts
index 296bcc6..363a50e 100644
--- a/shared/models.ts
+++ b/shared/models.ts
@@ -423,10 +423,14 @@ export function applyWatchedRepoUpdate(
existing: WatchedRepo,
updates: Partial>,
): WatchedRepo {
+ const agentInstructions = updates.agentInstructions === undefined
+ ? existing.agentInstructions
+ : updates.agentInstructions.trim();
const merged = {
...existing,
...updates,
repo: existing.repo,
+ agentInstructions,
};
if (merged.issueAutoWork) {
merged.issueAutoEvaluate = true;
diff --git a/shared/schema.ts b/shared/schema.ts
index 88a8334..2fffb37 100644
--- a/shared/schema.ts
+++ b/shared/schema.ts
@@ -750,6 +750,7 @@ export const watchedRepoSchema = z.object({
codexReasoningEffort: codexReasoningEffortSchema.nullable(),
claudeModel: z.string().nullable(),
claudeEffort: claudeEffortSchema.nullable(),
+ agentInstructions: z.string().default(""),
});
export type WatchedRepo = z.infer;
From 8040409e3862d7198ae3029822e5c2b3e4b8e612 Mon Sep 17 00:00:00 2001
From: Jeremy McSpadden <979742+jeremymcspadden@users.noreply.github.com>
Date: Thu, 21 May 2026 19:45:04 -0500
Subject: [PATCH 2/2] docs: update settings screenshot
---
docs/assets/PatchDeck-Settings.png | Bin 330837 -> 315314 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/docs/assets/PatchDeck-Settings.png b/docs/assets/PatchDeck-Settings.png
index 56bd128cd0fc0ba88d865721258325f4050e0678..b0bd5f0f44ac3a8f81a5cc6f8a989fdd6ca9184b 100644
GIT binary patch
literal 315314
zcmeEuWmuGNx37wViiC=Es7RM|mvl=vNW;L;9fL&+NJ~pg3`h(eDkbgE-96OM40Ueb
zeeJ#9|9ifkk7qt8*C@|3%-n0OUoFC3tIFZsC%=E=#tl3Ld1;LsHweI&cb)Iv0)Np=
z8`0gkL3l$!T2jk9ZEFU{pGaoz2f8VC)~_sH;_2ttxn9z*B?yTUO3llnw}0+qPTvIh
zZ*7;G=jlsG#y{8g#if&YB){8a(oN^JYeXDF{r}JXzkd%P_x|H;eru({NK{?zxtOO@tj(OK
zQ5efkpI&NGFl2}D;N{gOS4nuWk*B1(u)O^I=6`(acgFicgGgl8&!3WoT8c>@R11nr
zO1^z#97A!~k@DR9^UweO)lM-15vLRyXa5ZWkC^P1%&UlXt{WM%M^z;tM(9@Pm{#)a
z>M;iQbYDP;sEexl~wd1=Z11x!8jJ>5q*IC3N;x-owsC`HBl
z2m`pgpq{>dU44CoR}4E7)2JcQTfxgo;D!#nG9JJHR+7Vwzjrrrl)1HD=M<9s-)|CiP+iM
z@$sXcYa1EqX?rl4qwoFai?{K?9H9>*)ftIACc7_6un@dSqK%LGD#|?$_IHalrcg(i
z_gh$Z1j`>??PxJ0qNAVfHDzZvmXv61k{THqt&pxaHg46|`))j^y+QuZpCWBxYgX{7
zd#-$ZQZCU7P28c-J*xEXnTCQm`%rnSJVzEb<_hXl{8*^fFliu7s)J~{lmXi2ZoTKzw+bW~F+DJ%T(GcO+
z@@5Wcoc>D`ZoEBQt)rNr@roiWJ--6+NcazD+YF*0b5Pb;^L1gFc-c$aJdKUbP5MVN
zGIxZGJ29|VP$;~qsVN~r+sZ1)J?7!3zuoWO9uKCQd>M(lg`igICTX`LG~#J&cGuw=
zQw=^cI*B%lYd^)t`)ssGz#%M}9-JIxMh_-xqad3vs)7b(p(_sd+vZN&=Jsn#i=!+*
z1b;DjX}+h=k%n*x3kwImQrFakk3jP9Wx>gHaBz^O<0X%D=j6P_^KbVDUw#H>v}Hc)
zc}!AsadWf5`yk|)))Qd?9K)&lc%lxJ`}U_OkI4NKvI&_&4G4?<{o?|y7bK&^cALD2
zH9<#og2EP0ISLZNTwI}4e9!|Ir5yGgRW)whEJpC2ZBx=tw6|;LY3OQ)9gWIUMH@h^
zEG%+fGfLy-MTFh#`e!Y_U0x=Kkm^_0f2*$6dVi;=ki8VnPK<*@(n&)|I{Py+u%u+N
zpTl1|`DItgpX(wY4BkzZI&ueR$2@wIVuV)Aip}5k|9~o5))Y;E|{-0-0
zzTa_Su_?bu?|pkwDIcX6!`Sg{3B$U{v#3qxM=MNs=sGJ7g_=I%Dw>vY2qx-h7%&bt
z=QJ49jVnS6w8&otA||5*E-EcUd-=4K3$^4)$o{j%NK_zBK9kEnOng(meCi>L<5ajU
zg1HlRQs1327$^9MJ*6UU!b3aQEOzD`TWLFQXd@S2q4diu7vxgh|5byrud*KPj-9HM)L!cO;NH@Yg^|LgT=FypCL
z`WnM;N8}ZkC0>cdLl;SRvR*SnB3KYsBahfCCe2l#3JK#2<~2&TNl}k(Y_F^wVNhke
z(5H{g_h0qh`R9R=z@=;zZTC|Nll?`fZfL~B+m`ECf^G}<-0w3J=EYV$Kij|esqkq2YTEY_1t@eh*8|zAW)n>Ye4Z`wC9~ATMKX`zD
z@1BR(iMyvK6Fa*>6GpBp+dclqdJL^x)k{J5bwae5MaP4nSLF^970;xwYhaEIK_5So
zTD(u?aa--Js;Ua1fvx|^(%TSm-<}-l?37cb5paH;QyAa>;aer;4P$lWtap3j7rc|x}Ng=`}d!oXch`}|6cj$tG&ScR`MVwgg5B6gz0nM_F!Xp
zm4-r+k-PhxLR|jj)HU6)Z%<<6%1R;+4-^OQ#gm4Sp`jsx!ZFm!N5v88HqRb6j-vVb
z`6n#R+_+
z+-)#7tS5;hY3&N#i9cjznBgbcczHba4Tr>({ZGs@hk`$yg}cw588b+A7zSmPA%n
zh1;GEvvz`2vTs1~FAFVZLqCR=?urNLsw`PKuE*|fu3qeY9Hora-}TIrD=T}TH8U$q
zOALbsaLX)+R#t5`WZhc+~vCz-;|
zHVQH?!Kq?5ICM%c{d*pT(jBL&p=FKx;Tsif15Hm8S@lzrlI&Axi!kU;nyJaj@TzZ{
zD*Q8t3n4U$i5yH!KFDkt>trMnIUsiKkSP|h+!cgNvNK(GFkGnl$RNw_B*SfW+A)Q8
z4xO9(Vt1-Wn1v;0rJcrmUOn*o$NqjrlIc}a^BJmAz(qEin&ipIR8Nmwq1Ncw*vjfE
zrAVz)XB5<$uB^ea`%e}v>>S!R3UA>zi7qalic`BXm62(W;1IL#twJFDcIuLpBf{L+
z`1yrtX}5pJjB6G=%3ZAq82=t)W|sa*DP4rD20E2LJWN#R(;<31q&BxZ+my4yCA;YP
zlAGIDYvWJW<=L4}ekJ)>OLcX1RTU3EKkCQ3CN!Gi5MGC_TV95Yjf{w%Z!K9@w$aH^
zcJA%|11cgR!l<*-G^i!jjtQbyYIuu-l*4EbY3kt$Yw|=}6wGN`#
z71DHSxinB!O-xHXF?{u_t35(Ic2eV}rgh(7d{fg0+ZyJC&2{8BolZT65tZU+#y|UbQYZoy@+>pv@;{zeqX_y}mlRvy`-BJT
zE`C>chu~%rj>v^MC1pUnWx9^0#uq}Gb1T@WSY>QZ0jno^eQ;S3V&6Rm6P8r<+T^5#
z{J_$P7*vA_eBbtoaYnBTZDIxt*^RW5TO7}{Dj^QW0lF@*G<|C;pVj;XHx#O8{R`->H8^wY(~W4!F#p0h`fcT?31M#T8M9hd5EK71A(
zcu*nV7&w3%b{^f6Ob~GFuUE#-7I=7N>g9hBxSP6K>)jBUB8V;uYu!qxT1l&TznIR#
z4>fF7)iijff0u${YRai)YHG^aF+cYOTn`O3HlF!zmeaP}9MB-cK>x1>lb)G*y`B?I
z&QR8{GpTFhGlE3A{CqDAD*AG>xJ>L~ua%8;>eqCH<@xb82hV4QvZiB$${V(Re&@e`
z?<_2&|N8Z-sJOVYqT+aWE-5X|+`zg!o(Y1$1XDP^Tvg75S-g7HD8DsP$sj5^Q}sPH
zb!u;+73ZD=|KS68t{oB=7njEu
z9vRtmwwgNUw>#sqR2uVuQ@MIT^kf=bIF(hzdH!o?XekT^!$b4jb8%rv`EaOG@0XOXgI?|L?-SS1
zFY-Fie-^(QukhT4G?|PoKNk~&xemw2#knQ1KkREao|u@JaqVejH?G&w)y>OIV`pI@
zxOeXfZn&$zthuDUJxjS@OpN+W{gGb7aRKoylk>w31_pC;3_r;Yw&J2eQaQUPGeP4r
ziykA|AH=UO0#&d#yFw%&p$Es1Kb1DSLj{i$SI%ri+iNGm4gfOB%@2Ox(U0){ums5wb#1e5u~J~)ZNoVv6eaT
zu76+vURcQ6Qv!z`Ym7H|eL79md?7tR%l>%r2CsezRY*<(FPS)OF!WWaKezO5z4
zU@+ksLql%1wzlJArh&6&*OXAy9i3|rCk6OZ
z&j$1$Jy~+Or+;hzML3mH|GGO5C)d>i-1}U!@)rtb%5zBC-=t-T~|WEq`=)NKAl-
zgGWADtlL{N$F8a>Hsj4CCs!cownIq3Lnl?`u3}(N)YOz-Q?m<75pzuS-5Y(aOmp3p
zot<5v)-o|UDJ$Y8;=%m0t4m$PI`Y$}`}gjd)*luR6$nq?wO4ga$Bqi<`pNXQsN$(G
zG{i)AcY|bUgJN5Zee?7xT9wLh&^u;7cDP>XV18F!BoAF0A^Gx
z!Is(WQ*uf;_Xp*Xv5_ytIz=VM)4xFHvTC=9mWO)ScWx3>46>~r*9Pn=!HLOT0?H(#
z854rP_g2KlZ+81LjJ@{SrIsr7q1_&?$1)^I#v_MXElme5AI#poL?BXrO}Fx
zyG!~9mxstPw^*(hO3o;_+sgV{Bt_u)<%vh^vsxbcjD*Z6loUhMT=hn6eRVxEg*B`^6)Lz`qMky<>kL~!e28wHljN^X#%GKX0B>9DVwW?
zPT7|=5tDe)7p(@7n0#(Yv8a0Ulgf4R9nKCvwgfm;A_u+Par7z`<>j1gX`o4VF=Vou
zG}e}uszN#}qD8CU{JaHbw1p}JG6}j+Z+7v3Lh;DeK_>3`5o&kG@f3rc|M{V*v9a%Y
z>fhEHc(GKzxA$^LS-l3pt*vygS-T5AJaf4j0Lu^729n0?w2Y0L{Ll9P5~T#QKjswe
zzRT{4ikpWUL%C6%?*5v28f1ioM4*_r#?ewCQA8n#I^>dtIVSwXG|-sa>{pvu0B9Lr
zyq3R1L3>KMvmcJdV?PRA%x8YK(Dn}NJoiAy)b#r5-090|s2?kmVb*&I9u|gv@+2_K
z^>Hen_uh95re3=kCIGt#^*=N=GCDt^cxtVZCV&8<4gh5xndUY&b8y4x;o;@(?)xqc
z^gH;t_fzn`s;Q}QQ}ODs3i}?`W=Y9S!_Gy)lz8QFWV#b6t;qv#(E}xZ8v4*e$YaxY
zE&ZhFd!s%d>T4YyN_LQZbZg<8OBjdJCj&x!}(j%%<70fyd}Wf$wJ)4wp$YO-YQpS#8ykgdl&yyJ^|(WSOwhW%%E~RMvP?dJkFPIx
z(>nrtGvhvdSlX_cV>^bJoBzTb*)Q{kLLyp@3zU;rcWDH?c5Wdh$^1@pb2V}Bx3;HF
zin`(o0?t+#@{2cz3zgj6GgDGFGXt;6(Kul}MwXUpXh{{AnQY1H#-xM>QDu-SU8ffm&)HBft-|&)*~jCYlkn}X
z-fFtAEFL$Pjr9;f62#tNVWNGT*R)Tp^BhLCEK}KBozIo>r8xK#U3@=ylQBrqmPS+W
zdpmZNewZ?KFsjYw@jwlDkup#jzv@suudXlp!&7-wg-A&EosN&G%BuRVUB22Z`9Wqz
z`Z;<%c6o_~Hz7E31eNz=kFyC!oO=2!1){QmzNGoWKFG8$yZiRaM<3_d307L2zdQg5
zG2vakQ?6ywkx`{-PuH^`^t{(j;%k7e)Oap^)>nTu*{)H(=uzf_`)Irkq<+B=)ode&
zb?;l)Qi#d78|!M<=#=j6ZULV$!)P4oj~!6)+Kaq_Psx*$l@@6}*qG^~TbzB;xW(85
zaNZihzgZ&(_Ddep%KBd(@dK?P(SVJW)nTM4GhZ#!k@%98>=sT_hVN!!%^Xar&;cVL
zw)X?;WX3Dg?yz#0u=sLB*VNC)M+vHBWOUI=VDsvI8-r>J57K=nCt3_M>$jT<=zlPc
zfbFR-t+)6_ukXD#JEB&66EbsDnc)>u8f70s0EC
zyHr`Lm9;gv2~@yDT|FQ-Vrdl<}1ubhh&3_jLZ=+balCFsWX~l$Kg|sWR0wL0vH%NbaZs#qfaO)2VEE5zZX%j
z;b=ZJ1uE^gz47uTI;E$4Y%g9IZFK>1-6eouY*I#&L?@`l&dfYnb+H1WP}zK)U{~}0
z{l$Rzb*4^nWN0W66tVKF57AXk-HET{Zq<_*z(%(7xn7AXx>hkS!E-rG|A
z`df=s_;r0w6BS7J3n%1N;Hg=%?W>p=(G}s4sFEX+lH)=+e4^5(vl^PJ&FoR*D4JWH
zDsqPH=NGcIRpQiQ?C>d*SX)I^?5Le2Q%g(h^z4j)Mr_hO24NpqT2it#%ErZ2k;JJ<
z8G$O}_kRaz4L0rRR-_1gZ8WW}-qjqCYAXYj|LlE1L46q+l6gN|&<9ESET(Jijg6*r
zakriR(EpDx`?kjs5Hmo$i;Ih!FZPE%evIpgVQH6=LO&3tqwAWSwB8&}?M)=-vDI^S
zme)>@73mfU5c(+)9_KAlXW5kmST_(_WFyJ#>*d$_AC8WWc1F|i%8D!D<>)z19s4ON
zRx~uoy?z}!9HTc?Tk9vMt-VS!bJ?GX9C**pZ!xy9G#92NaZ1{i-PQ@q(kjZv5uZqT
zsgy8Teey=?(5<^GbLlwXsT{bTcuQLH#d${L^)SlAINPz>?Nn(z18^}k%yJ9`@Ld;S
zN4l%~$yBV&HYW>5$meScs?$GjlHUE)**RXMdt|O*8LqD}b=1`H^1=;+UdFP&CJf7H
zJ)aa9S0H(1WhbLAS&r5&;H}bzs=)2??RXCQ24?N-or=d$EoUtRI!#9^7dtuTcrH@}
zu*`>K$WB)b4l+KGjoWzb=Lei5UU?<%+h|}eHGzqr
zm1R?=Ef+<3d2ukn?|3mo>KCw$7!y5Pj*Bc_L!l0SU=f5$ySjGgtE6&sb4OOT-6vu5
zHGv41uSISETg}23=zAw~fh}poBu9WGfcvMKvs6^{U(`wfs)oyPu_DZ`CVqMNO`SF}
zj*N`V+!Str=oa|w?Co6uz>YEm$vgHb@al}4;`#CM#aT^We!fED(kYr2HG28{5n%aH
zks8f{Qg-%IfJd_J(ghweINGK>_yr^{K)zU%~b^q3#
z#tV-I5gX?g?}fv21f$A+SRM<>hbzoqC*HH2ADChJ${=^q>Iy;Rewh*T_
z`#8Fin@dRNYkZvj7mdOqIJ-7uuT8qZ-o}7wl$eKmvZcD~px2XSO3#Dv^=Y>bLEQ7(
z_&^tBW|9|ZL>+aw;ksE=YSu6jb^lP!&*5QCpJ{dfD5wD90so~1)MF-7xGMM0^v~O<
zrz+8zu|aqJy+bvtOqcv)$Up%XZZF?hf81dH_=Ki-2m*(~{i3O#8oP>RU8SFs2H&|j
z%Gr%}c`VLk;k5-^`dm!_Kore1z8Ro57tc(@VZ-|tV>K0CW`wsy@{
z02qplm38kIbieR!D4bNteH{>=W&P}Z^RR@cPG(
z+~Q<^8oYLIVqx>?Cc`cLa&i!=ilZy;g0fKA?i7$jv_Usr90W!++9-d$Z=-kkGAYW9mISpCTI#mqs1p)
zm(=JtgIQo}>)l+7?CB$BfI%R!K<@YUCMjfFmh?ewR>4^_GcpW}j4Yj;<_a~Z#MUc*
z_w+o((K2#U#$o4u6f$)>a(BbE29KMnh-SWONjM{|q`!Kjls-ERdkchHoFx
z)Gy%a+WC-bMvkYkR-iRcaz`eW@-_yP=b51dAXDEFyfiJQ{@G}yABovPpfDeixO6!`
zwwf8eLra?@ebCd@#m>fNS0SOHVGe}f;^NealML{=#-;fiEJssA*JFU7B{TK{zpA!}
z1e)Kay#gMqtDvWR{P^X1T&4vUEM5+}^*0UUx91RhdlZ`?%;|I`gqpZkTOL3?o|_4AeJv~1KLCo&IJa-N2=Ba-wJoR!m
z&-<8-n4g71hmLxW_r(9em5D=v_{bH#zC|LEjZ|(bZPqEP`5qF>jOas(I&B=)hlC4q|sg^bb?MukExk8M%8*xuHTcIu%G1B#m-
zK6O#}UhA_CfAXbrYZ#v*WSpZ_O@1~%e|XZFMXsXqOH7K=;MzV!KFMge+~ya_2^{Jx
zf(XFF(lXRHJRv2f^?2hdZ3=~M$IzDNpJj7*_4Pdr`}u+6BGfxcLhjyM*zv@5!$L4c
zBYEh@FFdKjX1{J*lmzS8uivMlq5|U1-lTmQ+_VMhK4FvLqf`GoUU8+-=irkCHEyvE
z9P;gp=VX5tQD@S=NG_bVPwcxYeDL*Rt|_w)w+CesrdSJ
z9w|o?M{eHV=6UBfk8xLjx^UorSAlCBVdnmFoSNg@tUJlj&oE==9lv1+qPV!ht{Fs5
z*4?EegnagEElDMh-GSC^Yg-EnWGSJ<_`GsGEEu24XD;A+eaz|2lI>~7U(dgs-c*By
zkw_7EG!vChxDOtLM~Z$)^Y5-&1@rZJOmZ@EdQo3L`0YjqzsMY?6WVuf2R1z
zj%O$n6i4!uKFa6j)7QY5&S2#(0YXoa27FKhjz^U?1DU+`FaXvK@yQ(IrfR)~w5<9=
zY^`CicjktJgM$W|wO}x!T(*8ce_kJEZ*FaEAct#4LX{6H+`vFlKY5`*X!$C)OLB!{
zc455!$P4Ka66E1~y1)RS32I}5O}}E5U2lzpkx`2)jh0D+A}p1x%UPw%HtQ4R{#0#<
zY2AJUP$+vj~^y*u(E3LToJoX
zg|#>!CMS9AAMhsvH3w1I@Oh5#G8OT^BHsL99E}(;@#@&PUzOD
zuvE;euX@S3(H5-(X_);$<5c(kgVI-T4mM@mQi)dNP%2fch2Pu|$|K!xn#X*f;n~Bu
z66nke+-0s8%Obd6Hu!%Melj$8od%oUYe02YlgegnPxB9stlg4hO^fsT{%p@!(?C7V
z_>bkg-Zt)M=_ZoR8aS)l&~GL#E@n&m!d~RTwcEpm_PeuecMw8?f`Ez`Y?21!^L|_#
z_`)gWKJ?e`;j(nbb?fQrG4b8VOXjxeHfys^|MfeD7Vv%e$NohDS!WClNiYnp($DecF8w|J;DF-d~?lzjb^$A$4I<>&L4RdR2
zm;Ypqb6UtM;i>lovb#o>zul-EuCVBg0*15x)<{Z9z7vsuz@^ybp{A}biO)XZtj2Y&
zd6wm_u3W9H4FFoNtXflWgH{bHU}-UGc$gGhj3nd~s8-LUf;-y|FClir%NXQ
zgD91CXV&+4>u5+#oX6+7K&SY&Ak=Aher-+M
zVO$>6;;&z?&Klg|@d*h`p5C2XITVlazBV@cUz~=C`W`;waLH$2$Rs{z=JO0(`YAkx
z|C%_QDJ6bnGL+|E7Y`+mUeGgO+mFOP0LY>Q!`BZFVVcJxT|9F
zJvZ1ai^A*HVk2xNVQrwUe}10OhjbOV5xIQeW0}79{YJGUNcbF7M95!GT+i;|!}9
zpb`}Ip4;^7h7^1klfQi1>H^pQz>r0LN8u)w)(Pmt-Ki7iLNj^0LK(PI{l1!ED8*Yq
z<7H%z(_We_MvIqzX8+t``tS3SQ%0CsF|mO
z^=AH|CP*2m-~|iNy1*Z9Wuca2=6IVz|ePtIKBj7S`QO+jzPWO%{d6J87fLjoB
z`+?aGT@X4@|HG?1t(40jwLooicx@!v|8v`ZH=1leH`Rt89Zr2AZD(d~-JMv~211T9
zu|eN)J;VoY(Qgpjh
z)Xf}GaWHe)m?kRhzE=;2r(51#Wpxy>2dDV2jnr`Rg~!eS1SMSe?J95S=!^nD33r++
z)+seY3iL1RZ!+He(-CEur%_|QLx6Yd)~#SXie_76%gAO#!?PT@Xo#bZqvH-hdb-9?
zYHX5;uS!Yml9KOk-hB7)A@r*2bbkJgh0wES!
zGq2N1cS1+H&(?T3ke%c!EM33F=^JSQ0!Jjkcl?=CZn}X7*kQa6*v~sC%032p?2NDo
zJRn%3ni6JtHG3?$G9D
znEhxPo`e$+u|N_B$n&mlZl5^yK(fNz+`q;#M$}ijy@T4eQQq4-spFZKk564@z;Tw&
zR4~n3+kHa!zb>edyKUw;+v4O<9fqsVpK*9enleK|3ch^@K^K7l;MQfkEbt-z+H3fW0GT_b)p>5KsmxAm>4f)a
z1?lIDP`fpRoqz8z&4w3owTu^P6@B|=o33husiexLKm$Kv|Us0k!AeyqJsTI5N0TtYFnwshs6g%ki6GZzp-Yxuh>5J}GG+
zDS`ihNVKI!ZyQkF)bqRo;;Pl~p;vRwJ_i_+Ci6CJ*<9T+lZjInJZs?csb+jaA#-$h
zXE|L{YpSas+7sfEOKqnPbz@s>u4M+^CDpl)i-C;-
z*Z~3A4uweXR7;E3*M%oYzuBML98WCyA6{!}#~AABS|#f1PQ42r1Z)t0*Ee8(T-O)h
z`z42)6VyWim2^ZvF%r1kqU;vFzf=uxMsWz%$?;vi9O~hqf9n6qYyO7rK80J&T@)@2eLXQTI4OedMEFi&Q(Z#!?3;@N<}HJ&tp~f#3=Oz
zeTM;q0SGz0?d={v-=9l|xNVKcfb3983VF=Z&JL%~KAwq*Shn7qH-tC;s7#extbu4;
z5{D_f8c0h;jrR8S_8L_?YyfqKUM<6twb81FE(`$-)02`o7?e?VpFA8@y}dyecEY>X(;?|_?BLJP
zQ0vG@UhZ<^^G$XRQ`5jMLLHCeitY7vqK8Ohu8;BBAwidPloLZkEH7SYO}FvX6)i7o
zx_*k!G?i$9VPWG_a=9!L!K{L*en9aYBZh+mXmL2b?#eEWZFSeHOfg+v%fuANigktd^B?b|QXjk}
z{_E~azy6cV@xcFdVQOSVTf;DPX0p)g;=i?kkv*hU?8>*|VqyQ&&)!T#ipZ%4)FO?B
zHS#V3Vppe^y}k6tM)Hr!KYvvFB5xKU
zwSbYN(g^Unwn-n#34gdkI(XjjU5?SnblCK8w9{B
z+f6B2yy)eQu7YpR0INAKe{t!_{lcefpS{DXBIJ_h*~fxBQYY=_Kh$GV;!k_T9~}#7
z=Mf3koz)mgKoDX}A;0e-66%$%sa@-{e-jqZk1;Vmeg1;G89FdGAg3?c+BHR2Rd>s?
zAD{Xv__S;A0$3KXUZh!R25rDjve8;8V`6ahjW5e%iKX2W$@@>A4yd!vSjU>Fx#`
zQ*#N853-$I4ZF=#JOvlsFy6)_u6
z%QiOFLdSusnQvyp$G6sC48{>h%f&u$tXcHw2?z)b4Ta%4hDQF?Y)3mYa;m+Vfx1gF
z|CI!R#;2#(`5r|Vs4?_s1WbK?M$4{YWM^X150Vqdd#!3IQA+TU(Zs~W+S*!dY;4{W
zH;SvPVCSm$@BJ;JGz#Nu>fP4vqPbW&94FJ#jmZfpQ$ITolDab77s0G+0*yXffk&{>
z9{1uB55NP-KDG#xG9~3tBxPZb3-HOf8ckbnvf=bs|KVG9tE=O{{65QONn}q`8hSl2
zRBlmjSmPKwls!N)c20c1rr~dynXuEqP7^spHA^8{TJAU^&YYY9dBIUDVA|P>@N-p!
zZ2bNcY24WQ3{wuB;_K|7_CG`hHTiXx=vP)`XJZA}A*=wzoLsm(nfv_MTpP^cHEv9^
zKUIuWTI$l;8pq{PxP{`C>njfrC0fqZM{Bj?7eGFvp)qx_8Lx2)?0V^cO1-f-jzC4v
zHl2q@%mZZaG`@#wKh3)p;rQ=aGzM}1!^1<67P529ec@yICI|5+hwedYy5Idz_UxKhj#*2oUpGJM7~1#7OPxp;JO(k2s_*OiATZNzf3!&xDXy_Q
zKfeyzu+Z0z7KqEmDKaGm;^ag_K|$ey^}_geb^-_ihn;hSSg$&c;K6t~Z8po+C|u6%
z=AVZTXUM~;__{V6LF|@H)_KlW$9wsAd90b-5oifcoy;QZ%hV?n4W?ViKYqNiP&J$irW_}K^k{ThF684!
zzIcV0$(4P+;e!~nKN<65#FLh(Q5GQxpMzl7W$EU0o&8wpjB;S$TE*j;7?IGc*`|ix
zTchVEG>j?c%F2O5H`XKE1xiXv0Lc5h^m5R*OCvo+NTmu8>$`W73~JO#tkQ8LCDo6F
za|0N(;-q(hi5v;KOE!g*>+9paJ@#x1CMG6THL%xmHQf?8FruplQZv>kJ5(Sd0MtbG
z`EClsI@dES0udqq({(JIV{(qm?Sm8he=ikXkfTda-&i9de2ClzDUC?nP@7Rn$>6v0
zLvvYdjK2r^`i{|Pdq*bF$>ii10A3Y(o={fS@+u2Rww!)Cj2W2rb}FDLJdCas*1A#E
zl+!XfnN`H4YiMyr+eB6{>b2vNQ*6WEWj>;PRr2EP-qFSZ|2%az}DJv|W}o8>irfiV?!xU^vbg%}85@cNEGAb<_1
zK&5BCm^@BxI`@_y>#LQpr^928!Ys{-%1Yoa6vN?R;hO;{_<{6lp(Y&9vc)p~5qlcY
z*U5&|M9|B?+;aQ`OMGBKh*5;beDOZMy)!GSk(OtD=hdtCnZBDFVUNpj@tcXVT-C(R
za?u}vx11L1NgX6#0fm*zifH^${l9R5soiY{<
z(8g&U8v%SAtl8C$BuRd0=IZTjQ~oah#K&AW^aSAkWN3wVz}4AxTM5W5rB`x+83LI3
z;&G|XfNi0N^rg)}1_$q_3b5dii?6n&;Zh4SMVOAtWm1*19wE@LBSDsCQPp5N2&5O1
z6LcBloBSvi_tnxBKmV)Hdh+V{Ci0iY&9rrN05X%|^2fD`9gaENe3GM47)>Ky@49lo
z@@l!|IzYX6R+9;IcBG+5*MA6wz~h5Um9w%CdT9`fn#E3~z3q>Rg2uCUPpQ>RM%`OBRXf`U{m^-ptA9w6MjGjV;@Q90fCK+-BthWMqB
z8Lo!vmC@(Ns4a5xVLSh&x;nCkBIW~Qk@~g=cF#p7`?v==+6b9aVZKeALtXH=aSJJi
zMizs2`aU4#he!yp^0DrWh9z1B!X(O|=2~SKX6R_ad9Du1ua6LIlBRj;d~G;azkRK2
z8jA5
zdLGyWB&@Ydz>}M*_do%wIxnK5uWuV(Gn>NilyPViWa_&?w`8>R`cLdL9v_pX_DrAE
zWSaQ}aYE
zy4Uunr>Ey`^Lc4xWTfRi(71oK3IpQ|Hd#ex?z+~$t)O7@VP-{sE=P_amG41LYY2gS
zU?eti4;WNF-rk>R#F0EE(=#&`m_x(dV5Cr9L~B=6?wL}13~Gu+V+98
z>Np70_?>f$)6Fj~(pUSQI=6=H9Sn$*3QHRrHaO1shHgXmmF$3o9g25|M&sVS3#k(`
z4>GJFhrL=%u`h+zr4sW;U0uBcLHu;_Yj$B_Kcv3XY@=kw?ecP*_J&%-_Ka``PYbZ;
z!KV>-tm8D_}p``1LDyjahcwJ%U{>5U-Py>jX)e
z#6XF!@a}HK_LwKSdC#O|A&ANG@ykJ(YP%r}P@_P&86-R9*A{k>|0YlLI1Xe`b#)a0
zS8BDtDaU@y5ptCLMM=Ent)XM`V{&pGL&JlmXqMi@M+1f+k=~|pu*w!1y3U@_(S5e4
zJ_BNL;WncyD^@L6^&pWmuGjjuB1g{Df|#2dL@|H=&hTw&mbx^m{OmGG2zyK@M*q^k
z#ICs@uqAZe2drSio`sav9}?YX^6a!f@<5o)6!2vjnwrwChD$pq-BZV+@pQj;<;H~Y
z`teqBtTC&)LOkH&eDIg|((^kLAw|4F`2ANgmpeMl1K7Kh!kEqnhK!E{HyY@0)l>C}
z`7QK2ri7Ke3hW|y{svz5+j^gP1Zl&K!ahV;)JO)ulO%vTWEZwwJ~SL5w4C0ZH0w}q
zQmxq~X?^YZ5G#Af_dJZc6*Jx-P>=CFth3&`q!C>ro2TuMZ?dmeSTozmjxOdMxgTUc
z+OnIz|9i_3%TKUgP%d)a3k1H@e7qAGU#FN>ZNi;$@tt~zrM~B_s{xH;6qA>)(jc?*
z9(EnjG>ra6XCwfm*)PIgrD+*p6o3k{OG7v>XiA0PLtTwoO0EA}3n=XEt!$lCOXfN{
zMT1tTz4-Cr+H8_3`_9;|^5@YH1Y%!6Oc!iCBqSylX%$U5HuRCkq@|}LJWxLAd9n)&
zX8bemacR|+l?TViJCnTTZJ`St5v6-A*OyL!^LKP@PhHC^DiY%=26IrWfOTxxHsV@G
zhrC%gOQ(3ZZY={`+L#?EbsQ%%HmBhO`zt+b1DQ@vP8@^gHGk8>rU6F@A_m96NihjH
z(q8J;EjcX>niNB~J#M+e6h}u#%X^_lw+jn0e0S>Bzy|2_&UE0lcy91FRt^pt!5dnX
zi*tddf8~mNx|K30FIoNA=fL%PRDLKzP(YwtSifYslO_qQI)bcUN2nDy*B}phq=56)
zl_a2VOiTrRqjQeg{rmLtcsJX!Z!O}3RaI*%s}h5wCjA8vqDE9!Qt{Z1
z=?`c!0lQHgJ6Y{u)FNiwjkZ0jBJ-45>d#j7Mg3&w0*6kU
zeUU?Nv7|f|T$q-&wcBDkxzl|i$}{mVTb~QfKb5b7YBxrXmp{g*iGmlO_tdNa)rb7a
zNCR4Kk|8J$!t-ihBV^BR1AE?@x=>{B4(F0f?`@h!8i|jX;bH52p#Z7(u#0
zVoDm9e8Qb7d3Xhh_XMunFDg$nRa%C?d>u^6$e;5`^bbcvBj{sX*ip1><(12`WoE!YN~0yBb3q^;!Qc#0!D{60n58OTbdik=^T
z{`|-1U?)Dw)zuX&C=gY)VKo3+`~BQ81vG&SSehoFEbfmK@q
zg6R7C`rT&3=biW-lq-2m4EV57w$*AF?e$3B*w$dSrf)z~gdqt@bpPVn`NopCWgg$d
zg;AUFp(Brx$b%Yqol=2tS!P!gDYK&H5YB!z%jBDz51$b;{T8I8
zY0#@+q%(|bSAvv%arvMHk&;Gb;i*Wzr8~4in;U7WXn}F_Ys{!?yh*L8fONW4=v1
z`=j@aF-L?PLo%DF%|v$0>3n_qpbz8k-H8n5$P1ObE{$z{A+`2`9?WLfS54OZ>
zruI}QAA|>&FsK3?Z0w`03B#*+V7;84*3Q8U-Lh`Aw5jsJGL=hAr@y5GFu=m%2KGjI
zc~`xjW&Z$4+b>_fymS~3{rpy*}
zDlW^I-`+;8*_>(1tM2)G79HP@yQQD50cE3Ifs%
z28hH03F%Of?(VQi0Rag~0a-LicSv{VqNF<(-Mkl`+V1myc*l6YydNIM9^*J19@d(3
z-t)e%`2T+wRaB=wyQ}LtXdKp4oHuNk;MPM>)nvWFcV7PyIiSw<4BIZW$Xkg%zfTt(OS5ZbYU;o6T37b~>XL%SgNU+>BEFM?~+WVoQXSW|;Q`X&66V~<1+N5>fD)Pe#|
zrq%g+ze-O3=H!fw{ez_rcvhoXTo27mvvOuVHYtlPFT}{?J
zN41r#-SidHst4x4fRO~|b=gTbDa2k%lSq`>yGRYiCGsQyfSYVl1ni^I|
z1Xb6z3z+TTk}dq4r`5Qdo6gO%u!nmOokkqi(KeVpGdJvn>)hLyR;nZ%MA09nGyQtm
zXLvWRV(Nptro2l7F5cROFU1QD!4db(%}4#u-S8Yn4L|i;u5?=&`oW@DzHehHuA3!u
z{Nyg*P${=hR8U#`XYC~0j3WWpU73Y4>W2DLyIHveT@9zc+KG*W58ZDk)&FV3L}gd_
zbiUPTsi;`1aP!hIf_DFCiHJ{AcXtqtgpcX^Y^0v22QkV4>bO1x5)cziOj~PIB34}(tVC(ai+U}%FA~VM0`$8mzbH?s;l4n_*h;c@=HhvwudcK?W6ya
znFr^8Krm|8fHwpxs249HXx#S8_7jak{SIopTG}D+@|Ws0yEza7PKKk&Z^SV2aa=Gqv{Y
zR2e1I9;Qg6I3@F;dE2|*G6>qI6T_1uJ{RY!ar@8}t2{2y?I7O_Ab;?3{r#2T={q>N
zxw(YQC&^?_Qu9kaOuA*Bx|8$vUMmy&E4V^4xj1Z4l)~k6P*4eIPCtFh9Y+j7?hEN5
zbEaw=qYd;I`PZx7fwC(nmv3`w7G$kKH=u=a=KA0?K}GRcfh>cSDSlvy%XDNNO80Q+
zNtSTK9oq!%j-_Q#kW`k+_GYF!W3)C2muVEcLHFAWc4v?X_NygOj_*N^gO_3^==!G7
z5im3Ce^$M@fVFy)!!VEEF;CLC3szg9>oISN&B@{TDGo6^9ewk6D?s~n&wzoz_>siN7L-#aKHFwS!<`G(LqlJ>>$-kh2xvw9hNGR8aY+#oo{6#y
z;lBn@UW<$L=pa-w>UQb&3~0i(w%D62=eM_Ys1^5ah^fEO@s}U+xWFDVG)X;iG@Ym`
zMkJ^FD#c!mFfA`{x(0VVhD93~4Fbj{D@e&=G{oid@}I$-l_F0sDk=(gd#DH(n*%X`
zfFZQE-*)626JPV?PRMM`?d)P%v^`Wzw!yE1Pe8B@_OG|CUSxfpi30XYm;iR
zY-V+IbOiNxxL`K6NH4yvot-O~nC2E1O^uB}9k>zpC}j%didU{)h0vnUFdt-DTB_~E
zUW4&pp%ZDg24^Z{(A~0FtGEBPdH?#~s>kY|@V;6M<(vIE|J^|`CB0Xg>y0gegg#`Q}0Mi;m(Kj4Gj&YVg;!+GBm&Cz4?#y
z{MR>P@^nN*H;b6eyoPl8&ctM{ZO)A~8{!P>rbHwSv&K^UtHDz*kfNuJxJ!3$g}SHyP^28PO(2n3vrv@O#?}
zCd&(wWlJRK>6<|-LZh4xKGHM$JCIB?KNkOX(=agf-_YdNvh>z84@p&1znak+?0fNr
z`Z`MF-oJe^zy1&I3^7uQ%wr+qs#gdl1f93H^JPh1=!E*%@lojIm*>Ctm0W)9WJVj9
z+)N+R$@E`fxfBgm>ah&tC~Bqq45~E~AYk~$*&V82#43SLpC~$hO)Tz{Ihqb%i`G{?
zLyWmUwC|Zd(H~#`_7&vSU(k(Zm|Sr$c-ha%1Q%H%Foij1B9xIepv*H=V!at+-c@A1
zOTeeBs2E#%oY!m18!g59r;J@E#>--@4f72mg8u>tb<4l@wNq6k`gK(VI=5tp`$7h$
zO$Dg0OTCK86gZDhU;n0}Qy#N086)YrbYSb~XC+N#hJ1CG@;ewP6iR&Y)3i@hNLliK
z@zM0+bxp`z`V{=H-~WVa{?XqhN=4t&ooJiFt^TQ!L79s5-KdL)s8Z>$MA1WIe$u0-
z);5yN)505~Kh-_(Z->qt7-y#k%2BV^6=Cnv6cy&X5e~eWj85NnR
z_8-Ib{eAsox$*2T-hPnTyNE55X3`=dD}gB`zVaeiQ6^e*_1a`+jtt+QCBys0N<2gN
zdd1aE%1!G)a?!xl%Cb4tWW^kdYh0
zCi}gAbA5YFOJ$b0&dsY_LWeIO?L4~TW=9{=JUpxz_xv--XK}K3xw*b@mTP1|XQ^v}
zX?4Bh`rj97)yD)0FSq&2A_NTK|BO%mTTc)xp>;Om?A3^cDHpYcIT45X?2e80%ZNby8M
z0~u_;+3WdF{{Gt@_AHaRtVAEJESIMnN2RBeex_%*5*C@Mk=AFJ$D#8g!WrQZio7dY
zP0&@fD`J1eSLj^P~ufDx4we+-~STSpGJ`$EMH#G=Zh!G)4zbv>FHat
zhI&8=$^$PcAEmMoBq#CvQp3QwAFQD2q#XZ=nKJQjJ3a;m;eTNb;qTu49d-D>e|L6I
z|3~-b$;ui9-S2x228KKJ%fG*p@G(y&mY3=O-~Q?UKB@oNQ~BTf_rLe=fBI(s|GtKv
zFv4E)bFHzV!47PULElb~ciVu<_8(m$+<^7MhZq1Otx~2BN!9D16B5#7W(IU=DQJ1X
zSYKN!2VBP>k%i&HwaL0zK3-mLusjVx=N6ZYm+H5jDpdNPo0l3|OG`_)z0787o+UFA
zF+v6slhf^id`LXc0IaXCfbM;$)Xr>bI_}A(Bt#_B@4qJC>*ajH>h8f|R>ChB`3;#03pOfodG%+y-z>+7v^kVvG(m(fx?sFjn@inM{=
z`gclksPtK)p!Ne2x=?0KNT&0wo(f@sA_v+J6Rls^5`CwZvML2%X)O&%r0rFE`0Z*T8Fl^Ia+B-tr`65lT{Dh0_Q=7ZEzw=alF=>BFs~++s1r@
zR)dy9m^PBJ!gRC*in2V%t!y2uqos;et5C*U=t;WOa$mi~89muCvjr^xAjZu39#-oaggXbhl0
z05~cHI;rJMfL7)pE?5-4WSfhNHv?6u&z_oz2}GenI@67Tz;?9!v*2k0o(;DR{T&u`
zuMYtOxHkSniGf?LhW?eKDbjs-{E9b4Hig#)Q^;{k-)crN^GF6~&IFndeV~GLX<;n%
zde0)4BJaTg{LT@u@t5zQ+yF8O57Tb(4FXdDu_LuS6=QCJTp4l
z;g4MY`BR^_rKd-(EZ`Q~P8*k|owYUV?C{{A@Kf7>kIq0Q+}|Cs+C@(_BhWXMpvL6bvt5?8z}?A{rDL9`%gxHl3Sk8lqk1UHf$xejKUy~B2&|vbP<M
z?)1{m$}q49REtyjR*Mp(V+HHQ$~7uqHw7UgIoF1ARg-$KZ<_Zt1}4n5e$ghy+V>zq
zW~glUP`Dl40c=4>K@RIk2=HM?h7XPRw&C}ey{d8KQCCnnf$hoX{o}ZU<6S=_g@8`;
z=bRk2?bf!oU=(z=GdI!bl&q}rB8w?dW=u^r;fMwj7Y7H2Ru0%%Hs{7|kGF&UE|9xyQEa&W75-lp;{EG1m{F;4t_x?;uJwG5ma>D=y?Uu_re@^{yu*y?4WpySfuiIrZ4N-R725lGermcuW4IPT^sVfJ
zyHGC&znU|M6m)fwQNck$TErO9K|%By^}u<%+jI>h^bc$gLV2Xv2nzVF_>gVlT61_RW25iAEo^B}h3vzUBuAeAIFQJ)9AN4Q&vIk;_OH;;`!f3|k)
zig%MZ`!1Z=3s68H_N!0-*jNTzAgrvOB#~#J*hunbAj}UUx
zknLU|^Z^uTTddIO?l>1f$4sDhV7yxEeFH%o#-xs#7TwX++qn&NbZkK6#laLB
z5wQd8xX+(IKl|(5E1LY3Io~!JEir*pJV`400PM5)`1tIKt-w=-?+Kg~Gq7^A$i+S1
zS{WYTPU%_jC-XHj#YUsi$lxj
zN7`*|-G=#S^c5rzbWu+y>wJ@>%71ipNdI-0!yuM9JCgOyi+*f&oR$LG47!iR{PvBo
z@ByvV>Vtjr!B5Ro$CI;-g;s!{UvergM0^J9D3OPkjg~6YGbsOjNJ~x4!If54R#vR6
zp`n2czH-G|cJoZRT|F|O;k50`T*2OUtLq^ZkVl{xOG@Ho4`yOO`~0?~FrJ>x6wqIW
z#{j3&K2*HNvNTUU$sP57V_H-7p$z6ZAu0A0hNs$cDe>~C*!sV4tNp3sB)>z_V!;NNan*|
z^;Pz?oE$A^l>wB>WjVV692=5)e&hmAr3O(bu@$I*+*PLeFv%P&t|MU=LLVY-*rjS#
zZUbcO`i6$W=QP~h^WfswC_k73&&Y4E?4q|RX9Gl{S|AL%hL6A3`2_ct6-1xY!mh3{
z$`i0xs~(gx(9u1JHs+x#wwhz=E(S879za6iQ4_8`@wmD$l$!*H;*^$piS_Z%ce?;b
z)fFPR=AOTTU`
z5bobQ&WILtL0PkMb2knQaM98xHC022c%ir_|0EdvK()A
zq#^Xq_9npIeTvusXs#=qp`JK(;9y*UDl66uZVb<
znwS{8`FxUA2fJ&hV4eskAmOpBg*bhr+7Un=z<^GGbJ%IKjf?2M(gUm6bQ<4~u&_ue
z&~J(T^_CUM{@QXfpPxPT`1opez2?s;pg=7L+PViW#Vmxkv$LEptK4DPx$Tbnz8YoH#
z+B)L9lpTL^sVXbq+H9-OjN!3DCTBc@IU9ArAsp+*V`ari35Y$O{dEtk0#eJbKpoUGEftkl
z-wyZ^;ElHq1hm^-o_*%H)+<-e_F7&Wu$LoTT`S7VkD={&2t@RjeV|PVI7X3e??Wh3
z3St|G&mdnjD_NjHdv{Y?fEW2}%Z>9SXKh;^t6~>T=sH@`JU!@eJL#DgcRjXQ0e2F`
z_3QVgQ~MSNG*8#!MNY>m-6{t^d3kxIWfK2fT+}Lg_UO?M0Kxt?jmSJv>#Q7SKBH2$
zw+Tm|v|$3+w)r<2DRsX9U>GtjN@!mrzd(uo_;5Ft$7&YN^S1a{h$F^acGYu3(lyFy
zsHywz%iV|F;2HsePV4^osUT>rIT&Hm29Od!aV+Vp{s-)x{w()P#T?5|J`fQ`^E>1e
zgWqQsE}nsznXN6aun^z{dtmx_U^>E`J3p72N}s*S5pnij{^v*WpYO;DJn+2+A##xD
z86YO$o}b;Eonf=IloSJgyUp3Q9wb6SOw7Q68je(m4AF1~FwoPt>OvGGfUcd=mFdk%
zPS&Wme*Cx^*sI8arAT^PvGZR=$e@20a=2P5EuVrOf%C@!^tGx5Wiuhm2lQZ0
z=u{+l95Z1q0vteNmMx6sPNI=*Z5^gEXc417yE=iX`k6%hEu#igD-qq}#{;CK@A
zLv=?7092H+1_T8gXnx3XY2l0LfXkAa!)|QoUupZ~9|12V?K_h>)B;0LfQ{-WsLFviCy`3G~v!N8h
z+VTweK1P|h%p!tALx0O#Fjhp)>O~l+sfxqZNYLp6Vv--EM5o6Cl`$}sfsHXiA?+-9
zesliPO)G2O(dH0_--djBE&mlcK6I+BBV&UK43J$x1-qVAnTe3(2chun>M9{IF{jIc
zA21G(60pgbfl=zW(n+TVrk7#>H8vo-6t{HNq#lKiZEcl(_{D{`Saq%7cUGTuV-arvs*!h#KtoJR^%eO
z{P(UI^lCh0fBU6pPYUbNuX}y=$AAC${_o#m{EzNI+&`PromE3aB8jp_`6>$=*#!l+
z`0WQ_ECwX4*9rUY@$6fxt4F_krwx|-Ek|`QG@UIHC01abfqfN*l7O<~Ke>lV(yv_J
z7;31BS%QF1L~m{?reWKO{!$vZ@2o^lO$A7Vh5Gs~0U-Tw|3YIhIl0D*7cIhC;3ok%
zlTkiOQS-PkImY@zB#)KrvuA^=qi)8iJdG0P82d@(d{i^LXx6|B`OicI1Y~@KP5?AG
zIB;Cpa9B*4qZZ3{-X8!La!l^}$6L7&Q&L`s=+sim#Ra~%gR(M!Fp{*icVW{P3ws_(
zZ`Sqp?PFl1t5X3RTg1jDY}1J-g9T*e6EzL5b#$E3bqzsv2TsN!4Hh!P=9d;$vgl-F
zx`Js&zjnz(pET@Zs@V7jcG=2^7enrX~njR8Xa_Ri1jB-KYNjBH4e{0)8#r
zPTR9Yz?~ri($6R!EI^JR*j84^z=PwhXt}Wf<2GQU`@|Fi29dq}3%&jQKk;f3B-!}^~m?%>>vD8IL
z&wEe{2D`C}oAU+z-^2j4iuvJjqG8`?#bBc4<7FjnB(#R9E&@VAUmHcLw1p?}Ds>
z+zfLA@6invm%Mn@246lnU
zu5|s;h2|uEeq0Rj(s7%(PN%%5OVX<9=NCFu)&BL~x%`$av14y;oD-n9OqgQ*HxswXkCwYE-AO;yR6_66gd
z-#(m@XmmqDe7s(3I2?og2Hn`Y6OBYLc_z(XT3npHB`Y&i5Fjq^agg7>akH`2aDNF3
z$}c;I+(qRg(oGZKC1pcz8TOItNR|nK`yy
z6_9ZDV*k4F|2(jY9&fKWy)ZWq?|o2|14YKJu7qqTi~^A&ayK*V~$DeNfMEcfYNtHwO!?y4tx%i=3Rizn}B&D{XCt
zF-Rk4E^tJoc6Vz9np<06uNALNC3f?HgsZgFNhgs8)BtH2CQ5N(`S~xvzmTo4f$8hx
zLu}@yq!#y}c7xb6EObc@gyG7{cWBDXoIyPXX#9;$D+Cd!EUoNzLBZnFb~g4%B-*|Q^A=hq;fWcEB5FOn1PqLfRMpfzM@BN>Ji^*Gh?|HGmP%5Exd>3NlxBAi
zq-=m;01t$OvMgA#Wwdrv`xN3o!1SE??E}L8A!Ku;rMWr2>K!pRgES;Q=7+4T*wCe;Y%yk2u}V}iEr
z8=-e@)ws|@_IF!b^839;{@mWe`7l-m06BGrs^m8{md%AKF)SwMreCX9-I=a4tQ%6)
z)TDLvK%pW+B{)ef__BlRPPj;(pT6C_V#1rCT1jAQyQ3BBTca*7{|S5q2eu4n-bJu!
z_&rL?V4!Qfu@X1a0Ue0k{Cpx$NhSkrZOTvr+R#P=wUa2?uOnI_B-g^+2@4L6_?~nP
zdzDkAs>sUTbyUecKhSR&$#XiUaj+??Usm!3FU-b5Ma)k{J+hrU`?^KF_saE*(exLE
z0gvO1_4#8a&Ao!@7#MObz9@_thi4ZOWuP>->a|3@P2~);`gheC$GMxxY^EyYm(OWx
zY6f0A>{)g{DSlQybnJbv_!WsX1;I&Of8(T6HS_}rFyH+cxSif^m@$dqniU1N%
zj!fZR&~;O=vUVpD`Vn(5@s8kCJy)<3x%Y35Q@*=+8J5
zi7`eXMn(l_5E1?PM(?>J>O+>tjvHp%NFqLR;EOh=PaJQwq(b^FmVxXu1XO(wD1EDc
z{9xfNSpzRrL_0yL9WdW&k+-bCmnqW1P3G3hHeWJ7@d55ji8bX<%6OoR>yMJ
z_9#B#FW`cs)j;OL$PR_BZz6BtzV@@bO6A3tuDL#^8go75(7rvu6Y$wtka!MQ_S&*f
zYNw%sXV|*jO|4b^Uaa0q&d>`nQs$s-^`saWce=G+EE|fq|Fp<-Ia~=t)JuW~#}P)0
zO`6}dsvRRtN@8(urQ6ngN04vZI2b1*%61RgwSo|wyQo*wB1vgB^-sR4Qj466rwQRS?JL`2Z_lC>BU
zTe-_Ay!^sK=(gqu9cXz?US-7^Gnr}gScs^*1FW&i>_l%I@hBtN;ryI6!!|!TVd32r
zIkW3?1Mwmq;q?>%xM*gS8|n5UA?fLpinPt0HwLrwU8&$%LprWycvIbumtwV!<8fdo
z&1fvb?bswWb8#{~J{N-Oj#AM)*Yy!5-#`iKa#vt8&*aGIN+Ac}hd-&rAqGD8M-^<0
zA_x28agaRm8t<9(GEeuWEORg0|LgQM{~-58@B<95EP4#)1=tfr
z;-14Kx~vb4R2d4TE{C&ikzBfZdJ+Dg>{=MDV0H@lL}6p@?Uje|sYXU5fV2AgwG$R|
zL?|iSEHU~XaA&wi%!B>>5Ko^1Q|}A3JHW*QDsa%>Pvb?yAS=Lez=#b$7M6GgEmlTG
z4n{^1N%(%4xNB+(3MDZ7Y^oWKSJTR4atAyaZf53&p&`DoJuWa0YSQnRxB!m}-E~
z(#8eXLAc56`a}YRxInNZZXjHN8(&)LsWbt@3E+f*^xel73mkfEY}n|wJ9j3m=Eh(+
z^8EsKO3Lz_oX6h)N&@4AZY!8_R%hM{5r-0>nM`RkU*W(&tRDk0*QyH7ONoT8+J;!{
zE<%zs*o*Ka_`g1Bf156WX$#&Z`+Ivn;yz)6u>gkq@gojm18|MsB--8D0y~)~u?KFi
zZ^CWPN6yI!3Au294#onuH8m@Xs0DZtUhio96V%RGgx8+nd**y-Oo9X1=i;Yudt2N{
zXnf*gV`pV#jKWJ3b%Siw3{u+3uU@U`=^tBLufpIo+Xy-u|FE*AxpeRH@)|O`5h7C3
z`#3rxA`XBi8H}A&0zV2$Lv7?0AVnOD>T=?vxlHYOc!n-q&}$g@=)XF(ut05Di(_D^
z4YK}EpPqM()xP1x<{{wF{Qk3|>S4{pMp)CGdfv^0LqogELlRM15Fa8GyZf6X3tn__
zt`<#cpqc!CLOcF0uGJV-_MJ1I=Pf7&HH6=b*qv_b`7EBOlrgx840Jd?z`n*92YV}^
zzcPemC%@f@G_Wo3A-gSgmq(Pn4s4eA41vUdB*6L*Im8bJoS?U^HmRkCu?*0`#IU;x
zAq0G6%{}Ry1@RT`^(?T5!>PtbqG>hwT?UQ>09z1#kdqCned?`EkIEgqhF++rlYRxw
zM<~rIf9}<%myY3wF~2h~7P}ov@0mdN?c{FVjrv&r9Bhh{*L>gWD{5H@TWzne<1>N;
zKxyjHXJRrm)C0R*g^lnTSVphRjnjr3?DGRc;4)ODmiic;E*oak!sKKqv(IEe?GozU
zW-afMAc)!>+59^AFkc1M*5`-_c^R2I{kH`r0Pt|5q3vl^G^@@5fZT*#YBR58sNbiy
zeGIbwNi94e%k{bq7a;1ZGlb5~WDwHA#ELD=Lev-t0N52RR(&%}MfLQJYqX*PU_jM>
zFBM)bCi>ebXLzw{IjWcAdkzdW*T*zig}QV{`jkmY=
zgH*&C=fj8n;$pqh9EfvnBEDEAa0h&3L|6w+KKHR@+A&X(QWst;bU6$qr0@5yNaNs=
z0%t!E!msHFhe$>uPEXFyJXAuTDk9@b;<3Fd)IX0yMi~4qA+ldV{>AcLi-&biGBR(t
zZR=m;Z;+a8NTnkNe)Lmx_H!lmD^}IiEUlJO;LmwE-@{jAqNSykku^r@V<7e9f>j(4
z20aE0M1-Eh;c#ltvb!FA1CUTxlP}*Z3t?eR)VdMX9o@pAe{FR?F&oZma?mH5nV}50
zHe`<>#pah#K_eA~N)Y|5kOnzsBCT}2_j~cg#Sxy#dJ;VkPrC@g0^jKtJ%g
z9?b*g|Hg+z5AKX&D>E1ySF(d@(!##mz#Ttf)lvRhTe}nvCa`=NWNUbQ3M;lEf)_|f
zPtPafwI0c1H>f{}e!R)%yq9d{pEOMT#N#6!U8CFSF_+|Skf&$E@(|cmw!uuM%@k0(MjOik5Ul=vsGT
zq&<2~Cf3u%cTc_dZ9O#h93w{1HRD`L9}l
zoKkqD@z6kh#$~J}e!cb;sKf(d3?xZ>w6sew#(*ety~9nAcGmR>?S#N79i};V?orSy
z()rg@Qc#^FIh)Tj4L2wwnJ#P-+E4dTRj}A?!8t-dWQl+Z0>C0_dU|rd-d^*hPyl3h
z(|%XiF`x~gXq%}u+~y$wWrbx(q$3RN2MQmoI|SF>0iX58)|TPraJD?Ae3ba|Q#(7@
zU-MvSFTr-$)h+|h_zONAWDj0~j|flunH(Rz8I^4#G*Opkb@#qPOGB7EwSb3Ks@6Mz
z@K7@ftA4N+vUlt$muBpAfOG0ydP3l*P!`MYplg=5@r;bWNV*IPG<@3il3l1e8Mcgf
zgEd+mUI;|I{Mt}ck-h&Bp!@G*5>zYYLC$I=?b1H<04
zY&;}_Ho`9;Kofyz1Gy3riIXmSzXy#=VbN7TVw-J%Am7BoCE=9yU(qPtnL9qTgR#KA
z)-PYKw|?2IM>n1qj*g~T<2zC$p0*EPg;F4+M0lGw+D$U8%o%UhSmt_)k1S5)2@
zm}7no8$xq!9>(*Xc*lph_}-eX$~Hf%G>Q{1T=IlYxMtp^6h@UHyZnv%l(Mq>l$7eE
z%oY)}R8j0qOm=_7KY_kE9>ZB0zbP`#WSb+E1XfQzy%!=);CjBz#16bCHtcr6SgSI`
zN-^S6UPxOCg5cUE^*q%s2OvZ>)T3KOw6Be}e7aM!vpT9QFF!aETCg3_9nn*80Wv1M
zwQ<){NQ|a7F2pr+OOT>L*O)yz!2GX`YJE51GyFM|A0$kccVUDu0?Wh01DX$#
zRFGcGz-T9)`s9iVL7;hd2)WUA!z;SAJTz>a(%n4?dsPUQgvXtO4TUU?d$<0e7BDdx
z-nSx!nx}=G9fTChC0j;32g=E*-2gpUtgZcXDj+g80A{HL2s#eje|iKiy+No$tQK2SV_S%z#g$-cRV4V$lnH<^~`&SyP|G#n}1IZ;GPF#?-x>Q0QuEJ
z)5~b)8DE!td(wuRYg7+}Pr#0$+^Zv^@aDXi4|PqMbOd`6%yuDWE4Agwi-#Ck+~Z+M
z?miSAER##J->840O4$ww0RPj30HNckGMtC-xsy%x6V}gp$
zrqP^K&EQ0R{e2kJ5DCe(2euKg#i%`N#jw#8@i(p=a}1Ntmc=Xw%7*g~W+rS9
zk-_tMATw179ISK;&^NP`O#KuXSfEvR-D0Gze*}5sIkeULMig3TtM{*EES0W7n%?c}
zgIRg%nvxs?Vd{L>K$LWTA{J`c_o@9+(H&aI$%m4JMRy6-?%fls_sKu`c%$t$UE?|)
z0N&U_@%3QHD1-3%YkH4V6JjrPsl&|N9N3QlXy%8OK-@(So58HAS6h=h1<#C3IfW%i
zxK?=sx$VtklQXgt6BDU@nIuk3!>R6l>o-7*_aRAWi*JSRT*M}``Kqr1=gy}SlxK^k
z=Q9b3E`4@c1_11f249nkZW1fI(XxX~X?Mt2*PJ
zAiwzKPeoX^!}~g!3nO3|{NI*=+c;ZWwDzf(N9Q6q%3S{4Fmu27kGgpv%%-*<&`(vt
z+0#!~%({t=2@5N=n&Zq>hMEZtbu??}{!)64?hk2D34mtjaoqYY?kALp|7{Rj7qV1$
zLvXD54eJhcHKwwo&Yyo$dl<@C8F~Dt159CqvE0}f+VP(4>e6(mJ
zz<3=!g>)sY(D8K%G=iPK>3dlFu{RR(l_65G(r99Ze=eHn?bow#p+#!`gouHU}v}vN*-DD<)TyOW8bK16kt$HYMNP4tXpvR}ZHl{8jazWM!L^jkk^^rO;f+oos1__1}
zUcPd&IIiQ5|lah}%$0@zaZ95$AwWbXx<_w|69`a=&s+r=^zRBA_t0WX+qB
zBB2DY05oJ~LU&r2(^?6opK%*3UsX-va8ZmjjRNcV*!QA^T{H0va%=L
zB+uMji$yfPaY%ZehDFcuj3IYM4$h+vW_yvCjRPMV8|hNILVaR>+~gYnR-hrL;(+25
zz0WW(ZtM%Gd1AqM)vvQ?{d9Tsl5^iooY0Bcv&Op*Z@+qfZD;KE+uKFE6d
z0jrp`&EuH4(ip2+>6r5vRh8L!moa`$CB?_v=2U(B*w3iWBE`oMj?eR|FEs=jA4XBF
zO1a2adnqL)sh|Y~^MlFoPM4rJ?XqNRi>juWm>8+O&rZj|HZ`^(s&MU7aPW=3<0{9s
zv18)Zldr47&ifMBEuU?TltL40wdGVqTuvmZ$-D_rG7FnB)0;F+?
zVV}=M5(CS{Rg+=E9!@{nx{q~h;gQ34qP|Yli1w|BIOe%Y3GRQi@9s}FRcWiO9oEs&
z;TlTZG)w1D`YnedNl>%APP+_~Cj*i=+oTBZ5?6qc_g*jcs`mMf;8?#q$vEFBq
z&@a;Gvs=vpCjgv!Od4f$q(=Z4so0x5RkyFJ+nicgK7VM7EU{tunDkt|ILEtDoBvct
z+b?TwPYcIIzlTPzB^1@D=v?*W5=4ATpJMO
zboMuN)_B}(t=_-7gV%1|6;Av!&ZGfjo~9J*U9Mg6A6~Iv-rWWrHN+F%MV5`9CKeWM
zO^`cmwhdVzd{>LU+hGy5QgEAh%7~H;gBtc0n}$Z2{VR#nYC~pLR@NHxUeLdM*PKwF
ze1t@cDp}PZ?NtnyImiK{GRJfjwa!6fSTO6S&bT+3XS=f4S!lj`-Oh!d_b>^$KEHjLP4*Lo+}PbcLA8$T^4QK~?&V`XO1LThDM*Jox)?XJVZSSEwcdf~Nqme@+@#~^W
zV26{D$DO7rW;t)RDMP8|vP6PQUzG2nK!-gyvxta*r6sD48MiUqylVHZqh9S&Uz(Yf
z|9A}BW|I?T@08^^GIgp>JPK`5=@x}U1UTfF1wmFWJF^EY7Zvx
z3^|PlAK0yuu<2DO0bpt+cxQzV$d#|4khQOJRGto`ntT>*aUVZeF-B3bSDfOh+T^F>ooLN*t;It$6Ct
zT!8EJJ?EUIp~0mXmz@Q$DtKy>j2(XqmcoTHbAji?R-dBYeboXgR2nQ(_R|6r+2AQL
zbr%Yb_OyT10-7Lo-`Ove`*jkyy9xc#iBZ+i<$-OccjIttK}fHCc^+eEjVCNJEyq%k
zw4t@R*)->ouCBtCU}J0RM=Yz^GQ1T}5T?OK)>*jb4yFRZsJG8=NM|Vl(Asf3b#>Gi
z6B85k_GHYMehDr%2Mcob0kJnROYIc1)QZdU^1h{~gL1h~y_AsD?Wl?4knAXuWvUMN
zqBKmNY%uC*hlW-dKDA^z2pl?wZmF(w?LLVTiY6mBGkhDBn0@A|#>T}*ZH9iC_a34csVq8!5i8Sp-IodvEcyeLS
zLBmXA;t$nISM~9V{Gp-ANfefGQ;^6j%5tXxkEV@HzI?M-5)CG$2h7>4=lJD72z6;E
zk8^G{O=w{+^+k)@c3LbBIUoT$@n8z5!Ek~4VAgs#H~Kpu8}GzK?ACO1m+rsuyTaHV
zrCqVBbUNR42{hmiuhMadp6K7gaZ*P)sXOfNNH8B8%QNHMq`e%;^Udu6*Gu1Ti5zG%
ztdtb9)3&PB(R{A8L(~eP-%eIJ=Tvfn{}Rx#3r#=7A&U48b~4KIG+b<+#v>%widKdT
z)!mNQ;Q8?x4<-Xgd2Y_Gy`w|uXgz^OGTeHtyhpdgmC-Qn?OW4{yWVa#ua^25;bj^r
zvd|vPdf>0_Fr!%gGT-bxbQJTo?F|ikD&1vHvjhci`c-nb#h&&9X=f^q4-AT2g-?ns
zCM#7{^YmYF--k0CivxWR)M%9_q*`vP=unLgM&7u#;wTl=n}`Sj7?`~#!Cd~pa(e#c
z_|ga8Nz?S81)>spp=Bk-@PTqC834CI<9#^aNK;w4*dAT&;uxH4x8`a=zPdk`B(yU)eq+<|
zY5tegqxpw)jEqCyC(7qyqF@=AXMe!q-|BRM4dEyYE5Iw_&dJ1H@(%G*iB?_C{5t}s
zBys^mwjWlrt&T}TW|vYyYm_~dt2uhOc-X&x0c)&e0l5VEj_Z#LVLQu1pna2eTmRt{
zS!`NVbvDkm((RN;Gm4z)-Ds&DvxXXJpN^zrx)Lf)aU32nY*jcM;77|vMqE!k$@;slM2WC^3QY9sd+Au4B?Zwny+T!96rke_;H3kt
zIR%SWYXnCc6aj8Y^>|<>wuGII^A{bOH;ClB>11>BKaPWyvwlH)W16y>b_1*%xz-Dl
zp|1Kd&KqBNcz7UG1J9hOk^t|+>XWB7b7@V96ES``d7-Wrm`S<=nbAW-CYV^I4Vy0p
zNU+B+J@cevE6$c+G{%L`yA$tMk1bJ!B=pW^4o7IW_o92NT;@N2HU$UV
zr(eVqJS1e+INPhsvku?5Aj^igZ{glE>QDFiwU1&f=KU=Eb`Iktx;5ejpW9exT+Nj7
z#YpSUN0;>U3dJNO5LCtr87g=&pgf5%rWj~288btdUM1zuL&tLy^j0Ae`ITQ{K&17x
z0-hC=z65T()`mCKM{fc~nEUM1G>5bRDG{nRefdU(8s(0PFJ8cuKspWlxhTihy~T
z*ksOQInvOlhg4(LNCXM!gendkisqx)CoXYn+YLsqtL;v0W3%SVgfWfABWY?)zLu0Y
zuAor8Dl#%z^%5}cxF+!97=?jB26M@L4-bz?O^URnmWsOi3)vh_{1Q92HHKH?yr+}C
z9isV{R@xSNVy}LHV=I7|gVQi(f78fp5XyveGc&MpmTJ{?NAr!xeBrZrQ%9?Fa^%+J
zv~v1Ie1sCs-i>Vy(;~NMQM74_0~cR!Zf=sCIy|v59(;bVUb8E-KdmjZqOQq@*4wHW
zI=t1<*a#+5&XEGcz764-UrUg`b#>F6DD#cIbvc0K#DqlG)TCs}8R%WJ%>SJ9{ayk3
zKy%5(fxP*PM=$a5tPZZ1Fylm!`i=zz
z1i=zRl{?v4px-{9AIg<>o?%wo+u=Wk_YZn}dPSmelz2)ff>8)&q6;667P^!+s9FoG
z&0R6sutar`KmcS36nb#$A-F$I=s-_JHSgf?;7fOk+(3PBpl8J1fm*4;nSc#`>?1*y
zy3WF(U5|yvwT*RJ1$h^Ost{sA^CNVUuniu}#NH^f>`xy^K;5F|BeSUO!bSz$vNF%o
zaCtJ}$E6W4=H^S-*RDSdMkGpqZltRVShb{iWaF#ODbh{+j_+Q0RIATpKruK@KCN%RvK6g
zVWWFM;V>WP>9!!Dc{oW_Nlc~>=dN6mD{H%oz~M5~JC=yI^x*sP+8A=nO?`dz1S$uc
z6L-b_4BtuGgjs3k{BE1K^dt@V%}j$I3&C_6m^Lugy7l(L<_+ITOX#SL6<3|;>~s=F
zrwBM1cF4mauuZFgt7v9nv2s*P8)a^(pkVv%MLVz2;_0E=IL~%3TS6#Sq2x%mc7Q+%
zy4#nj~p;C?GNnzN#;yA4)`?d%Ktrql<)F?v>xyid$yY5gt&QUH^|?|1Nl
zFIRn0rn*Opk58!5Dxo6(=SAZ{7d~rGGF$m~4^6m*&th=-!-d?%<5gSVr-y?h#b)ne
z--_@=XV|R?POz7s9JC%_t5`Q|uL-SB`U<(!5oqdn?gMLakNNKP@w*WQ9WfE+0m2Au
z(S)ZQOHX!2-#_{amDN-d8It>$n%a|}R^Q~~YDP^4@?0$w5h=G_O;;)~Hc->#iaw2B
zUgn&*?qk@n>A=C^6o33ZcGrG0YmPAbEOTmGd)VObFtM}>SyRFfJ>{E7PSg9oV@ubM
z-G$_;VbZ4sEm!hYO;#&Q!-o2UC*tyjMu(jJ|Hz$AFaG)UoO?hDER@p~GdFmD6yZH%
zsyxC15zx~|k05BtU}MV#8>hq0kR0q%8+mzo+e-t$u^+!~1g?jplqAEXQoe)vDO|z5
zPs__FcWqtW*<=~*Nwr3Xtg@|`$~&$PTVswFeVGMGFdIm%s*?n_hs1*YZ}M2S!l6R4
z11~A#aDj|-P(=}9zS9b8)wl3}YLx&OUjO5
zsc99r+70CG9)KBzVtW|oV93P@O;|%cA{LBzcJpFtXKh8c4*n#&wF+=ncvH=sSPQCM
zv>UN#0i_76Z1~h}T@O~G`^jw`WRCN%x+*nZLX?F=v<@37pY^XPcku=0hXN$4WV2nh=8nMhrzc?3
z&5MdEuyFZ5?7e4HRN2}tify-9P*G7yZ5z-=KqY4tl{Nq(DoPZUph(WCup1E(0V60m
zC`pn8$&`SAl0mXSNi1?MGFA6kiru~MIDhUPYpyxp_et+I=X{?6
zWlll8+ZQkXW}wchSc0otko#eF5XMu~gFHc(=jAy)*aXg&J@NOcpKGzGWbrO?=6oyb
zC)L@W%e;#U;a0vlYO$N$-IDzY=2wgFE;pA?xcqjqFOr+Z%@|g(@RObj3w83vUa)05
zn{8Vm=euL@gcDLD)}1LhDn_4q%IdUA^_bXRg$Q$y8go^-=xYTW+haZ}1s?{@i`{c>
zyi}G=#;}8I8=Y_hrTbt(=vwL?`gQjYXH(isf+cAAqZ_xsn`*qyLZ-ADR~vAz6}=!e
z7+_xVQb*LogX#t#z@>*`hULZ%mJ?gFqF8(F!-r`JPXQT)>ZUV+a9|bmlTQt9=D8=y
zujoehM@c;nqe=To@zeYkDE4o6L~?Y?)nt*Ec)jP-^^RhUDLS#9u_beV16S5ygI>+`z)M=vd=OwJGG
ztsF4|?DgS(HFPMeywedB;)$B}GwkLyztU(mXDYGvUH$rgCzK@2-Z+27?ph+(K@<&7KNFYI)kDAV!5&PY
zFj7>qM)xrg=bYQ|K)`aSnNK4{N1#4I;1f{Z@4n@UPzKKNj~&)cfk>D}0{F}e2xzh-8TO`EHJfSF=C
zTmG!)(;J}hrENMUC|TrFPar)6
z(GqP}$LUuK?$LBCa|V-m3l0jC7CwyLA3z)52LgO@pn**4+}e7FudYUpO|b=WBRdo)
zsWQ{t?Ote!Z&v~BpjdzLM0l({Ijgm%T1Lb|FI{2p2iav~{ci+!h#Js2*;c&764|rv
zK)c6>oo*aEay0?einK+WnsV9q=FV+wJNOavh!ukAH&Rs5t>lB?#xj{
zOQfv~&S!@bGv|(4?ah@P-1hA8@pI1m-&RghxlF2QEeov83#HMsoU8Z>u80l9PUI^u
z7K!Gv@%Qxix4Ls*v>hv?f`m@>4X<6Oe75|zY|WY5(nBf9N`TLC9J@|GP-$qtHZxD*
zj-r@Q{B^?*H6|*gyc`mjJXwUEJI_&9mO<>JqCVO?LdnPS1{F}#SA%?
zV^pZ;O73hb5WF`7rxYygli<~7H_0A`HJVf8_KlM#Pbw>WNAWvM;*iUp=}2BLk|c{v
z!nFG4Y}57y(-S%BT|&c^W5vNj7*_W1VOdpWX32xZ(~Yj!h=h%^D+9GtZxuqgZ37q%
zGpH=f4)H);w97@x~soMKm!9EvsFPOZI3$u02V
zOTAKQ`m)uwlh*!ma=0}OCpqwf@_c&NQ^xHLJ%-T-_YFY>f)E;n>>ENf)?s{CeH`e{
z8`;9!R#tVw4GSjer;0uOH+Wg&lnZM4xW4+ssHR*>=kebW@Gs)k{=eU
zSuTI~QHCSabuHC(Y$`Un!ZW<`=*^p-Wa(q0_>D3zjMEHKyj{aJ&nNL~ylnR}klOLV
z&km48!za#CUxC%4nlon~7N?R3PArnv|Uqcp8nmQ1IakiRGjf2J_#M;g_{3UwYqZ2s$DZIZ4B1oQQ%+D?pk<3aTk
z9f=cTYQ4IS<@#;F|5en3AKeW1OKcz>Q#!3BjJ3I}H2MVRDz*tgChgZ#LPFFX54oA#
z3+;)HQpRS~II<71N#O;Kqu6Je3zO(uzFUJG9qPvasWT
zj1kG9FI3DdY$dXJeiP@3972xGlx$)RaCfn5aq4OO`>)u%?-W>h4yJZo5tKbyB&Sc{
z;oFkUaNGw;D+k<=POPa>vl+Pb;z`Xd%yq@`tj?XHuGr*7yO2a^Tm0mr9mmJ#{qP^!714=%Dfx{VuU@LC?hhriDY2HIV3uP-eh
zI(PBnmGkG5rcd4PlMB97=(d@J*FHoUj<1a
z!@U3%m^sIr(@ej+CACc9zYyzpklGFbib
zx|4IpgNf;nV^|>Kj0KPLD(V!{e6a6Q(+()!?9dG_TIxJz;&k=-r
zS>CY`b;g2ncoF7syqRvbQC+-w1@SI6*nj18+Vkx;o{CqA+W5p5P3tD=)&sVNU>~4Y8L0~Ggvz`*t+Ev${w{B+QDa#)<_)ElBPlpVQVko9
zJ2s-;J9MkIu{xZkzbSb-?8I8E-ouC0*tXC(gbWN&DM0TM>`byh{$v2=8CxyD;!CFH
zL2i88JFg%VHd~~TWzkW{drBBog@m?0zMP_4+JjxdXAAFH#=1cT;1C!KUo%G=_)X>~
zEyuA8EMEd~05JzXIEvhhFdbU})tJZ3`M3)?W7*b2J489ZT}!4x@-yop^Ic3#PcC77
zNY8%Iy4i*zWH2OKaoX5Bz$Q;8Fj6os#?Sul%2OVQYS4y5s#44aTbPw~4M9tC=P7
z6Vr^?q2)wO!P4uI(D~-nQqLd%7ytd_&+Y$R2LD~`|9zzYC+wB!%0`htuz>$~YXA3a
z)qj+K{P>WGNoK0~oe>7OX=8*WWJgZ7K{`TP(41kRKUw`b)5;zP845#Zp{$il8^?RM
zJ$%?(wgGlo?D{1CkV_ilIeFuo-Wd%%+%Awinm>umj}@K{lfAU2O49z#BE~H<$R|Q|
z8gtYIMF@uUvcN|@UnoFI@f97SIDdWZOWJEMptDOy#cUQu7XvA$4wKbxfSlZm_$tLZ
z1I#-25~LLV?&)z|TaVF`YuPHuV?~DSDFO!uNob=`odW7zEdb+x?yb5Q0O(VOi6zl?3fUtSEV5LP{CQ(zV}q)8L;lsc4+LXT-J8w3YjrN?@
zTkU`uo+xf$p3j=B;U!J@2MY(Sl&}W<0~80=U}5D_@SD9nva?zpy2#S1lpOi%TsnQu
z@H7U%(9q|3FcV-gLTsR6zw++(r{ydyDqt!({zOa&r$yP=FTc3z2TNO_`W$&zy1vD>
z(+YIzI#+0_P$Rjsvhe=iZ-$4Xa*kxE(I9}=Cx5SZG22l{n7e`
zeblO)E6G}X{95Q9>cZtK!@XrfLqfh(%X33<;Dezn(PIw)2gtR&oXeLy`F=hciFa%o
zru4VPT==AvnabbMvLnxIrtvxhJ`!~V?{X}aLht88F8<6k`qr}k3i1^WZuexs6r*`Z)??gi6G$a0(ATtpzDM!>Dk5S%msIRa|Cp$Ks0$rz
zvEU^frVIgzaEsn<+#rHPtf&=yoo6Td>v;9c?S+TsPM*~3To2jN2p*`_uJCoYnHF$k
zy_lgl!&h|}h!c07`)r~b7gH`8Y?>c^^QOYWYVF>Wi*jtT$8>+rHYxJvW*{w)H0Gg=
z3i@0C$?I0+Z6#!HHC|NJv_hn*+uTw`!PK_$n>0xo93_Yt_BF^F^u~zd&sY0A1QZbk
zc5>gtZHFWTlij0+5l2O+K64zZ!4!nQI)9;7Fver8>ZRcrZ8Fpd6#5huvrPrq1hh5}
z5oweB8e#&Q!JD^URpz*(m2OJ!C@jPrh`zo)7?cgNUCla~*H;4d%qqG)<5^6ymjQ*qqm>5NPDRu
z@kHzW&$m5X<=3#-^ZuP9V8bFn562eG9;51-&`_oO4{G7
zio_6Q&6610KDjaWieE0-ZAjqsp99`o}Y&9Jnzo3JE$b5IW)iBamEA^J{Vu{#5HXfpM
zQd>5$FAaZ=)b0i7msq_Wpd(?AK#OawEemb$__%jF65QLF^fn?u5e
z>dMM*AzfkSlmMs^KUR~HatYtlvFq_lf`!H1TE{KZUoNVDVuXw%K`1CA<3v6QVk>T<
z8wDAaV^3S}eJ+FKbgGxJRzQkfsXg0duY!c**Y`(56QNQ$u8S@ae4d=naEoZC-#IZL
zrFeFQ&AVPeLvc3cVdWpSy{`b(?v%_@aM5f`e;b>ZrEQw`T6q_NFfPnm?D~3y{qPOb
zFzo2sPydiD#>{Ew@u%Fy%X+W&R)s1U?`~-YF-(jGpP$Om*-S+CPWDw^xO7Rx7$ZBo
zz%PI3Udinka?~Hei(GbH%4T+-o)jW$#@;3MnDa21ksCG4qUI$t7lr)-(|ac|mUmoJ
z;xh@!p}@HuX1ljb+T;#!YyONt6JmH70x$FRAUIOi(2%kjR##BG8vMxLpS|c)2<{FT
zRBV(WoboZ;>)o2A13`h%bQ!2AC=6MkgH~B<$g5vTGOCSwi(4+y{Y-ExpV~QP<&8O&
zAiez8b-`JwtEYFO9I-5OZn6uYd`aQ*+_hj6riLsals3nqr}V5|dPtpfb<+=k3wDj~pK1F4mlA&$megX(-Jt6gmpDC4ah7G>_3
zF(>L%7@BQDlMZFCP;Qv^m_6g57lq2Y*M`=L``w>y5t
z8SHj8v^t6et(Mrgkzde~K87$!dg}jeb7FsRSa)&RWv
zg>_l)2Q^9S!E}Ul=1!$1Kz{e!%=gxeHafc(x*NKObKXB8!mzP;@X`
zsMi_TO72Xd01$%0jEoE#k>9@XG
z>AT2tYDhib0#dNHxTEm2!_6v32mu|MDsXtxx&@qbphrf$ZwZn;>%?3ft`e$?N~wwC
zopXW}Vv(-}x!~9*5$k;3+PdD3s%hJ5MaG)ewRpE-%D%U%-Q5?(5oGH~
zm-IpjcDx(pS;sM)ZQ!vx%%$XR`SK%Mp%q9ctE%yrcf$OZ1DDbrXP;j7{449GM}dU?(3GkzLrstIk*^ojL&
z6mMnkdzh&`TcUc>n`;r!Zzwb=mS4{Xh#h)NGOm3oJKbNGJoY=({Bu2`Wbs?IQ36hV
zXK2e2HQ5Boo3Q(A+(2o0`C^}vvweRw#%uPyrs)@Q2^myz(?^SeXbNfV;o+gm%g$B5
zI`vcr;IjPE0vGzG%`rnX(!D5=;`+Ui#(+5AA-Zp0?3U&|N;#vGDA!JgWF=r(cebU+<|f%ED(03wuvxmJd_
zAh+1|2Q)0oNBSd!iDX8^Ya(PmL*6?qy$7=s81-qnG%z%~
zB#uCFPoH*Xh$_k^TuF{dx@478F&W$NQdHZ?N)OwC7ZN)Gy1V*;2E2)FLw5F)(k7$a
z*>aP;HI+JI_G5*<(8vor&Wxh+GHQso&Yws0B;Yt*h^&pSJ!i}Y2jeH(`GV~GKcToO
zhH0$D48!+o_FRBA()}rq5^1VQA1K$im*4jt9MZ)ms5p*Y@XzC%uT}9DHirK-uRS9s
z=2qTc84i?MjCT~oKAWFE4AQ5+<}f-8cA6#B1adJjfM1bB*fzpewdV$G^4Af)dsGuD%J4l
zKGb;H7;5bNA*&wX=f+)aK?g7^L|c*?V9_~C1mQj=FLYNzM{^Dbc7EtKSyJ{7Fz?7j
zDnySmBvj%){F<8yA%UmN>@aTDC_+yozzW95F0?n$xG~GXH!%wP
z5@`NEQZVs@t)oPVG>*8JdYb4KEz}knp@|MQG
zbjw=!kS3v*2Azb&nnY~9pa*Zc7@{5}f!y*>jwTq+(PKkpfw*-ZGR-{|ft*30C>=rY
zpg@v|@sx=~__`KpmfA7<9L5zk&Q;jpV48l=zxRuAwovvNq^w<#4D3JZUINlXzrs;G
zCNNmjGvo&rz?~`ITZvM7VnWiYw@Rn$ql*kJx{@HhBO-c`^?#qLWArOeq)}tw3U6EQ
zJJWJE`{sy6P0XK!ryXA6)~kJ(T|mMrYcnh6#BT3if@2qHa=iRxT77mgw~5$19k=<5
z?dh4X>78EQ%mEG~IcY}~7Awm98;WI<%(0ep$OC
z_Ao;0KMc~K9`;;|Y*+;$_yP)YCtnL7?t8y-GMp#0fivF;XC@}KeFT1RxjFsqAOdc)
zzW#LvLtB}pCr3x4$SJY0gXo^`%Vn02HC}h-h7u~RPh+B$JOqB2Khv=bT*Wgt(
zHMN0y6Q#5Tw7vXlDF-DsoP4+~(9ds2-HH%xlk5}-YEi^qFXE809UYyVd{|PVX|{-?
z6+a>Z{|LzYf^a%9RUm^wC+CcpoKeVaMS~k%^c=+mW6Yb3n!{gy00LRF@vct*1_Gq)
z&O=1)Ys-Z(Bf)gbA&h`w_kN8x+T?-ZsO%|+7SifZxV25R&+Bsgn8p)r66ZpZOY
zsT0GIuUrHXJl=L1JE&4`U%fN9*5~e7E9#Dk+rJ{qmwqu!&wwOhi=wv#Mcf8
z4CGXWjs^RcmVLWxAHoM#UcC4m;mFf_d^Nb7QlNkwc=v^V*lzqWQO-rH_@W)pED1z!
z>O`OIBWg6}N5CD9TZxaO0TOAt3ZlM12P)ughi}ZpUJ>jp!S;*XVk7!O2CmOAv}<8w
zpiQBLk*Jk_FJB3oawLJZu5CV?KmF@pXbUB^gl;!hF=o8qkQO?*UCn*@16ki-2F+jNQo$WqslplO;7A(UM{mY3eNrB`>w(HT@SSgNc
zKrIqd{JCNf{Z6kH$Q}*nUW_{0_+6h%5L-7J_(ieO8VT1I7X%Lb1t=Sxq|j+&uuCd7
z;n-NAxn2-5pdvTqCfs}a@
z5cjwi)(Lgn%mq0-8-wwhGFsHq7Vh5VtH>$xq^R*Z%mb?F!f#+GyK1Z#3O1x9wt
zOp!D35IzHT^av(i_=33(ZR~p3Q
zFa(rDd00wJ2}&a`4iy>Unp>EgcbKDiCaU^1g@qoQ*256?BuZ)DfdhmFxfFk;SXQj9
zHs^c_h5Cbja_m55R8)6cvLG%TmXT8KSWztWV!N2_aEKvsT*5NR_<5eE>P;_T3At+2
zd+c<0fgWK46X1)RBA2XPlSvzFvcQ<9zxVm7-|<=R^t?pOM3`gA{z&F+2Sd#KQOnif
z5lGKQb%eJna>dsdjtAl}TEd%fJF%XHH0pAE7P0GRpP^scr5pt5^WsGb>p@!_Xti(t
zaQBNO>BFrpJDpJ}Y+(9nkFVq0XWvECwodo~FR_mM>EjsT;I$Up|9boLs!cseyP54*
zCEH^h1a6UdJO_4`25^x$?FF!$7ceGcAT3yOIu282YSpDBe_Ua^r7Mg*(Jb$;U(BF&
zvnEo{QMeXDyqyAMHZgG&B9MgwZn|mRMb$mcO8z2z%DH_J?5y31^^jq)zS~gO6Pm?n
za9&isEUE=&^pH_=pt}!kc@+}wr>1kKbLa>o8E)x@_$3?Q%7X`)^7F5b>Z1{FNf(5y
zjd&yw{qn@Nx;fR5C~AF2vMrjy?RJb4R|<=eH;63$5d}PeUarhZGyrrQOP#BEIJg_&
z6lzb#qlD|xmTH*Cm}V>DJ4BTeSj
zVI9epK}jgBkCzKKXjmYpdau@{ix=ZGGQwagp*76qvCuIVp7F#MB{>~MG-g~Ud`cq#
zh=ph+r{DQOb!(Gpac?@uF(?6ntgq6g^vYg9`7NrIc2pm|JsbalVZ{4qSsQiw;q@kd
zt{)OwUjvIKU0+QE8MynRb$kJ7d2f5j(d8EAZCZx(h1p05OHpTa_(BKoO<$x0@km}k
zDz`uUavT^{e)MSC2Wt{)Ncy-h84&!p*Y_u!sp==_=*O{VXMhsU5yk8UaW+j$v&Bh^
z(O?wj&Ww2qs{pn#P1!{a6_p7O?S(MXoOo1h>_Qih03k!}OoJqh%^43KEUicNfhNPA
z7x0JdN|bQkXf0gWjnmt)$gFzx7n0y_#?Fn;bo;kOL=m+R4VXKARb2wfYOLdgSq3(K
z7`~*?S8wX0V!KC!%TrUi^pW|V_&t71cx{g)18yF~%7{XP86R(q#C^mIUaQ76&~g|`
zr7RBH0QE})yxVrQFtG$12u6g(#A~iabm4jDI4H_H`rnYPMslV_NLh)2fIRTY09?I;
zm5xOiy);I88KRIMA12#?YtKS&*JK;#J8;(+e(_{{A@_^<*7@vCiv!vMyu5EHFzD6bTBG{kvenw~%M_!g
zF0=`nwmDn`;mMspp1D0gxYMiJcvf#>W_)yX9Hgf42>8cffbuJEfHS+gwwhZ=BCr>2
zvU#ab9R3u~B8(IGPfzBks+Ys9Yf)a1fp%`;y(F~#g>eX0FX}%62Ib{d&$czQvzv8@
zfAaL{XJFNd9Vo6)+5c#@rrdv&{lp#kuNHvmf4brU#605p@4?M2kkKXhtwxAdOU*WO
z*{>pV=<55g=h6q_)jd4eM2t-#*+C4HdBMFWkXr7|&PG*?;&c&`FzMMY*>ILhKs$}F
z_&UeE*)Je~bhpxlSrfGJg3rQPlsvp@&>$#E(_+sxLL4t?C5%-DrCuoj3;l|Kw=e_r
zE}z^eUda6rW&XVKGjj}*I{?&r36mP(`9^~K>4NLQ)(#ya`V)i0OwtBbux^NiR*@MY
zdzV+CO)mfR$qutD3=9=HOm~4y+3j%y6fgu<&O{Zs4z_geM9B@n#n@9mS!rSg&p|48ST-
zk~fUy!@SJ{me}Ry5zQ%|0Fa+jpb7AO--1SSC&=BzCB`f)zddKRLQ$6u4hd8FF1x&L
z&D>JdM-5R5rhBSZmJZaycDnC?M*6Sz!3eY!k(G5WxL4EjbI5fZHAE}dX@2_j8-C49
zBwl)Qh(~}FzzIhMoM(gW)?IBMlF2(h6dcnjdgwbPeksd@#F*DEbOq4T-IY>aT1vR~
z2}kcF0%2&VLDKCea*t;+G@b72FX66@E91T`hoFv*+4hX6DE(^@?RRsXR^FxlvbM*S
zihqo&=(%HZZ6(+bd?+s&d&26IV}EhsGIXPF5-M!J{+Wd_FqybcI3hu;tyUgiHNVMv
zCn@&w+rhZBHpi)^NE|G|j81Nr6IQ1tEh=V@FLeozQpyO8&k+kgwF{DV7O3)x-p6(<
zY|aDr