From ad2a28de76f5f82061f0decd57b154356da747a1 Mon Sep 17 00:00:00 2001 From: nic <139033898+dicnunz@users.noreply.github.com> Date: Wed, 20 May 2026 23:38:46 -0400 Subject: [PATCH] Implement admin operations panel --- apps/api/package.json | 2 +- apps/api/src/controllers/adminController.js | 66 ++- apps/api/src/middleware/auth.js | 8 + apps/api/src/routes/adminRoutes.js | 27 +- apps/api/src/services/adminService.js | 352 ++++++++++++- apps/api/src/tests/admin.test.js | 129 +++++ apps/web/app/admin/page.tsx | 552 +++++++++++++++++++- apps/web/app/globals.css | 51 +- apps/web/proxy.ts | 18 + demos/admin-panel-demo.mp4 | Bin 0 -> 96022 bytes 10 files changed, 1193 insertions(+), 12 deletions(-) create mode 100644 apps/api/src/tests/admin.test.js create mode 100644 apps/web/proxy.ts create mode 100644 demos/admin-panel-demo.mp4 diff --git a/apps/api/package.json b/apps/api/package.json index 25fa0e90e..16556de8f 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "node src/server.js", "start": "node src/server.js", - "test": "node --test src/tests" + "test": "node --test src/tests/*.test.js" }, "dependencies": { "cors": "^2.8.5", diff --git a/apps/api/src/controllers/adminController.js b/apps/api/src/controllers/adminController.js index b1239568d..bcdf08a99 100644 --- a/apps/api/src/controllers/adminController.js +++ b/apps/api/src/controllers/adminController.js @@ -1,6 +1,70 @@ import { ok } from "../utils/response.js"; -import { getAdminMetrics } from "../services/adminService.js"; +import { + decideModerationListing, + getAdminMetrics, + getAdminOverview, + getPlatformControls, + listAdminAuditLog, + listAdminDisputes, + listAdminUsers, + listModerationQueue, + resolveDispute, + updatePlatformControl, + updateUserStatus +} from "../services/adminService.js"; + +export async function overview(req, res) { + return ok(res, await getAdminOverview()); +} export async function metrics(req, res) { return ok(res, await getAdminMetrics()); } + +export async function users(req, res) { + return ok(res, await listAdminUsers(req.query)); +} + +export async function userStatusUpdate(req, res) { + return ok( + res, + await updateUserStatus(req.params.userId, req.body, req.user?.sub ?? "admin") + ); +} + +export async function moderation(req, res) { + return ok(res, await listModerationQueue(req.query)); +} + +export async function moderationDecision(req, res) { + return ok( + res, + await decideModerationListing(req.params.jobId, req.body, req.user?.sub ?? "admin") + ); +} + +export async function disputes(req, res) { + return ok(res, await listAdminDisputes(req.query)); +} + +export async function disputeRuling(req, res) { + return ok( + res, + await resolveDispute(req.params.disputeId, req.body, req.user?.sub ?? "admin") + ); +} + +export async function controls(req, res) { + return ok(res, await getPlatformControls()); +} + +export async function controlUpdate(req, res) { + return ok( + res, + await updatePlatformControl(req.params.controlKey, req.body, req.user?.sub ?? "admin") + ); +} + +export async function auditLog(req, res) { + return ok(res, await listAdminAuditLog(req.query)); +} diff --git a/apps/api/src/middleware/auth.js b/apps/api/src/middleware/auth.js index 445a71951..dc6a9c987 100644 --- a/apps/api/src/middleware/auth.js +++ b/apps/api/src/middleware/auth.js @@ -14,3 +14,11 @@ export function authMiddleware(req, res, next) { return fail(res, "Invalid token", 401); } } + +export function adminOnly(req, res, next) { + if (req.user?.role !== "admin") { + return fail(res, "Admin access required", 403); + } + + return next(); +} diff --git a/apps/api/src/routes/adminRoutes.js b/apps/api/src/routes/adminRoutes.js index 4c1da76f9..20241c10a 100644 --- a/apps/api/src/routes/adminRoutes.js +++ b/apps/api/src/routes/adminRoutes.js @@ -1,8 +1,31 @@ import { Router } from "express"; -import { metrics } from "../controllers/adminController.js"; -import { authMiddleware } from "../middleware/auth.js"; +import { + auditLog, + controlUpdate, + controls, + disputeRuling, + disputes, + metrics, + moderation, + moderationDecision, + overview, + userStatusUpdate, + users +} from "../controllers/adminController.js"; +import { adminOnly, authMiddleware } from "../middleware/auth.js"; export const adminRoutes = Router(); adminRoutes.use(authMiddleware); +adminRoutes.use(adminOnly); +adminRoutes.get("/overview", overview); adminRoutes.get("/metrics", metrics); +adminRoutes.get("/users", users); +adminRoutes.patch("/users/:userId/status", userStatusUpdate); +adminRoutes.get("/moderation", moderation); +adminRoutes.patch("/moderation/:jobId/decision", moderationDecision); +adminRoutes.get("/disputes", disputes); +adminRoutes.patch("/disputes/:disputeId/ruling", disputeRuling); +adminRoutes.get("/controls", controls); +adminRoutes.patch("/controls/:controlKey", controlUpdate); +adminRoutes.get("/audit-log", auditLog); diff --git a/apps/api/src/services/adminService.js b/apps/api/src/services/adminService.js index 9075111aa..ac5e0d95f 100644 --- a/apps/api/src/services/adminService.js +++ b/apps/api/src/services/adminService.js @@ -1,8 +1,352 @@ +const users = [ + { + id: "usr_1001", + name: "Maya Ortiz", + email: "maya@example.com", + role: "client", + status: "active", + joinedAt: "2026-05-01", + trustScore: 92, + activeJobs: 3, + disputes: 0 + }, + { + id: "usr_1002", + name: "Theo Banks", + email: "theo@example.com", + role: "freelancer", + status: "active", + joinedAt: "2026-05-03", + trustScore: 86, + activeJobs: 2, + disputes: 1 + }, + { + id: "usr_1003", + name: "Rin Carter", + email: "rin@example.com", + role: "freelancer", + status: "suspended", + joinedAt: "2026-05-04", + trustScore: 41, + activeJobs: 0, + disputes: 2 + }, + { + id: "usr_1004", + name: "Ari Singh", + email: "ari@example.com", + role: "client", + status: "active", + joinedAt: "2026-05-07", + trustScore: 78, + activeJobs: 1, + disputes: 1 + } +]; + +const moderationQueue = [ + { + id: "job_2001", + title: "Scrape private marketplace leads", + clientId: "usr_1004", + clientName: "Ari Singh", + reason: "Automated rule flagged private-data scraping language", + status: "flagged", + reportedBy: "policy-scanner", + createdAt: "2026-05-18T14:30:00.000Z" + }, + { + id: "job_2002", + title: "Emergency payment integration", + clientId: "usr_1001", + clientName: "Maya Ortiz", + reason: "User report: unclear escrow terms", + status: "under_review", + reportedBy: "usr_1002", + createdAt: "2026-05-19T09:15:00.000Z" + } +]; + +const disputes = [ + { + id: "dsp_3001", + jobId: "job_2002", + freelancerId: "usr_1002", + clientId: "usr_1001", + status: "open", + amount: 850, + openedAt: "2026-05-19T18:20:00.000Z", + thread: [ + "Client says milestone is incomplete.", + "Freelancer says API tests and handoff are complete." + ], + evidence: ["handoff.md", "api-test-output.txt"] + }, + { + id: "dsp_3002", + jobId: "job_2003", + freelancerId: "usr_1003", + clientId: "usr_1004", + status: "under_review", + amount: 420, + openedAt: "2026-05-20T11:05:00.000Z", + thread: ["Client claims work was copied.", "Freelancer provided commit history."], + evidence: ["commit-log.txt", "screen-recording.mp4"] + } +]; + +const platformControls = { + registrations: { + key: "registrations", + label: "New user registrations", + enabled: true, + updatedAt: "2026-05-18T12:00:00.000Z", + updatedBy: "system" + }, + jobPostings: { + key: "jobPostings", + label: "New job postings", + enabled: true, + updatedAt: "2026-05-18T12:00:00.000Z", + updatedBy: "system" + } +}; + +const auditLog = [ + { + id: "aud_1", + adminId: "system", + actionType: "control.updated", + targetId: "registrations", + summary: "Registrations enabled during platform boot", + createdAt: "2026-05-18T12:00:00.000Z" + } +]; + +function paginate(items, query = {}) { + const page = Math.max(Number(query.page ?? 1), 1); + const pageSize = Math.min(Math.max(Number(query.pageSize ?? 10), 1), 50); + const start = (page - 1) * pageSize; + + return { + items: items.slice(start, start + pageSize), + page, + pageSize, + total: items.length, + totalPages: Math.max(Math.ceil(items.length / pageSize), 1) + }; +} + +function recordAudit(adminId, actionType, targetId, summary) { + const entry = { + id: `aud_${auditLog.length + 1}`, + adminId, + actionType, + targetId, + summary, + createdAt: new Date().toISOString() + }; + auditLog.unshift(entry); + return entry; +} + +function trustDistribution() { + return { + high: users.filter((user) => user.trustScore >= 80).length, + medium: users.filter((user) => user.trustScore >= 50 && user.trustScore < 80).length, + low: users.filter((user) => user.trustScore < 50).length + }; +} + export async function getAdminMetrics() { return { - openJobs: 42, - activeFreelancers: 185, - flaggedAccounts: 3, - monthlyVolume: 128900 + totalUsers: users.length, + activeJobs: users.reduce((sum, user) => sum + user.activeJobs, 0), + openDisputes: disputes.filter((dispute) => dispute.status !== "resolved").length, + flaggedListings: moderationQueue.filter((job) => job.status !== "approved").length, + revenueCurrentPeriod: 128900, + trustDistribution: trustDistribution() + }; +} + +export async function getAdminOverview() { + return { + metrics: await getAdminMetrics(), + controls: Object.values(platformControls), + latestAudit: auditLog.slice(0, 5) + }; +} + +export async function listAdminUsers(query = {}) { + const q = String(query.q ?? "").toLowerCase(); + const role = query.role; + const status = query.status; + const filtered = users.filter((user) => { + const matchesQuery = + !q || + user.name.toLowerCase().includes(q) || + user.email.toLowerCase().includes(q) || + user.id.toLowerCase().includes(q); + const matchesRole = !role || user.role === role; + const matchesStatus = !status || user.status === status; + return matchesQuery && matchesRole && matchesStatus; + }); + + return paginate(filtered, query); +} + +export async function updateUserStatus(userId, payload, adminId) { + const allowed = new Set(["active", "suspended", "banned"]); + if (!allowed.has(payload.status)) { + throw new Error("Invalid user status"); + } + + const user = users.find((candidate) => candidate.id === userId); + if (!user) { + throw new Error("User not found"); + } + + user.status = payload.status; + const audit = recordAudit( + adminId, + "user.status_updated", + user.id, + `${user.name} marked ${payload.status}${payload.reason ? `: ${payload.reason}` : ""}` + ); + + return { user, audit }; +} + +export async function listModerationQueue(query = {}) { + const status = query.status; + const filtered = moderationQueue.filter((job) => !status || job.status === status); + return paginate(filtered, query); +} + +export async function decideModerationListing(jobId, payload, adminId) { + const allowed = new Set(["approved", "rejected", "escalated"]); + if (!allowed.has(payload.decision)) { + throw new Error("Invalid moderation decision"); + } + + const job = moderationQueue.find((candidate) => candidate.id === jobId); + if (!job) { + throw new Error("Moderation item not found"); + } + + job.status = payload.decision; + job.resolutionReason = payload.reason ?? ""; + const audit = recordAudit( + adminId, + "listing.moderated", + job.id, + `${job.title} ${payload.decision}${payload.reason ? `: ${payload.reason}` : ""}` + ); + + return { + job, + audit, + notification: { + userId: job.clientId, + title: `Listing ${payload.decision}`, + body: payload.reason ?? "A platform moderator reviewed your listing." + } + }; +} + +export async function listAdminDisputes(query = {}) { + const status = query.status; + const filtered = disputes.filter((dispute) => !status || dispute.status === status); + return paginate(filtered, query); +} + +export async function resolveDispute(disputeId, payload, adminId) { + const allowed = new Set(["client", "freelancer", "senior_admin"]); + if (!allowed.has(payload.ruling)) { + throw new Error("Invalid dispute ruling"); + } + + const dispute = disputes.find((candidate) => candidate.id === disputeId); + if (!dispute) { + throw new Error("Dispute not found"); + } + + dispute.status = payload.ruling === "senior_admin" ? "under_review" : "resolved"; + dispute.ruling = payload.ruling; + dispute.resolutionNote = payload.note ?? ""; + const audit = recordAudit( + adminId, + "dispute.ruled", + dispute.id, + `Ruling: ${payload.ruling}${payload.note ? `: ${payload.note}` : ""}` + ); + + const refund = + payload.ruling === "client" + ? { + id: `ref_${dispute.id}`, + amount: dispute.amount, + status: "queued", + recipientUserId: dispute.clientId + } + : null; + + return { + dispute, + audit, + refund, + notifications: [ + { + userId: dispute.clientId, + title: "Dispute updated", + body: `Admin ruling: ${payload.ruling}` + }, + { + userId: dispute.freelancerId, + title: "Dispute updated", + body: `Admin ruling: ${payload.ruling}` + } + ] }; } + +export async function getPlatformControls() { + return Object.values(platformControls); +} + +export async function updatePlatformControl(controlKey, payload, adminId) { + const control = platformControls[controlKey]; + if (!control) { + throw new Error("Platform control not found"); + } + + control.enabled = Boolean(payload.enabled); + control.updatedAt = new Date().toISOString(); + control.updatedBy = adminId; + const audit = recordAudit( + adminId, + "control.updated", + control.key, + `${control.label} ${control.enabled ? "enabled" : "disabled"}` + ); + + return { control, audit }; +} + +export async function listAdminAuditLog(query = {}) { + const actionType = query.actionType; + const adminId = query.adminId; + const from = query.from ? Date.parse(query.from) : null; + const to = query.to ? Date.parse(query.to) : null; + const filtered = auditLog.filter((entry) => { + const createdAt = Date.parse(entry.createdAt); + const matchesAction = !actionType || entry.actionType === actionType; + const matchesAdmin = !adminId || entry.adminId === adminId; + const matchesFrom = !from || createdAt >= from; + const matchesTo = !to || createdAt <= to; + return matchesAction && matchesAdmin && matchesFrom && matchesTo; + }); + + return paginate(filtered, query); +} diff --git a/apps/api/src/tests/admin.test.js b/apps/api/src/tests/admin.test.js new file mode 100644 index 000000000..d83adfe4c --- /dev/null +++ b/apps/api/src/tests/admin.test.js @@ -0,0 +1,129 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { createApp } from "../app.js"; +import { signAccessToken } from "../utils/jwt.js"; + +async function withServer(assertions) { + const app = createApp(); + const server = app.listen(0); + + await new Promise((resolve, reject) => { + server.once("listening", resolve); + server.once("error", reject); + }); + + try { + const { port } = server.address(); + await assertions(`http://127.0.0.1:${port}`); + } finally { + await new Promise((resolve, reject) => { + server.close((error) => (error ? reject(error) : resolve())); + }); + } +} + +function adminHeaders() { + return { + authorization: `Bearer ${signAccessToken({ sub: "admin_test", role: "admin" })}`, + "content-type": "application/json" + }; +} + +test("admin routes require an admin token", async () => { + await withServer(async (baseUrl) => { + const anonymous = await fetch(`${baseUrl}/api/admin/metrics`); + assert.equal(anonymous.status, 401); + + const userToken = signAccessToken({ sub: "user_test", role: "client" }); + const forbidden = await fetch(`${baseUrl}/api/admin/metrics`, { + headers: { authorization: `Bearer ${userToken}` } + }); + assert.equal(forbidden.status, 403); + }); +}); + +test("admin overview exposes metrics, controls, and audit entries", async () => { + await withServer(async (baseUrl) => { + const response = await fetch(`${baseUrl}/api/admin/overview`, { + headers: adminHeaders() + }); + const payload = await response.json(); + + assert.equal(response.status, 200); + assert.equal(payload.success, true); + assert.equal(payload.data.metrics.totalUsers, 4); + assert.equal(payload.data.controls.length, 2); + assert.ok(Array.isArray(payload.data.latestAudit)); + }); +}); + +test("admin can paginate users and write action audit entries", async () => { + await withServer(async (baseUrl) => { + const users = await fetch(`${baseUrl}/api/admin/users?pageSize=2&role=freelancer`, { + headers: adminHeaders() + }); + const usersPayload = await users.json(); + assert.equal(users.status, 200); + assert.equal(usersPayload.data.pageSize, 2); + assert.equal(usersPayload.data.items.every((user) => user.role === "freelancer"), true); + + const status = await fetch(`${baseUrl}/api/admin/users/usr_1002/status`, { + method: "PATCH", + headers: adminHeaders(), + body: JSON.stringify({ status: "suspended", reason: "manual review" }) + }); + const statusPayload = await status.json(); + assert.equal(status.status, 200); + assert.equal(statusPayload.data.user.status, "suspended"); + assert.equal(statusPayload.data.audit.actionType, "user.status_updated"); + }); +}); + +test("admin actions moderate listings, resolve disputes, and update controls", async () => { + await withServer(async (baseUrl) => { + const moderation = await fetch(`${baseUrl}/api/admin/moderation/job_2001/decision`, { + method: "PATCH", + headers: adminHeaders(), + body: JSON.stringify({ decision: "rejected", reason: "private data scraping" }) + }); + const moderationPayload = await moderation.json(); + assert.equal(moderation.status, 200); + assert.equal(moderationPayload.data.job.status, "rejected"); + assert.equal(moderationPayload.data.notification.userId, "usr_1004"); + + const dispute = await fetch(`${baseUrl}/api/admin/disputes/dsp_3001/ruling`, { + method: "PATCH", + headers: adminHeaders(), + body: JSON.stringify({ ruling: "client", note: "refund evidence accepted" }) + }); + const disputePayload = await dispute.json(); + assert.equal(dispute.status, 200); + assert.equal(disputePayload.data.dispute.status, "resolved"); + assert.equal(disputePayload.data.refund.status, "queued"); + assert.equal(disputePayload.data.notifications.length, 2); + + const control = await fetch(`${baseUrl}/api/admin/controls/jobPostings`, { + method: "PATCH", + headers: adminHeaders(), + body: JSON.stringify({ enabled: false }) + }); + const controlPayload = await control.json(); + assert.equal(control.status, 200); + assert.equal(controlPayload.data.control.enabled, false); + + const audit = await fetch(`${baseUrl}/api/admin/audit-log?actionType=control.updated`, { + headers: adminHeaders() + }); + const auditPayload = await audit.json(); + assert.equal(audit.status, 200); + assert.ok(auditPayload.data.items.length >= 1); + + const rangedAudit = await fetch( + `${baseUrl}/api/admin/audit-log?adminId=admin_test&from=2026-01-01&to=2099-01-01`, + { headers: adminHeaders() } + ); + const rangedAuditPayload = await rangedAudit.json(); + assert.equal(rangedAudit.status, 200); + assert.ok(rangedAuditPayload.data.items.every((entry) => entry.adminId === "admin_test")); + }); +}); diff --git a/apps/web/app/admin/page.tsx b/apps/web/app/admin/page.tsx index 9d251466f..36ddc0711 100644 --- a/apps/web/app/admin/page.tsx +++ b/apps/web/app/admin/page.tsx @@ -1,8 +1,554 @@ +"use client"; + +import { useMemo, useState } from "react"; + +type UserStatus = "active" | "suspended" | "banned"; +type UserRole = "client" | "freelancer"; +type ModerationStatus = "flagged" | "under_review" | "approved" | "rejected" | "escalated"; +type DisputeStatus = "open" | "under_review" | "resolved"; + +type User = { + id: string; + name: string; + email: string; + role: UserRole; + status: UserStatus; + joinedAt: string; + trustScore: number; + activeJobs: number; + disputes: number; +}; + +type ModerationJob = { + id: string; + title: string; + clientName: string; + reason: string; + status: ModerationStatus; +}; + +type Dispute = { + id: string; + jobId: string; + status: DisputeStatus; + amount: number; + summary: string; + evidence: string[]; +}; + +type AuditEntry = { + id: string; + admin: string; + action: string; + target: string; + summary: string; + at: string; +}; + +const initialUsers: User[] = [ + { + id: "usr_1001", + name: "Maya Ortiz", + email: "maya@example.com", + role: "client", + status: "active", + joinedAt: "2026-05-01", + trustScore: 92, + activeJobs: 3, + disputes: 0 + }, + { + id: "usr_1002", + name: "Theo Banks", + email: "theo@example.com", + role: "freelancer", + status: "active", + joinedAt: "2026-05-03", + trustScore: 86, + activeJobs: 2, + disputes: 1 + }, + { + id: "usr_1003", + name: "Rin Carter", + email: "rin@example.com", + role: "freelancer", + status: "suspended", + joinedAt: "2026-05-04", + trustScore: 41, + activeJobs: 0, + disputes: 2 + }, + { + id: "usr_1004", + name: "Ari Singh", + email: "ari@example.com", + role: "client", + status: "active", + joinedAt: "2026-05-07", + trustScore: 78, + activeJobs: 1, + disputes: 1 + } +]; + +const initialModeration: ModerationJob[] = [ + { + id: "job_2001", + title: "Scrape private marketplace leads", + clientName: "Ari Singh", + reason: "Automated rule flagged private-data scraping language", + status: "flagged" + }, + { + id: "job_2002", + title: "Emergency payment integration", + clientName: "Maya Ortiz", + reason: "User report: unclear escrow terms", + status: "under_review" + } +]; + +const initialDisputes: Dispute[] = [ + { + id: "dsp_3001", + jobId: "job_2002", + status: "open", + amount: 850, + summary: "Milestone completion dispute with API-test evidence.", + evidence: ["handoff.md", "api-test-output.txt"] + }, + { + id: "dsp_3002", + jobId: "job_2003", + status: "under_review", + amount: 420, + summary: "Copied-work claim with commit history attached.", + evidence: ["commit-log.txt", "screen-recording.mp4"] + } +]; + export default function AdminPanelPage() { + const [users, setUsers] = useState(initialUsers); + const [moderation, setModeration] = useState(initialModeration); + const [disputes, setDisputes] = useState(initialDisputes); + const [registrationsEnabled, setRegistrationsEnabled] = useState(true); + const [jobPostingsEnabled, setJobPostingsEnabled] = useState(true); + const [query, setQuery] = useState(""); + const [roleFilter, setRoleFilter] = useState<"all" | UserRole>("all"); + const [statusFilter, setStatusFilter] = useState<"all" | UserStatus>("all"); + const [joinedAfter, setJoinedAfter] = useState(""); + const [selectedUserId, setSelectedUserId] = useState(initialUsers[0]?.id ?? ""); + const [auditFilter, setAuditFilter] = useState("all"); + const [auditAdminFilter, setAuditAdminFilter] = useState(""); + const [auditFrom, setAuditFrom] = useState(""); + const [auditTo, setAuditTo] = useState(""); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + const [audit, setAudit] = useState([ + { + id: "aud_1", + admin: "admin_test", + action: "control.updated", + target: "registrations", + summary: "Registrations enabled", + at: "2026-05-18T12:00:00.000Z" + } + ]); + + const filteredUsers = useMemo(() => { + const normalized = query.trim().toLowerCase(); + return users.filter((user) => { + const matchesQuery = + !normalized || + user.name.toLowerCase().includes(normalized) || + user.email.toLowerCase().includes(normalized) || + user.id.toLowerCase().includes(normalized); + const matchesRole = roleFilter === "all" || user.role === roleFilter; + const matchesStatus = statusFilter === "all" || user.status === statusFilter; + const matchesJoinedAfter = !joinedAfter || new Date(user.joinedAt) >= new Date(joinedAfter); + return matchesQuery && matchesRole && matchesStatus && matchesJoinedAfter; + }); + }, [joinedAfter, query, roleFilter, statusFilter, users]); + + const metrics = useMemo(() => { + const trust = { + high: users.filter((user) => user.trustScore >= 80).length, + medium: users.filter((user) => user.trustScore >= 50 && user.trustScore < 80).length, + low: users.filter((user) => user.trustScore < 50).length + }; + + return { + totalUsers: users.length, + activeJobs: users.reduce((sum, user) => sum + user.activeJobs, 0), + openDisputes: disputes.filter((dispute) => dispute.status !== "resolved").length, + flaggedListings: moderation.filter((job) => job.status !== "approved").length, + revenue: "$128.9K", + trust + }; + }, [disputes, moderation, users]); + + const selectedUser = users.find((user) => user.id === selectedUserId) ?? users[0]; + const filteredAudit = audit.filter((entry) => { + const matchesAction = auditFilter === "all" || entry.action === auditFilter; + const matchesAdmin = + !auditAdminFilter || entry.admin.toLowerCase().includes(auditAdminFilter.trim().toLowerCase()); + const entryDate = new Date(entry.at); + const matchesFrom = !auditFrom || entryDate >= new Date(auditFrom); + const matchesTo = !auditTo || entryDate <= new Date(`${auditTo}T23:59:59`); + return matchesAction && matchesAdmin && matchesFrom && matchesTo; + }); + + function log(action: string, target: string, summary: string) { + setAudit((entries) => [ + { + id: `aud_${entries.length + 1}`, + admin: "admin_test", + action, + target, + summary, + at: new Date().toISOString() + }, + ...entries + ]); + } + + function setUserStatus(userId: string, status: UserStatus) { + setUsers((items) => + items.map((user) => (user.id === userId ? { ...user, status } : user)) + ); + log("user.status_updated", userId, `User marked ${status}`); + } + + function decideListing(jobId: string, status: ModerationStatus) { + setModeration((items) => + items.map((job) => (job.id === jobId ? { ...job, status } : job)) + ); + log("listing.moderated", jobId, `Listing ${status}`); + } + + function ruleDispute(disputeId: string, ruling: "client" | "freelancer" | "senior_admin") { + setDisputes((items) => + items.map((dispute) => + dispute.id === disputeId + ? { ...dispute, status: ruling === "senior_admin" ? "under_review" : "resolved" } + : dispute + ) + ); + log("dispute.ruled", disputeId, `Ruling: ${ruling}`); + } + + function toggleControl(control: "registrations" | "jobPostings") { + const label = control === "registrations" ? "new user registrations" : "new job postings"; + if (!window.confirm(`Change ${label}?`)) return; + + if (control === "registrations") { + setRegistrationsEnabled((value) => { + log("control.updated", control, `Registrations ${value ? "disabled" : "enabled"}`); + return !value; + }); + return; + } + + setJobPostingsEnabled((value) => { + log("control.updated", control, `Job postings ${value ? "disabled" : "enabled"}`); + return !value; + }); + } + + function refresh() { + setLoading(true); + setError(""); + window.setTimeout(() => setLoading(false), 250); + } + return ( -
-

Admin Panel

-

Moderation queues, trust metrics, and platform controls are available here.

+
+
+
+

FreelanceFlow ops

+

Admin Panel

+
+
+ Admin session + +
+
+ + {loading ?
Refreshing admin data...
: null} + {error ?
{error}
: null} + +
+ + + + + +
+ +
+
+

Trust Distribution

+
+ + + +
+
+
+

Platform Controls

+
+ New registrations + +
+
+ New job postings + +
+
+
+ +
+
+

User Management

+
+ setQuery(event.target.value)} + placeholder="Search" + /> + + + setJoinedAfter(event.target.value)} + /> +
+
+ {filteredUsers.length ? ( +
+ + + + + + + + + + + + + + + {filteredUsers.map((user) => ( + + + + + + + + + + + ))} + +
UserRoleStatusJoinedTrustJobsDisputesActions
+ {user.name} + {user.email} + {user.role} + {user.status} + {user.joinedAt}{user.trustScore}{user.activeJobs}{user.disputes} +
+ + + + +
+
+
+ ) : ( +
No users match the current filters.
+ )} + {selectedUser ? ( +
+
+ Profile + {selectedUser.name} +

{selectedUser.email}

+
+
+ Active jobs + {selectedUser.activeJobs} +

{selectedUser.role === "client" ? "Client-side postings" : "Freelancer engagements"}

+
+
+ Dispute history + {selectedUser.disputes} +

Status: {selectedUser.status}

+
+
+ ) : null} +
+ +
+

Job Moderation

+
+ {moderation.map((job) => ( +
+
+ {job.title} +

{job.reason}

+ {job.clientName} +
+
+ {job.status} + + + +
+
+ ))} +
+
+ +
+

Dispute Resolution

+
+ {disputes.map((dispute) => ( +
+
+ {dispute.id} · {dispute.jobId} +

{dispute.summary}

+ ${dispute.amount} · {dispute.evidence.join(", ")} +
+
+ {dispute.status} + + + +
+
+ ))} +
+
+ +
+
+

Audit Log

+ + setAuditAdminFilter(event.target.value)} + placeholder="Admin" + /> + setAuditFrom(event.target.value)} + /> + setAuditTo(event.target.value)} + /> +
+
+ {filteredAudit.length ? ( + filteredAudit.map((entry) => ( +
+ {entry.action} + {entry.target} +

{entry.summary}

+ +
+ )) + ) : ( +
No audit entries match the current filter.
+ )} +
+
); } + +function Metric({ label, value }: { label: string; value: string | number }) { + return ( +
+ {label} + {value} +
+ ); +} + +function TrustBar({ label, count, tone }: { label: string; count: number; tone: string }) { + return ( +
+ {label} +
+ +
+ {count} +
+ ); +} diff --git a/apps/web/app/globals.css b/apps/web/app/globals.css index 40e22f13c..9bc0b449b 100644 --- a/apps/web/app/globals.css +++ b/apps/web/app/globals.css @@ -1,6 +1,55 @@ * { box-sizing: border-box; } body { margin: 0; font-family: Inter, Arial, sans-serif; background: #0b1020; color: #f2f5ff; } a { color: inherit; text-decoration: none; } -main { max-width: 960px; margin: 0 auto; padding: 2rem 1rem; } +button, input, select { font: inherit; } +button { cursor: pointer; border: 1px solid #3a4b83; background: #1b2544; color: #f7f9ff; border-radius: 8px; padding: 0.48rem 0.7rem; } +button:hover { border-color: #6ee7b7; } +input, select { border: 1px solid #314066; background: #111832; color: #f7f9ff; border-radius: 8px; padding: 0.5rem 0.65rem; min-height: 38px; } +main { max-width: 1180px; margin: 0 auto; padding: 2rem 1rem; } .card { background: #151c35; border: 1px solid #2a3765; border-radius: 12px; padding: 1rem; margin-bottom: 1rem; } .grid { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); } +.admin-shell { display: grid; gap: 1rem; } +.admin-header, .admin-panel, .metric-card { background: #151c35; border: 1px solid #2a3765; border-radius: 8px; } +.admin-header { display: flex; justify-content: space-between; gap: 1rem; align-items: center; padding: 1rem; } +.admin-header h1, .admin-panel h2 { margin: 0; letter-spacing: 0; } +.eyebrow { margin: 0 0 0.25rem; color: #93c5fd; font-size: 0.8rem; text-transform: uppercase; } +.admin-actions, .filters, .button-row, .queue-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; align-items: center; } +.status-pill, .badge { border-radius: 999px; padding: 0.28rem 0.55rem; font-size: 0.78rem; border: 1px solid #3a4b83; color: #dce7ff; } +.notice { padding: 0.8rem 1rem; border-radius: 8px; background: #1f2b4b; border: 1px solid #3a4b83; } +.notice.error { border-color: #f97373; } +.metric-grid { display: grid; gap: 0.75rem; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); } +.metric-card { padding: 0.9rem; display: grid; gap: 0.4rem; } +.metric-card span { color: #aab7d6; font-size: 0.85rem; } +.metric-card strong { font-size: 1.55rem; } +.admin-panel { padding: 1rem; display: grid; gap: 0.85rem; } +.admin-panel:first-of-type { grid-template-columns: minmax(0, 1fr) minmax(280px, 0.75fr); } +.trust-bars { display: grid; gap: 0.55rem; } +.trust-row { display: grid; grid-template-columns: 70px minmax(100px, 1fr) 36px; gap: 0.65rem; align-items: center; } +.trust-row div { height: 0.7rem; background: #0f162b; border-radius: 999px; overflow: hidden; border: 1px solid #2a3765; } +.trust-row i { display: block; height: 100%; border-radius: inherit; } +.trust-row .good { background: #34d399; } +.trust-row .warn { background: #fbbf24; } +.trust-row .bad { background: #fb7185; } +.control-row { display: flex; justify-content: space-between; gap: 1rem; align-items: center; padding: 0.7rem 0; border-bottom: 1px solid #263459; } +.section-heading { display: flex; justify-content: space-between; gap: 1rem; align-items: center; flex-wrap: wrap; } +.table-scroll { overflow-x: auto; border: 1px solid #263459; border-radius: 8px; } +table { width: 100%; border-collapse: collapse; min-width: 840px; } +th, td { text-align: left; padding: 0.72rem; border-bottom: 1px solid #263459; vertical-align: top; } +th { color: #aab7d6; font-size: 0.78rem; text-transform: uppercase; } +td span { display: block; color: #aab7d6; margin-top: 0.2rem; } +.badge.active, .badge.approved, .badge.resolved { border-color: #34d399; color: #bbf7d0; } +.badge.suspended, .badge.under_review, .badge.flagged, .badge.escalated, .badge.open { border-color: #fbbf24; color: #fde68a; } +.badge.banned, .badge.rejected { border-color: #fb7185; color: #fecdd3; } +.empty-state { padding: 1rem; border: 1px dashed #3a4b83; border-radius: 8px; color: #aab7d6; } +.detail-panel { display: grid; gap: 0.8rem; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); padding: 0.85rem; border: 1px solid #263459; border-radius: 8px; background: #111832; } +.detail-panel span { display: block; color: #aab7d6; font-size: 0.78rem; text-transform: uppercase; margin-bottom: 0.25rem; } +.detail-panel strong { display: block; font-size: 1rem; } +.detail-panel p { color: #c9d4ee; margin: 0.3rem 0 0; } +.queue, .audit-list { display: grid; gap: 0.75rem; } +.queue-item, .audit-list article { display: flex; justify-content: space-between; gap: 1rem; align-items: flex-start; padding: 0.85rem; border: 1px solid #263459; border-radius: 8px; background: #111832; } +.queue-item p, .audit-list p { margin: 0.3rem 0; color: #c9d4ee; } +.queue-item span, .audit-list span, .audit-list time { color: #aab7d6; } +@media (max-width: 760px) { + .admin-header, .queue-item { align-items: stretch; flex-direction: column; } + .admin-panel:first-of-type { grid-template-columns: 1fr; } +} diff --git a/apps/web/proxy.ts b/apps/web/proxy.ts new file mode 100644 index 000000000..e4382daa3 --- /dev/null +++ b/apps/web/proxy.ts @@ -0,0 +1,18 @@ +import { NextResponse, type NextRequest } from "next/server"; + +export function proxy(request: NextRequest) { + const isAdmin = request.cookies.get("ff_role")?.value === "admin"; + + if (!isAdmin) { + return new NextResponse("Admin access required", { + status: 403, + headers: { "content-type": "text/plain; charset=utf-8" } + }); + } + + return NextResponse.next(); +} + +export const config = { + matcher: ["/admin/:path*"] +}; diff --git a/demos/admin-panel-demo.mp4 b/demos/admin-panel-demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..5a7852d2b5571b7be9e65e1e61c51c6efa362fe7 GIT binary patch literal 96022 zcmeFYRa9NewkSHW;1GiQ#NFKq?(XjH?iSqL-Q6v?y9Srw76Jqb1m{lH+WXx7c01qq z{j6%EM)zJ-y`+s^OaK4?(9Fft!P42@761STyhBiBHgq#)vUOl(0sxT5ZSC#d004lE zt(%1j2>wTbH~|1iC;?!A_vinX{|^CT{}(Oze>ML%3>*MJx^Zzbv<3-vT&(|U6XHJ< z|K$zT?thp6YUh7z7YbwpKKGX)si}#JGYG>owQ+X&mn)EmcfXMT>NAqHt%;=}NCvbu z`R}pwf*j!iREPeuq_Z%war&1JfSaX>>A&%Js0O0#B@FFMY)s#EkT7g5?aV+3nw#xk zPXDvpq$YpM@JyUc-*w*0yBxvQ$p-j0j=1dXVq^ot8=YO8|2-k^I)(3(27>S9KYjki zfO;Rc1PFbv?*$B92Bgo+KB$IYC;&U?u>B5qYsAgHy<=Lf63wg1^-RIlkawa z`2)d!z+i^}+&0V?m`AfWpGjq(m5Wk52ocfsG~ouAkV60L)1J5Ut`RTfZv z|1uN)7tR2J^q|V~FZd7rPdxrv5C3oX!~0(R&;9qF;ru7f{9p8c&ksnR!wA~v@0p`H zsJ`b<@B93HzrXuo164{;eYbnhzTWZwji&n#IhwPJu|0@>FQBsp`2hrtTuodIK~T%q z^e^}>Bl^#@5|oNM89F$;pD+JY=q&%vUCAn3?B5;Yn;8CO3~~wpfbu&tP=3b*dKlk( z24m)AY6<`|C$j}!uAO!|l1yON2R^VqfVUVVYsWC_(Z13P{V`}CCWM*V!p<`xb zW&<%TTwENu85rE%-Ra-cVtX4yJ9>L3bB6a;=q+4qZ9qEq4lb7VcFx>DV?!fDV?HJz zDD~xI0h*W^+1MLf^D%KVax(%A?F?-^olW@|Jy^IIJ(!qSfVQT57N#CRXICQ-#sPG2 z_5_)N-ug}^d`$F=AS2KVXlv?__9aZpz2R4m7rKvbQzV2bnSfU7Sp9 zY%HBY7^erPiLna^F?O`&V+3`<(8SB$&XkXtiI#~8XlCf_qVM2rZRzl?@wWp<2Yq`p zGiOs5K00Qgi-i-&0_2DpXk%}0ZD;|a^#9Fd20GhV8iP9XZw4dK&grj4j4f>qUEVul zY3E|-Pgby@X`i3Tk4)4P-(l@d+bbfEd(#iC%fw`Mnnp?OSfn@d$rgr+~_6{KF-%JOP zskNym$TuG|8{@xFeb8kEhy*$to7$NgySnhPGQM}y$?!dBE`gORqBM*^jIeYoIw>ix99$7OKQUs=|I*ptPL0yEuT^y>;98c?-La|$tS z>lY77dJlibtzIh3%#kqXCIRmu9^CK=8yq%+RWo#$%XZ68Th?DiCW*%qeQ|X&`LvzLuqsj2rD97~3_*xIXX?8y;Ud14pPkw-(Y)psg57M@0 zm3#GUN4MO{7U=yWaJvP^sGQoUb1`59ybf2OUNOP}AhYQwq&^3(!_MZyFxUZa5cZ#Y zM~{d#9)ly%%B*4+)n^F}y{Wn7eqkP%Jp&afVmBt@0Gf_$UMkd|h6e>%U6BGvt7S`f ziX~F6n$rZ~$V14Jt+{^m>MAUi>s>y^iXDNEj+qE=fHhey$~@Ds*lK8?bl1ZSt z+4+4|Mg01_S3>tmYWOi>qg@}}d{iw#T6trr6Y4|-0hWbME(z_>aWEov!|3qy<;G55N=yyGys9w1)vRES#O2wtdJ>4P71QzB9B9=WG zGSIUlAtf5Zc<^i&(xE5RqwFlId@`anoeNm2H;V>S;KC$|{wnPWTjSD%U2w_Qu9XlZ`Jx{BiQ#E!XIhsiG zvrg85DwJT_!J%CjnVvv%-6m)`ECXgOsI=!YqOpl z!Y8y;*7;9c6p5Nx1K`NipIYRpCPVo93&T%o&Zi3#o~cea`8V6~XN;-T&8rE6z=X}7 zdSl7(U^9$8cCF#s}L%E-ElypV-k|312Et0J1@UF7WJsEe&`LJjcHNB6e zAL8Gy^!|S2#w_R!rBc$&9*URyQbHB@%YM2IyO(#0k&}*Vekp%xc0k1VfYea>=U{Ge zlZF!kVlh`&Xyi*t3bZIb4w*I0XjzH5ML5mTFU7GnD6Dz}O3oGaz=7&N0zO&JCirV+ z44g7)%ow4xi230HrDcLW#ehj#UMc-H-D)NJmrI*mgCtWVV_$u*`*v__)hvXFB8pSW^mg^vWT*F|vb0YR>QQa0FKY`!G#a(~kkRCiv zy9nA7HjQnl>n`F46|gJw=(?cgW$TGZuB=TZs5ei(CjY~0kv3A zRFvXK@ailj%Rh`w9f7|>C?6J722A+L+CghHk;sz!Li2@WHET1UkpO2isJ<)&%SehG zM@bF=NU$Clk!`QdKE?XOB*FR}HqedZS2k_?_W6E@=2@q@V!cYXl!>siBQnN+boKll ze)B|~-6@oo#tKa{BqrsWox6EYMkBsji@UyLp74llmY5<)Ic$9{3BvpCfP>o~y z+cpFJ(xtx(_j=*PBnjC&Mt_;yRL4>rU86Q{2M!=2)Fj)3>ZoLYeKkrEwusd$;IM^2 zl~=wQNPdDdIX7(Tkb(D>t^Q{C!SxEsi_md&TKBR@k-hk1&6m;-v5SFq0;yei-kHJ} z;2f|7?S-!+Ui(mmQx8M>je*!0wk;>R?JAAfr_UKf*YrbZ$#@tNE0UBdA$>Ae;5Gl^xmKUPhK)V9^Uz5Y zlD0hEh80Go6CFztAg3APRnw(#<_(k zORG<<$Y6r`G?t5fn&5pq-3onT2vVwJMSSe9==l?^F990keD*#U;=a5x>hUBpdN#Zh z89t0N9|~x;r66LjPANFWEk&Q=4n?%ClT}o$=OR_Im~U^vo-$K^$dYWw+|px$sU7|Z zLOa!5K>ler}pR9Y!H zxQy?3by(*tF221Kf_rEP_vv%2MTJZm`#;1^$1kkGpHlKPNf}XiwCuPoE64I^bKlFE zV2_-ZCh$}LJccghgh_psGip_1#vQg~YWs~*>aDtP*VGg8M0ScOAn2dv`;F|TZ(zP- zm#~N6grn>vVl@e4N7WcU>l8ZmR~&5FR1HFtSMNupm=de@?jDkJGlrFqVhr4W+OH+e z^py=<0_ywW20!(BDfL>fVlgKw-|>2y#rnT}dC33Ble>nGXUZ-Ql)~K3MJ3?lX0@y2 z{z934+hC;6(+Zi3p3KJGA-n=bEpt!3^7T8DOw| z=-H0cP;e&8e5qxi-di0J@^Z~9SyZqxRb`8Xn+XdrCZerHmH@x*9FkiC)grWtkQOPbZ9NZ?8eDN8rWfiC!#2msOAfo&VmWkE5mN2tooa zS7dcG>&+@DIQgNzwW+%PovY0oq6?#fFX0V2@g+R1`8?FCaT6Kt3?D{Jq3#FQ`tDNpsS=VWLTphB6JEpt4 z5}%;HNe{{#hF+5IR>!>L8SvQ90{@bGaqT*fI*L=0o~mMy9fH-|YE03yruhL)ig+-F zym>;-?8tefRb3pO*af4?EHnIjX*C=zHJ1S+1TR1YUVKj3IgFZE(Ez zj;O@KnzAOVEYO^SW*W9aYe$J4G^EKnAq1iALO|kYX%shf;Pb|-Z)^WjW*Lii%1@i+P8#r zd7G%tR9)nSB)Tp&jHTLuzWX5nk|DaqHN~-oQjrkKb0lu2-Eo&{YJ)~{ekOZNMEEPA zQTaVIOZ@YdWw&)f5fW1)Z)?bcS};u$>4$LJW#|ZBgGsa|uUYwkG+ViYrrP(TRjNh> zud(N_y}^pu`YHaYr$r|PY6O;flV5tDp_HX;d5<(=5Fw>92_Yb&%-ZAPHjb@-tE_K^-#sAlih*|55PX9~a zo84qUzB(}g@JZ`PU4;Jd_fl@4Qd3bCwo%1ktxMLaLh%74zLnMHbvk|7taMn4p4it& z{Ps)7j+?)R4uBVZ)$r&4c{lOu(^j+{SLsv6GnoIHe>O$-a4G~!I&Oa{gUkDkoFqz7 z8`S56Z0O^wc^5U4c_6d)=W8V#Esj&z#cK(Und!8TcG2S)|M=~#p{@GH{hZTOiZ(#1 z_r3!*L$?lGD!0VZ)aBtLY=bZeeVOaicw$@>kmfw@*Gs<K~cNnYK-`V`;r)bATDU@|f4+N*``sGl5A+r2RIcrZtk6K^Yo)_+ueBZKsG& z2q-L^k%r#Yzga$K%Q0kLIk(4B;N^zJF+80qd9yT#%!;B=sdS~|Ja0WaDEc#IKf6?eK-|+Q#y}D@mSmXd5q}55+yL;ci2smKZnuUG{!+J0nN4% z$l)=#+`mxosSXQEZ~+iz6zheEu&z10RM0(IUvzd{>iCTxBPaJU$s8TlE4&)2 z_bZ0&QRV>0rt6E#Y~9WME%f7XKR180(v$~xCa$&DG?%>+k9-1^>sqE-^Q~OPA~b(A z?)U;Nx%fJwUMrty^*84IpQ#Jy(H<{F{hJ?Hl^@Q=#&7i_!Vl5LLTyBJXTAuDQZ#x% z1&Bx6koPr*@LW2cKdie7`<;ygjSuzG1F5H-`wb*qai=Qz<_^3J#SLaF-nw3d<&x$g ze~fHkEMOap%9|Il5f|Ap_h9t;eD#?O*=wb;BAiwv|<*aqVEMoaE-H5ws$gYUcQ~ zdWE?vr4|^GK+%=SxziVu6HOb~?~0KH%>l1%qP(4$X}C@j*oUPs>Tz!+Cfy z?zKnMiZPw%>N165rp?t!o>8&_0n4^GFj~=)HWhMY2&eGFVzo(Lcdqv@yMiR#Nc2CK zw6PmtJz)wqGr!Ku6cwQHIwS22k?z3^QqGHgUMF)UNxrd-`EuQ_$1(-*+Pr_e{UJg8 z(e7hB$(S}~9t`V+TbsqVZ4BshB_poe1U7vYS(n5wN)2-C!^$TZZhS@HfUnCgq7tf`Gsx2#7UA=Gfxn78_N!aeIc^%^=*99(;92Kl zGtY^jw-^4G6`Z!SyNpj!RC0cK2Z`MFm%sB@SM*%xe&{s&S(p<*b$ITU&DP;kLF$j| zm?u>W2IyKdCE^-?9UYFa3OO>HdX`G9AhS;ybZN^k>(tYb#1YbKQ@oA=r|}-16d)J9 z>0O2yI17oKgUzA1Y5dxck?B7+=NuL^C)j2-f+SRl`-bkO3*k5GiazT6S}U#c>4n7d z)=!{o8v=e=EuTi|a z_FYzZaeQuryV5V7erwn*+SkNIT9g)@4>?fIFJbmyG&PxpZ0aHx@k`(MkM835VZ%&n zJsOC=F)ivNYgh=l5AY5AQI2Ed)-$*oHANVe#PSf661ARXrMW$kjOlmCWH|=cye}37 zGZfo54wkK~Aj(F8gf-eTEWNYOR9w2$t2nACE+Wq|2W69%3#mxe9nnq z&8F)YaeD(i*`1<1V{hc1YuO1QaK*?TU6waO)AC=7Co9*C>7~Y zJ3A5M-B%CjwLU2L5mf4XhDEeLFhi8(+`)^)I@dmALh&j@&maP!F~~J1!eK|+c~7sh z@B6bGmK=*zq0Cp<$1;++=u)sp%DBp186J9tffJIsGLOP8%QB|`M3Q05cC_D2rS|)u zj>z3C@q5_m(F!v+@#Xp{*sQV!&?MfvfGvyyRS}7@jBbo0>)$dF|FFX$Ug5_fL5%kY ztND1L^!~{tE~Xb%L<}t0CItJsz6b7lo~Y4V-8Q1ui}m^v7Xc=}qV!{~*0h|lAvY2Q zyF)|SlZ#DcH0Cl|qc08hf>4Y)jx&^Uu7=w9G3TJ_3p9YCx*7klIY-w72e0#x;N(L8 z_lcj(Xk3^;5u&}Dzsu0}ZjPn&BJn8!WXtZkH(7?Fl-o&>TeeQPx!*|oKREPoUX0an<@#QGpyqc6oLCF~frJ3OG;zBM6 z%rfqor;i_hM<;a#yCw5sHgnS(wlu(+Oi%X9w&YJGuY-Q~^=?b$AC(Sz7y6443bvZtuZn`x9VN}} z;ZX#5jRd_N!!L)GY0ZJ40?Yar>U@otq1s5&-zY(R1S<)c$W7n z)7@~xhvHA{r-|tJu8<7L4sF&-=8)aTK!EL=BP(?u&*Trlv&W@ce z_Tf;lJBd&WzU@A}y{v4~v%WExy=D{(_ZNZ1Hk%COz~`WRb;ENleB?6E{I6R_WnDQx zf<%~SrlEV}v#A&)!|tfL%~*sYk|D_g4>pa2<{eV{s!d#A225TD-nwdPI&tVVB9Gt{ z@<-b*W_d_5?-j0yAH4l^4w5ewd@M|xoo{aiIjruVMjKJ0>nU)<9ePK8vG}Uuwk!Iw zGO=pX`-d%U4;S#~;<`D`*q7}q=NXH`-729DJWZdHt19*Jrqx3|Vsi2JNhGU^n!NH6 zz0&z(WkEm)vh~o%E))m~@qJ*@&Hs$P!htCO^_pm|1-~2}uO(|MOK!5O%B4<9{1w&+ zVFa8)pHeAc@y?Zu+dlvs+)F~^r4&O(PpnpFKKL>*qe+CABx1$N*ftK|MtM zPWLWyRtDnFz;l4-!weQ++emzbr&o?`ErXS9vmlg$>P=-#*)DR=?I*)kHH&tUgLu@= zPsZ4D)EmO$5BliWsD;JcWGb2{X9EyKVy^ljvsuJ9sN85XlwMv#bEAb-mNn~h4N`js zk4#gGN1er6HozZ+lyEs&dg7!@J>-FjIsMVtHdwa-hrBJ|sIE9*M3WlGt|^m4EIKoV z7ki7B2Cqp7u0gTc;yu>7N>MM0Z&cb8w7*Zg^z#M+8Re)sahtI@+iuQ2I5vk6_1~H6 zV$E=DO*J3g6V<)>&Yjtg!(|3ei@-p1yQRTGLD{kL#p0A_N#&9cC8|7Z zZK~R%L)=VBpuM&YFd-L?uh1%JNz}H$cta(yi&D{Zo~r{vdt1{+yP^{_=4-Dmafeu@ z0xwU%5W^6MT8gv{FCgE06et;)Q)BnBZ2Q?Z_{Uz0#NZgTE$RHV^;@&Az*`A>bsv2z zCS`oYABbSH@2pS}Rd=6oc-%K03bgjazW!#^oc0crN^47YgH!2|YIX{iOky#j^KQj* z>araewz)`MsumsXSyv$v`%uChKi-}-f6fwNcSgchQmv3gZ)VNxonC6j?>$)|_d4U&F}#vojEXHwrbQg`z&6Dn%FH5-0`--Wzs-4BS0U%I5rIB_5=G z>?!c7!ypIaHUzltf}A5+sNx-xgGnGOw)bN&fLqFDtPJ(+_EqxxD2*GTgoN>Z6^q7X z8}V#Plt=jj9mU&6A+I`%@9tQa6S6d)ko-g?`>yfu#fQSaFXM>)ftZ-8nND8@oZks` zPBb++q;;YXd8llI^L%0#x{u((<|wd_dlhM2($ibP!*I|1&q&suybT58?bvb!1=$JH zhcz@GLdZ>87v=+cHCy6i3ny3(!~K~|($?!8!9uvju-V1IU)7%u-ppY7z8`JZ;{pk0 zzL^VG=FMZ$#C_IAMP|B$1Ee(aqwbc{oRAkiCx~fjb%kY2H)u`Po4*|GeL(Q=*|PG8 z7+y8z+3a|eK(zlB3+IGa1BvBy4@5)batPef2tP9(*Ls39V6<^%t?D!%d zGsB@EkK5?`3%n@zs;UB^=gi$*+fO`hN(!83Mm94TvaqZ(bM?5gIe{8tw5;D!WcH-^Hb z5)vIgXTk7AJeV?e4h?E<&a-P1h`rAQsvoOkm<%t6WWNz?w1r;L6AYk>LzTuUu)fVO z(O3r1naBBaT8cMp=E0WD7lyX@nVN9c18{&yY@Kd#p_41SE$io@;%Bj+Yk%F&akkuQ z&?j~laU<@P?G4b9z=$H3ks|JBru;gXE$onW!FOGO00_*!!qmkmF7g1^M43z4ah4@g zjz_8C$cbOokYiX*nGPerM8>9up=ZFq8|rYyOQ*Z9OPq2nuq4yVt^*u!@uqXu%NlaI}3 zefD0R8Y|F_ zOYqU{_wV!)Pdvnd4A!NL%^P#lFQg?AaEHVn(CM-bIM;#QU6`LifS zu1_ZueQZ>$LQ>2 z3BliHJ%~}IIfFPmEZO>SeligJkzOIdVRs>hgJO208;*PoyS*G~mq9JxT6kS!Dnnrs z`n`2o9zYpu4s~uzXv3+mLSf@}?w6QDuLkM+KSK2qbarmk07v0p5v{3k*Q*T_ZMea^!e>VI@VCTL9wc}BRDMj zja;>zC@zL#!002DnC65xI|=QywzN5Ka&z#SW3kJp_yOL@(=kgT9@q22ut{T6O(9uy zAh(Q5;1Wdb&}s2HYz+01qqPzG0aZwUW*30N1vgZ}DaxI`ssR$KM_%;98If=klh)NL zm;Q=g{G3yO;l}|~f6HYh33OIGZ+;c6kj#rj}Hm(ww*vtp2Egyd7JPTrBU&HU9K!irYk)`*}WTEv<5@SIJR^_(t5L_0Y1_|gw) zLz<9#A<|zCPc}b1anT~Krb5w{neqHoYw6Z4$yGI?YcbYH=l_s1u^lGaCW=TW0rqer z4TI7n%Ike8g@kH;RK0ZuYgUJ37zB3GeGKGWHLbC{R#~2Y&cxKAv-vEp0DBkR(=K5z zQ7jBk8p+529Rb_3@hifG3ZYLP=2>C;<^X{ljZrFd8>0T(TURjrStE-1 z1X(iyQnJE9$C<;JE``i5s>8fG)#4>%q;+?lKM>a6Ai08v^IIVxdJ+m2<&sKjQ|2;G z*jbHby_;4Uo=NIPPClodI{sk%K*GHuPYYvi_j8N&qdD>Hoo*cy+pePwf-V9eK@|<)1YJS4N>>x?&>73VoXma5+t;7V0Ek?>@kJn7hIb|uqy4hzkOcWd z5}ko7-v$Y><#91y$*bw;bgE@SiOX+eQ-hsk8`SEYWm4Y^5g6-?FHA{iKOIP=fFEXE z!S`CLwY$*RGZxl6_da+%)=p5f$vJjO)}3T+@?M_cR+ih<&(QDw@=Vmj+BPfUCS<>) zN2)ek^v($j8axAo;t~X|th1V9TiBrnXgY5}ndABO76!TBF`H{Zlb|VTRALW5xDf36 zF3FFDAj^6aplcP$fq6 zWp=O-@dvyU+NolzIZGZqSH`F{N}Sb+XhYKnudkIILcY5-M-#CqC^~cJ5*eM5vW)%D zmvPJ!mev@x)J)^Bfj^@Q(!s#b9Td?^#@+QWY4Qt@0l?Y2Onf~Nzw8Wwv~b~-fTA0g z)Kd1+9as2{rp2f-xuz3zQYV9AyIX%>#ZO~B%oYneR!XCb$`Nn+d#Ca|Qito{oSbM3 zjD7Wy_a*FV86n?N>&!nuv64B8UP#(lEtq5tyq?*;K3@GS(VnqHIIEapFUok>^cfEW z-wDEyk_R38FosAc-4vU#)I$*dx2@ZqZ+CFNgXz_UqI3O9IMIoW)l1sj^qt>?&&Ph* z_TQ|A-<1nXhC!;I?7bCy(@>GT>({ajcTvjuJ!wXa%tCIQjT$+*_~T1xz4#~I^e9QS z(90c6SZ#|E77_5`yl?Vn(|e;rmtPzc_Uo=(zft-m=(KmgX^wTI*>@++PO$PNdsz${ za5JtMUMafHCV2x<*vEHv@mD2Ie>hDTCv0w84`?+OV+QPXr)gEKOBAVQWluAEmQ0ML zd3x=GM*+ZmtUo$7f?h`OvCn?ks36sU}S@uLnB;#c~Za`AEu`-Dmm&T$; z_97Iy0m?rltlk}6fSrr@Vf`hdqMFibMK+CQ&0w_T8~i0ay?r{w=s}=XJ2Ua?(_16f zm|!THVoZ52yzS#{R5etyRu;AKM5Cj}V}yLi+Y5(H0}^qAMfE8H4gY7w;*MxK0;b(y zYWD=%DQ$Vt%AhOq^LR^XZ%Zg>v_bL&tCRZiU$1Yfrp%qq!x!=MdB;wfgYB&zaJ(ZH zc9ei_k9yJ8O!NaSI8W7IRHBngc7ADz7xFKM*w|pr=A4a5Z`R;Z<1Imh$dJKwd4?PI+iVng2!(yTo&4JxuHMxrZyOq-B|A{q()#HLo*?eT(-h%vod z`Ia8Tzv+Wwa1)sFC*Lf&A71)K_>2+?{gSD&2x6ZqT&jLFH+RrSv)bz|qZ6I)W_`|) zhNEbQlB6M0x+|o5jA<5HG)h#7`B^*mIX$5l=BEGW2LUTpt&d>AU&s!pKISa31cM)} zK_EKmFu9JxgF1pi@gM=L0FfHT>iBPexj6AsaRzU(I&ARpW_sc1BAx|g9QD2 zkXD>K;YS3wq_E;sU?zG)>AZ9xl{u;l#m&{SwD*y z*k_mah`c%QOCqDj?ke~GYRWn#T<8lAywrfN6#7ZSecy)+$OaCX`u(ZMq580{WP_wZ zjebDRnd}qMeFk*(9ssB)mZPlkKO&YVr$EwuT&9~Wcs_97F~waEk8-qm4Y@|$nVc^< z;dSF@0I~z81L%P-8nY$^C`-6e)IFPHnbO*f|gVx{tN5cN;2nj$Jc&LJP&X;$ukia zL}K>@KKx%EncNloC))Fg+1jPIpLb2eN50hxp~~IEY@W&VKKHwE1Y3f*fWY_V%NPUAfDOVNYEH$g$>`E0zY;kPap;h#@d5oEGQ31d5 z3yz=QpFb86uN%H=)f%;=x0-sACj9=vJp$-s3o~zAlOMngkdg0e56b4IPV0UGa6(cl z+D5@}Rw|teyuK@a%IYNzuC;sWxECRvG74E$={zP<@n=S?9sCtPy4*UP%@Hu25Ef-Ffdhcd3>k2ha)ZEqm4_y+ zQD#d+si0_<+TQb@nlB(7<$e8%@ueou;`ZCI%|dtOOKa|4KXe~pFw7e2vep&;iEsML zxgfFgEk*lf6nVyO*nUgleV`#1oLiVulNhP|#UEFb>L@q{&O>Gzqe8}s-FEdM_H#oZMS$we(cBtCFS%f-O zE%G9=f)${Me>2dsrn6{S&KA*ONleESWESNKFDpEIwl#`9PK;=^RLjX5AImMmmeTpm zlFH}S2TrV)^#Q=$&p5|l2&gXMW!QSXTFisq?i*pPI`y~0x@UdHo+bJ8JZlOrXxNu@ z*-;>t7D0EhI2>S}qiOX>Q}Y6nL8!%Sw@hBVd^t1;D`=8t=zqMTMhgHe1o?Y7u~;4QuF4tctoUgd-;K_57Q%YxBOz_ty*7ijyD@ zG~rJ*hza`vh@(f5RJig@qmiO}9i(LeCi!G_Bo{S8kWH*47L4mSL<*6T;(JRcv!(6H z^?E8KZ=Dr~Jc?;+#a%R;8!|bPbiW3g#DA`MAqs2y*vSn@6#v@UgJD6Q9PO(5Wuk@n zlixDt&wVCrN12g`df&bNPH);s@yD!38W@q&FGxr&d~pg+Vf1;9MTQgi*E_JH#)?1+ zA*NMMHSmkF9687k;18EiA7MMwx)>R{E|D;4@xVvE2Lzy4Hj>SV=gD55In#&0=$6`X z@?Lj>r8u!!xdrSUhAMI;%Hx{{xMly;|6Xpq$bX3%H3lP+e)`CBnc~7tgO=5ep_J5% zkKoF)sNgQ}?dNyjS&_^U-pu{X?=~SJbV^$C4R7ZmDgE7|<(^ObUa^bvSF@M$fGIcb zaIl=XmS}G(zeHW#dS~Pz@qyR5!C_)z$$mhp5aY=nqJ(iLl=INl#>wnr0EU?siBCYm zvb8VYV$`cTYT7j~qJ`-znGH=t3LB}LDAEFHGg6>_txUR()>6-R`J2?r7yzkkiV;xLY_=-{$BT`WM4HmoB7&yT#5ZV z#Jp$yHx@mmcx`Ee2&u}?``F7JGqy&z{BDC^YNvQ!LSWGMFuV6DH~a$81>8cg4)g*3 zC*-i6wn>ML42d_D7zm9y(-}Wy=N(yH#uo7(P?6uF*DPfOqK59rrsOkFA#u(xU-3dE z+cft58nxyut3n5m+P%gvmP}Mt65yVCokj@{{WnRnLWzwdziiJmMk3&icO*ub=(xe; z)Fx_fBFME&y7;KReWH^2*;|u)Gyg_qW*?;elSUgbRC?vA4-03SCp+YB7S(~crOeXW zM@u-*qaq*gwCl;pbmGNyDT+>{1P&36d1GdNv;n2_c$vM!-^4TCyl>6o%I^LkI)*V} zR)Ec!Kr^?FQE|50H9gz~=G!r2nj`U9)gDKr#E+@@a1+VXEx8cPpPWlG0_>BSG%(6) z)5LH?k1}uA_gCx>dwcvd%gpmm$Z1=cV26hvg;b#c!$X8EKAxY&s%(~IMqcS-9@9Xm&6m0 zdn;Gf>QxuB%J!OJorYE3($J#hn0(7qV0|m1uqC<$EQPOvX2)GmeOkP_7q@0%a9uBQ zw`2&8Hn~ZN zfHdnvKgS`1J^-7qQQZ_W)#9YBb@1m7rUR3=_mE% z%C;6k|8yr_N9p3^G_-&|S`^1hK_sOg-POdtM`jesliU;+f5zcLT`1ndWiD`Kv+V;(-MZ;Kz z)Fwh8gkyKM(e)!-u@8kI&#;#1lh7lzR_g?Qej`ZB@bxWqC+f{ez?wMdh#Vj@+FJIW zClp*{Gu*!&!EDOjqNL@uFocHVDrl>z8r>9k;wMz3wJ;%*XSGz;rT$)3$b-{J%^9?cNA(B zY#Z%gEiB#3J&}>@X)I06!-S@Q@G;t8l8FH=*{NrpJCv>e=Vqa zV8OW%Q>BvI9#&LFFCF~Wfu51M#zp|Tj%!Z%@Awa2tKeSsD-dVFst^{4OQT{=*%mXG8t0$|#6ta=YM0WV`(o(kCz&BSFHW&h za6OGl;JF_Zja0XYOKxb|6Y2-|=c8Ozt7^hYr4KS2WP;eFPP9$%;?Ql4yqnY6{H zcg74=`Ku^=aVMO%2G$nIVYbsvHU1q7#3jS%})2 z6N%0abvJwyoRNBHaEuxF<#0!$IE49yOd!F4{#?fn``Sc(Ia=bt*7*3Tlkl=F;Oy9% z>#m2e{ByZyp=W`63R(AX{wGB;`=bUU1YA>P+c;-gZU9O*v$@O#ZAlmv4IIVX#%uV_VwKn170 zGLW{b08nLgU`K^rzi7wEcAf&GH1PfQgJXex3kJUzH3F7=k!0nM%;^}MN&L^qjc1$_ zcMR8qXkTKQ0ReYbAuAZ3Y0mcC1pK_z?mAO(z>5_v1ax_Gi=40Bwt+|By)g|M^4?NT zg?iQ`+4Jy0qDrfZFg#`YreP=gFCihES;TYS|H z1$CJf)^S`(qzHN=DrT#W;AWzMdbKxjpMcToDAOEDp{MP_KOQbnAq)k{8tq)=jU9~D zyS8K}Ioma7zohuHYfGECI&NiPPX}Fa zMAnEOZI;0|fk|PEYm4BVzM(l$CjoTOahP-MX>f1fW;8L$)y^*HNOc!<`=)a@JzrZ2 zj?{Q;E$EKL0&{P=8HFSm=XwFhx&OX z1hybeqcp&qyMd{Z#!AXC>fNQ7Cbk2hvq|=!Y);Rsy%4#sePfqz!;8K;Mkt7jc z?J<}##VKk{=08hqEJm);@l@<=9WQleYz{{TloxW6AHQi%P(zb@XYt5Gg@l8;WTG83G$Zb@Gx+@L+7 zhW0mY$(C-jX)glWOLT?xS7|=eon_}&unMoy<8hxEVoBa;qW_otse&WSk7`y+*g{ch z`_>;#;jFFJh{vIR#mx(rdZ??4(Tr94w=AnCBB6O<;mHYgHPP@xnb{m_w5}(|HQsk} zNuQ_(iLXKCB|<%wOvPF{5^G2^kJBQYqU7XNV9zXL(uMx@4!iLk5%wX@q;At>`V1 z#};6A2S}sjTx3>xo89tHo(7DqH9ebf`s(ki*ki@gPT7s$C#>RW-0jB+pG4l_8e}>aUXB1Qw0wW~yyA;+d=vxXhwc6tJa!jpSCa0s-LFQrpA&I*ien)xr z-uzDL)GCDc~#L`cDe^7C2w-|dkz?-{JM4QKtF)}9Z#~*?G|zJf%Wb|Bb4up_xUlGWIDf=4mF%Y( zY+^+*0xO0X%ZQ}!I;obM4~m?HtoaMV2*OV?*XeJOJv$#XPO>k@2Sdag>jX5W%tdVO z@8{OSG2C5b6etk6B#b}=pq2R{D}Y($ru21NFb@S;=DJ7{nG56WBRc!t&^zNHR#m_D zX)(o+BevE3hF1yX&3RnHthF)yrTsa2g*E;j;)yv|-PSDEExFD(1RD^lwE8sN1?e}XTEF0`#)Xyly)H^6$_fNXdy$vK#)?;cuW9fkZZ7+$b|9j4Q@S&o zADV3wt^D0AAx&^_5N*fM(Rj!<8Vlu>^u)ehc5cSjWC;6m* z&_T1x9)I{JtO{2HqX7qt+ z_P>72P{wTkF=_GH!l}w=k?X48Bc6-E@ePbI*p6!KYlfew)V1kpep2{=^j!lmw7Lw( z?+D&4z&NVjY4Bm^b@9hc;V@cd7qCQhfqKc(Hi8XjuCM<_l&fJvBUoA& z$Inv$Y}=#e+h3F&hmbvo+1PFwe>p{04pCWTIyV!febt?YOW)CmbqE4U$)eHloFM&c z?i0*5qcYJJo-_U`{RJXgLd~Q)VKVgIo>(=-WzE14VrN%bkB652O$yLJlR_~nq2#1L z<`2&^PkD2GdY#f$0;90qFR3;2pWvA(!7U#(>hdW;ZNM`BkKX3#_}zl!5F$T)^On?a@vCU*mEraTZ^T3KzP{@2cYQuwAukEspt;z6aBsRnlc+?662;iWCQoK zbP9-!TyPBYHHepl@VYoZuBWR#LlKPq_pAT@RKKc)=h88Mc^p^C4C{&yswkoajNe3% zRlYSiEM<_5V^@&QT&6(8tcU-V^5urm>l=4NeS38T?8ofhXTI&bK%~m4O{!@PE$()VmL~(~&K99Mu_hNqLqON3sC-HH zpA%#WH~Jf0a?Gp=;s>amrHLkdZ5E}L;zLFKGU5T18FiPzUUcBysd5FvDQR!@FE~>m zu@oPFBo_d-gsv+Oa)Xm8dL&G`_?QEd`>ZoMr6a>cv2jc^P{sp9L2o|uAB;#{vrI9! zVg68TU~m)0=-?nU{8~UoQDb2s%6-oK zjiwjR>jcEb*PH*f;G<|wE#W?-6_S3Ijshezn-yYD`z!LVI=8ag?2l{m58CD{toA+? zW_y)3VjestJlPB@$N@BHkJ{47R@}zQdR_|9sIp7{T*Y4GdNKx&9@^$D%UYI) zb$#b417-~av47F_9nJ97(K7x(DP}^kpbvgk-RZbl68qCN*y>RqcP3@VH;G<>JwGEp2O{B2d66-46m+Yj>HAz9R zDzTg;CnnhoC52DP$B7qhP)W5KQ_(s~>SC^3rhfUE?mb=k6I>v4Qz_Uwpa32G_P` zS~q_*@E%N?@JZSGpZBssqk%X#@63v+j8$R>a0(#HbA9U~DAwJ10c@IesVGIM$9)Yg z;h^LB8ZFMc~d#k$X5VH>(Z$jl*zJ z_ZP25MMs)ZN@Oyt<-NW|`CspylP^^|Xv6USmj}7M%T0-G&4s{eIgOl|ww@I=9!Z(H6r zm_rg&-!Q}<52NxiLc1_4wct(9fIpU?QWSK7Kc1Jexogz=P^7P~r!UL;S)76-*^Avc zVR*3}moB`?H#Y9UKO3RVwm`racP&8R&5*I2xM1B5I$N0kkVjAZN8#$17aw! z2ikj1F9?Sw4~FZMs2_O@aIi1Ie8t>;+RpGBvJkOe2KUoOdch#`2J9YcTcmw?4Myb zF%2n)B*rH$?FZQMTCKmujNzbB>&TAxP@(aWTDzpm3at)g*du1JeNiwBjlD7Z{#%<# z_`6cK7#my2k1HYD(R6l`o|`JC>y<&Yali!AUTC{ zgkW;)7W{>UQ^ABG%hYHJ9pg+G1Jb^Nh&V=2!XG=lld#*L>Vxn3W^ zJu{gWWzb~0#;5;nK9CvX-3Xmjc^G^Cw{`hM11elWgyB)kI2LUf^=Ve*z5u#>BF6KH zxwe+79eu`bhaaW)UN2E~tlJW`oNappY%HFL1tDVRdefkmzkra-O#yk5FYTj~bV((P zAb&FOzh;Ci2B2C{O%P)QyCrEpK4WcZ&ZTQPoz=Mr1S3HP@<|eQk#f1hS|+lJ=8EE@ zVh`+v`()0is}|&+JrnMrzYHKx$Fc{Za0c;ie$q|}f>t&En^{?2QnYw$9f zCR2z&yfP)AlEl7i3Fi%X-#~C9lz$9d1x@UTJ+u$nGJb}n8~T_z4NRo9W}@5kRh)%a zXG+RflE7hWWm-PV6cNg{=RtZt+_ZM_BLpPjFXw`w^!`Cw8A*2%3M@;SXtN1xETm+U z+!Z)%7KMD_)H{4i zYwHpxK+o?d%>~E(P_TPUePFLNX7<IkT=IC%i$1rb=`Sr^u4D6*99`fwd|6s%NP}-R)2mkMLzU~TK5sLXtqG7Kl z@(g#iuP6=F1k_@M3w902FDRcpkkW!8mbyMSeaguK_D^e}iDBVKc!b2PV1S2$Q-|Zz z4;ev9zRV*yQbg1P&o~}|iDO3f`pawgb2xlL8mmKxno=PWf}ZAqKvj+8F3r==R}ZlA zc(1zwIgvW7TCJaF9Ep-$H+DoocTfWeRe_zhY)-itVim-f$yo2#Zt>%(J%Y&J+eF1Ta)?XVy}j9W zKa+$u)S2k;;1YtN)U0a{F|&E>;4a>){^URo!R4wCQ-m1IFx{usA@+$R4VgTF_|se) z{|&M44TWE&+_xq6BVjaWbtXUO6?|c~T%C++k|a(g9T;})+-5hz;e2nRQt-wg!UPqI zM;eT5Onf#R^LR5+Z6>jGA8T)xV^Q4L5>C&$TH99bumRpge~m!lznapQ9}6F(l>RfS zh2@&WH^RvoCjlym>5f@n5lLv;%hY6!7>mS#iLo{nskgk=%G4_G};tM4t4GjHcUWGag@^_efi^=cokOA^wAS3AdW4@>(4p5k1IeT8GLymL_ju~Kp?=sl^rMKF6 z4@+R(f}r~~^%C;$Pr43Y{rffkuMJe(0I_J-p>natFN4TtjoG9OPt0WmAVPVaoEF;j z^+P9==JG^JHqzp{uI15pHQoFLXiGx)DT$=1magXrN|o4|gG(w5<+O+Ia6NY`7$_-> z`;qf>_e)g3QL|9_m?Hp`lBgU{ddCB6L#Q`+DlhnafB--!+@XzD4!+P zx0R;Ts~eOVvHyT2p?&L|q>n|zUxVdHHdb)XrM7!NBQi#vP` zate%lLQA<;w@mNXl)mEo|LQqTq`-Cg{9e250&4GWMBONSE(|>Y00RLrSH)vK$|_ao zTNq^m3eE{8U_e#&rjQ79Yd7}CfdW@q+b6iwbanXLdyvNQT*8+|L~})W14$hxn`!g_ z06KYqo$x5wvg&CZ)Dcvn?M*p?UVnCxZOI0P7-`(TEpyp zGye#gT5=iwp*m^e_n>48%Ar~~o{*&e$>4b4A1nGK?y6y>#}LJx{q% zf^0?J5rTVQ*!ok8cW7U=f|Gj-Z4r_)+RS>hUuP2Yl5olUE||>2ggB)CQ%$r4u5m`m zi|GHZjJ~n5Gl?E`Q$SbrJ!1u}tKJS|i>wbJ3!gL>#`aF7VZn}VzepsCPDc>4?d;4? zvTy~BVZgkS8v%=aw-*1(4{dV+up<^Y(^0+k94d`3qm}-|E`QfLemWFJPYt*ZSe-nO zt;!3tcXEF&oXTS7O~8^+BA4OU{vs7~2x0p7I^Zuw0mHQzZ|YZ8AsvfcPG zIy83y!uuPC%Vg{dCTsni0=2nd8paIY%XBAq9_&B|B%#5iiHf4PZd%iz%uI^Vy@Nmoq;bIawtT#em z+a>m|$>X(zCl#hc88YsmLIVEXISGWUDo*D94AmmI>AgM1?3$E%9F=C1{1>rt`ZFZm z(xS*0`hn=Zy-lXd8uc+bRm;z-4c7Jb3-)Z+aawr49qaPDh4GYsx%r`*`h*gR$i_v8 z_|M@GmM@g;doocNLZR0&xO1!vij++nSYn?3759joa5(|COF3`W2>KDt;@l{Oud3S; z^B0;jzoHHm+YBpiNRyvPFp_+U_Iso~8TnaTQjpKl7j>2_avx%l)!b_W^jMb8nQBFU zVZ=F(7A){Y1Fv^H28?U-yv|!3Rj&us?aF`)=if?-%S z5`F0V9Trc!4q7L1a9|yX;p0ot>|C)r4eNruNI00x^3V_M?YyAd~g7 zB8vITg~|iK@?1AC)@Gih`E=&8S6tMM*#|C|HQL~j#0^H`ZWRsGOzjIG;2qCW=d#?t zhHO1itpif$no91U?*5WWRN&Id;HY9&I^e7hEt*Mlo zmd%1HF1?XEZU}I)yY#UR6jCRL^fFn011y@qro9lXi-&MXh=&ZN@P!6^D}T(hz4j{z zS)KmhkAL-onQyn-exzdip?wgfP+KxHR30S%|Nkh9 z+?rB~T%xMh`N+VXKU5jtDz{_=0FB~1{6{)(3C|vUfRy zZmk~_Y5z#=QCmrHtQSF%>^-vdFi>>icSR3Uuh@CQT zM5Ki892fNmA2YI!`wC_txPG;(H28y7(|o6Z^xa7oSNefTyj9p-eTJ2}wQ~NEz>E%_ zCWSiDXES0~mfb}}Ke*CV@14cH*!egvOSE2K_q+-Zd9W8HXOYeW0uPf9ZBc1GS@^5O zuIvWt|EO3~p560jHYRjc{M%XiHf@&=PCFe`K#%?6oN;2`_>-YjQCVdAP8Y4EFOG|W z-Qp5Re~@RnN$$XyN{*I$@2?Bp$g0keX-#$j?bp)iG&WiDeM@d&UZ7@>;JwbVweT1C ze>(~i1a+_Phl>$J)s*eSly`#wFDS!@_3e(Z)H0-LaQcWPHLt^Krf|$jTGSioTylbd zcQjx2odG!40_G4P;(<9<0|OZ4yH%2suT3pc_qW?~fjEQTvROgJJdMv@%psj3EnD0(F5r{g_Kh8Uc<(Ry zXAq$g!FbN5Q3{r2Y6oH+fA1prs5Rkt0l{tK9qzK;a=ftuWSL<=2WRyC#-t9xir%i} z^$@B$B8~n_JNdeh5SY*B^5h_}7jdE0iSL^A`Loi#j zX?=mLFWy+%a#%loRKMz%jV(meJpTZAwvw8}Kh?|%-su_Sm+7Cn-3~{1wp^R%u06-x zwVnKRhk~^ob}!n49l$K4wX{>yh7sE_vKAnodrV+!r!Swt)RA z1;&^1L2o%NL5w==^~f;?ty54RpbXatQEVON%GyTr(q@b}f6e|En56-h#uGD*6RVnT zW-2@&#HHps5Hjzl!nw;0-fNeU*2dRvSTkq9bma>Rn4*ZbX`7}&x&d=Kz$bjSpm(I& zhRBADgZxg!8x&jx;n{xgOC?q+>G>|#3zYoKQ;U;wks)#@DHE+V;LY5GRh(X$oV_yY zRa#ej+@C*1xv452{b6#O#e`E zQ>y-MKtO|x`&;)dR6gK?m7=v^NW}G0-j$ePnF`Tzv-54X7O`ouJW%`H=%YXB7ymi_ zxKg;&S$eNacvr5oNi5A$(c{F&w^L+bcIm6RcE0{>OP^-yAyKop}6uxGe@Z zU2>?)Pw7i^OiFw_|6nU`|5Fm;&L!%XUO%wWG=cD3(1urNefijcIf9W?%qfsjCLY?` zLZ(C{%3nKJhyOI{gfh|Gq3?!Z*W2@{D56~^Sbg%#~-05OR>D>98R%%ykG44gEfQOd-bt4&(uq)B%3D z9{CpHf_TL9R6ny)t{tDm*ml;NeHY}!Xe_0^Urr(?J7Su}M&{dsX=0bvbk87Qul4hM zv`c?uQ^n)12velHO)TrMK&L#c(h15LAUixveNYoN#DA!M<27sAB2hW(1&v|^knkWR za`0g{g(J4gto>w?x(PMMhh+ug%{E*XWb(s!DOJ8AA2IC|2bAiFqrf!@p`vqDpk5OV$41}R_~}= zNQlCZ;w_1|&B_4aio`3F($g~A??dV)q{44xY5(>o)Avze#+WJg9V?TYd1 z8p`0yz#ENehmaTF!u*f~_m$bk8c5FTtenw$b4~qQ`^a}8F_nOF-T+7=MkB)3n#V`JEbp+-INSA?#5^KR zaDi(0Ct&ZJGjW|w#)TCMsNa?5YW_8!ksO&8Ojfj276kg^jIidQrO z1ta+Vm$|>o_D|%%-UFgy_OkX;`Fp#t+8VZf+KO&{EQeQ)B?@%h9{L?R*t0GyGdbt$ zOvEv8oLwPQT)GNBc^Wj5!b^^aEH;gPkP_r^U>IiX)ui+OPUWHTdc+`Byk?x}LQnhcafKBu)JPiriTh z$pHizuBs?7`qlNX9MM^8)`rKx_`lP97Qc7k5}5{0;(&_vg78+BNv#hTYwNmCj0V)z z3P|St(#hOB{|WsW#Ma#Fjjv>e6T_g zwKexIYv$nvZiJwZm19f-T9>omTXd~R;usoSX$7bRT$x^uiM9YFVugkmRUqKGNqfnI|(A9$Etzf|{kzuYHNJVndZ z9w|C_C`_HE%C{S{l?B5Hf67(9Yf7k)Wl`hFG^ciI(RN`piG6ngA>`rNi)_&{7oxkC z@v@wTT?toQ3$}WFMN9B}=)fes1=V&A${2a`KWocu%3|^wRB{QqN%NoqcV8!U+tj}E4ve3&& z|9n@M)ymieQdSb!{-D5|BH#ld;_V?afeYpO3*0#t&yRSr8zuLm9%|ubwM6)s7T={` ze~^}#1^+G5ZzP`U!m&Ml;tI^V7M|~zIg><8#NB~zSo^BtP(he>|;0Nu>8}z}xLM$vNw89KF$8eO6X0f_~a81ARsYq(=GkisVCYp_WgQNMmCGcZ-T&$8yJZZ zzs$HZ!MEk9a^TUiK^Q=%De2o_x*3L$X_1l(Hw;xGZh*c|Jbw)mP!eZMmQUF|&584$ zamI^m$^jKY#R?pQP&^pOR!DVAw(kO-Z8sJ0Up}&_j}O+Raa~m1uLpgWguVZtAEZ2+ zMdZSuY=cJvsJv-2r~0X5!>yF_a06?Ev%v+NkC`3qDXtro%t(TXQ6Nb#KPzj~>}HS7 zGu&7vlaa_$>M{}~Rejr7oTxPx*<{2jJR~^c9)K|D*8G8a5DT$lAIw;mo+Qu$tW|L_ z(qp5S58&o`jKZ;inxbTZGpb;>ufY-WRVX?Fy#OB8W9h0s>NP4gQ^`mim$OGvw)k98 zLxN4CPH#E1WO31%90<8R#PR}C^^!Jvhgf0x)8%gA2d8(5;;~1*b-8qzHHn>R40i8> zt6V@cWX7t*1J%*+QUzO<&-jFY`$feHptmClUT<_N(206)346oGMG@mrn0IghR=)>= z5Ko%~?w{2HS_Koc(N`}sWTfp=8ABvfVM0^tE_xbDHV_D-hiET>e;1@Hhlh z7%8_sB2OMVR+*z`)cN{Xm4Vg}+}tR5@e9~io{%*HC9=2hRn$tQ$8VQfaA6@;g8Ub> zGU4(Lk2_42h(7a@-*6FX)W2zIGcYkEorO=ritdyhDi2Js{L%e#;FX}8fu@yJA(7!D ziZF%b;o3|1jtGW(NCIwz>&c6~n=rHkJ*wMeM6l0;1CG78e}$`9w$v0oEG^Nx`Xg$u zNMtQWRyMKJ&0wuC+H=8PcF6XswuaY}psCh-*+-e+l$E(8RUr5m>=~nsjoiTxYRgeG zkRY`NZ6BuTF$7jB82GHJvsx{*=^`wF8O&s~W-1iykcp4u*jBBGoK;WyMpVs9Fv(P{ zWwQ3(q2W4DJ8;syYhhWasVvaEb5VySoU$bgeMQVj{kcsC6g;;b3a}dD#l^Pg4Q2NB z2Rrxie*#8$(X@mZ5J!q7Z?@5c?0R%*-|bNVE$1#X0;a5Vw^tLf(&b^DT>Q<%9eu5U z4K6=$=7lKyBKl$!4UXj}`V_JO#scl{?dJLP;sP- zHt*oE-6`&90j;)Y=|5E2QVou$xwq)Hpq-gNt|d}Y7rrTrGZ!20xW|@0gPq6z)XwBlN&q9r)`p2`wLjwlG4jMpH^_MoP8~LWw9`g(oNp#SK;)1;C1gvz2 zL3BDjJEK7d01VVSmu>(WeP`11!})<}Z%Gp_<>;D#M_~&dQ8A3W1bq=R&=+slc@xxI z0-sQXsFQK;htOHIDoUiaunkK)%opcnmrA{6w{<3>W)kaqIEkx&(7+E|$^feBNfky= zJhZt9yD2-LuYxLNP`h+fAQh7iV6KS#do$x>AjMIH5gwTxbd%Qk(i8fNr17y!Pl44u zRhCElePYSp|32g`f7KLXc63&2_Lq&$S9cfIZwcFlRoB!h06|J$vAj~Uh6$LF8iFQ} zaA)x^BY?}zz1 z+3`1ZbE!%-vOnzY5cujnzFf5zjgh=$;kM*md*coLi=AkB_y;k}n5^|3Ea3y2GE#s| zat%LE zJ4)9b4UA}iQI(N(Kwkm>qr{AscAB)P7bTqsfgj{B@d9QIk?2rld*ee1ZM77)=gAIy z2VXptuuh^Bm6-2Basxu8#H=F1UYP@!pK9Q%MMh)YWJ{Ge$F$+TiF2-jbLHf1q-x0S z?-^{o2dBv#an*{QcOwdKFwhq;5QpnO%ld3LmD>{qO%Rv1KwtCUpaXOxe<&)k!At_|<(sIlZz!0-^>a&gfPuNk zQ+Zd{Pa`NvY#em$p?<1(PbS0Ii-KLHO^w!PcFIrPN(YddiU%smc#2I!3#zcLL(8j~ zEY|tmo39ikpmi@IGnI1muPhkh;(Zovwj@M_X5co#-GWDE0(jK zZ7I28`V{ee?O81AeVfc9mi`5$)_uN^ymMb7c+^iN2-{=l^DB3b&v6H z0|7z-sX$*>;^mGViO&6Elt&-Fa@7L@YNQ$jj@| zeTTA&hE$zI1Qdg5aKt6e3!iXw-p@{^)NMyk9f;Giy}lmd#u}RLrH5=~fJr6@*Tg;u5N zAlnM?C*eOiY(k&&qpx*Cc>^1ZZUGjvqG$WwaC^X=UhQ*;{pzw?p^sw_K6kvGKAO>Y zUuuG>f(ECCSgd)vAHB{(|^!qd6f|sKcQn{{PM{0AM@T8l6Z`8T>?yRe1`<_T|E(Jlky@nz^h>{6+&|Zk{SKuw* z+#K4Y{|GsNW4jT-{+J{n4CGyQKIjmKv?fmgog<-5p2m7khj2nwT{1>&ArH0khuYGf z6d@oA!OVV%1j-robe_8d<^JjvRRLmB zuUx;@UJJaLaV}*IKp9#Ux`$tmw+tDX*4?~qc~kG^@mQRkn64&TQDRBQ&72fqxnc>2iQ1K)xX#=ock7~b|%h|WCo}q;@PE1JG>sJt}+^2++fVXwjTJ6 zs~n5Daa8%;xI_P}$0GXP|d+oFu$3G$n}=vWkyzSDPv3Q-RJ{%Krn~@|NlkS)>^beyB3B(pZ7vd|3{m&*u6@Gc8pbI zozpOTv>^eqbORR-BS_ZAuFx2Zhr63CGbBXao}0iwm6(F7LZ%Yc z4tWLS3!}@`B?$$5rWRg6q)vkq{73Ed9AZZ<7I7j{%!0Cdr8HV;mJ}8h z6EEtli7Av*T>9}CFSEs(17oi9?1lwC7ZlwF+)F7i(gMJ(q=eRo?<+DAYk`Hg|Ne3f zX^AlxMC*y;NbynwBr=u9{7+-dnHsf-qBNp2wR3DU9EUyS?;C~VN93xsQ1Sz;j|=?4 zKs3N_T&~{clQ02y4xn9r9#L5ZA?GbG!#b$jof-bIMB|92gX_q|L0A%f@;z0B<-QfX zby41!`r+^qA+5`(reM6MO&&d2_1zRVg{uC%! zbc2MIT5E6FJOr1Uo^tAO_^UYQb2#=$3oKO?q2R&O)#&ufGfF~;ag7x-S}9@d(Fd_Z zmuHeX6X$R`Xkk)aqF2CZT5PIfGmT12_IKybkM_hHGdT&X;9d+i09a(^z$yKjy?;h? zJo)Bgtga30#Al9%p91c;-h;pZ00RI5F=zn0j!%(p(JdbBaWF%*zh}fFo65@cJAb5* z(wawW%U%WVHL^UkCNZaG)(r=rIiH(G^#5Cl&i>Mau|Jy6Z=+z&{)GY9HLkgwK5I|? zE-QB8g;hHkH^O?SePsyVhr;_EHyKTbMt1b^IW-ze9U=xb?35k;K*>&p$r~u00-`6CBDw2@DHkUctnkQ`?$mE+I(_Zk)y2= zu6xYCOr7q&Ak9|+d!+HHM7VKrW(>oh(9dM)eY;sS0c9mgX`uh(MTV2b1t8IdHzXRS z`jC?_InBq`;ki+T^QQYKg}pfm#lGI}1K|5#^FI2X-)~V5^}ckimY7_OqlPGkg)UMyQUrk35h2 zxQss zjQc7vf^P-{@CXNljkiu;z)FyT+EKsChKN@aS3lw5_5jcjw*3|&Ln*JVi_4)l`(dE%_x_{XHoHW44&C?F(&dB)^3>T#)FPAg7p^o!@Z^{Qb+ zPP_Mn&Ae+`mX29GX(k>%9+=XL8Np}sXcKq4V_Ou6t3>3^D*h*jb&_+reJ_VaHob;4 ziKyHLMP-1PuKMB(;bt?Or&ukn+li&Og7#B>gtn^a^kP8@s+yADz3Q6o(MQ!@gqUkm zc}^Ky)B5Zo^Qj2%98{VGN&PrY2R80k@y;D@T_(HX`T!Ysy(~^9f!g|E_weDMAs?%a zSh-j0-F(oSHs`MFc$g_^Wtis5&?SrmSt=G!j3g!B9~hb@2?-}x)rxdZ32dO{Nlluj zj{_~6XJD=3p%cXohOND-%f~%Oz-_65*LQ|1ONQG95=Hx%p&hWXyNeJJn9IV zma;Q*s37IU!9*7Vn8RDE3-181uVt+#WS>&!el2nxfboLRs5a?e@aQl1Ko ziT49%=XWU7;jjm5Mb9WFV_k5o>U4em*i$9JPF~Cf;z^uS@&7Qo356??C&_8}$oF)d zcrZN59!VfpKiRHn+57MoB)g>DFPU!=2|vg8tB7-H?uQ&o=q+y=Ub%RS=ibo+<&#$G<2lmnVm`wy;ot?Keo~V*oY&biIM+HE|OM9gcxC zd%YWHj7nL+qjE{VP0eMqwt{A@xPL*koU_#)zlhDSmGzO(pdkBpL;v%-JoKO0b&0j4 z#a*-G_t-rH>m%}w7snuV4TyX5hzvwO+_7h$yEYv&ms>g?P8EhGim_a(Ra)ya{4luI z5{E>Tl9(Qh+KSd?`9d0YvTs=qN0xvS{M`q9vk$1@{RhWcaeAB6tBVVQJjY<_&Kj{S zlg75WXZkzzsN1CNM;(I3JIn$BKarVbL7vDh?HWQ*>8cU2lK)#ZdBJk3Hixln!b*F8 zCi${`eMnqBmQWVtL=c8+5`(wj@#%3U&ySO)NeGLzW0Bfksb`VUih37DO+pakHW9S3kHZ;07m`g>#{7Se<;hvC58{ooBV*8lOKg#@3FHoEu+&x#J zv#?_k`(INkj3v0j2%R9zvnSy+h|Q(ya#3gjf;ae|;;L5%f;-{5z9 z`0{(07BOM5h#IWSA#mj1cCFt@Q^WsDNBfuK4&)4>b7lHhhfeMAe)H8|@9S}_RJ2v2 z-UISZEC|+7=%HV41uUwSZQ%N*I3HG7cwvYmHt6$%d%iUpUurhG?TFatSTyn9)bX{M zq~$7e01vl(0v@MzWV1Q1_{VX4q|jndGx2n zXGRqTgjQ1ai&$g9d9c>pFc)&{lY{KAv zOLXD{=i)`;lYRmInQ@z+d+X-a0aW?EmPtF;BWTdeSv|kq=imYw1y^6)zi6EKe)pC% zL9UXGTHEzHW;&~H2;xOgo+hlcPBQX3^412r3&%7^gg*ZwX0B`0PRMZUqfg+9)F%+U zPiN5)_ly8Rbr0;Y1rOwNC=wNUGj1z{A6?A9=9P_lgF4$r@nOQYM;85RD$sq+{W7Ua8tl3f%y4(~P?2JnzE|^``ZuN&=5%wr9ix}Xsoyt&sJCj$I1 zdLkIJmyxzuY!ymxNr9@~L~y{DE7?Y2`)R+S4D;+mnKCjGYq`mbqgbK{8yY?RSdjiJ z#{d3E0jh3ryPgL|fOm9uVP%>e&xi0LSNG%-U^?hYbJ(izWJ=Mvz5`l*jf(1lD zT=1b;B#{J|)Xzj{Q|A-sswVCD_YiAwPe(SSsC@0Bx;iLWXHugw>V~M$Zb2~tR)YfeDJrdf&5T+ASNmw&7g-5o6|e~Zl$lPK zYd_V_DJVO|wonIgl{`;-QgEI~Zs9_$6wu=d^>>wU*)uTTwW3Wxh*z*}VC=nBbX`fZ zExN_b%*<>tGc(Hqi^*bUW@cu|vX~`{*%mW1Gc&_eb@e^(j61r|sp_x$;h#OWhH|g9 zW=3YrjF_=9mnP~vTSPbsmo?|lm@1Wi{B-_e2%9LqT4K_-Jjg5PVyl}ml~*-kk`*V2 z2eEpc{63+?f>D1%1v<`2ewhBNB>wD&a(4l$W#aLdPY zj&C|trl|8(0%ywnbXzr79IcYoHZzJp$!q%Qu!Qnr1&McsaawJmq+}@5I^tFHLANS? zbz%)TK>v`eEi2wUw=#x?p2}EABMt}53t9$jBB)mC|2*5)r{fvdx3_jxnxw!fbc2UB z3%Y?+E?p}#U#VG4RIkBHl~SL5CE+Lb|6CAgRbj~}4zd2J`wQy+R~f0#cvX={7aLoR z`}X+5dJ{ajo3?RM-9kxY(Pfg*y~A*rJ4-cc62GP^ZsgTax=A=&5?p>znFaDvX)Zbp z!w|T1u07Q_pb*6(j11??7)peCH*l}YrA9Mj^2SckmP8yfJo=%Xv?u^N9*JamI-{uT z*el=-y9NU43e_SrRjwq&A)R?&4V;m$fq3-uOVCMCyv;|*$1wxZ|K8K`8(@*Cedb@KAB zIo#)dV8$#au#@^MbVqy+Ydt6xr*@cl&aP`|QISgnQ5#4l#374e4FZ)PrO`=QY%h&n zF0Lb~Q%RW|62ON>cG&^RPS?Zst-KlOqpmgqycdZlCw@L zr+jeq5^g8*s@XWZ_xj&jd~UOUIaDh^{E}oR<6TCpWCz9l-rb)eE=yg3X~nF&g9Q5% zYxCV>Rnt~1&SkLShEM$3DaB~>(Fy%Xj8un}9S5xnl}?Ry$CM!D8REb$iqkn;L@96h zK7|`vLSh_h)w@<^#dDVE8XYrrJ!@Lrp{lhJ$ViMhph-A8>&G{zF1tAiV7R)^l}UI* z#yL^#vrxUJI&UgrmMp`M{8_+h+uf}d(r{PtPh9bo_TeN%w@Rm{hHY|Kf&n(ibcaF+ zavB9zC;37e{%tyP6Mo*}aU(OS$GBpwiKe^eUhSD~6`|Nzo%wIbjnj(I=ZU$fZt~H& zbr8zucjU%?WGT_LyXZ_rNC}yYAzpS--3&HDVIToSpJnrMR1`@-v{LUQoNl;aF=^B} z>Qo-N4w4Jnclx8trL8$xM?ti?TsFCx%8L$r5aTnXkOU6Nzg=vh(;~iBO4ZHLZ{p)0 z4lS4zmT5v;<4tBWY{JJ|lfC3tWN$UhaLyuUNbN{xXGf{a+BM88?xs$Rpn5pmarG9Z zZW_gQiW1S(T1g?BCJ3o;WmtQHv#wUArpVrNs-*vFC-S6X+No{;rnk6=z#lTb+c7U!4Dx3!vW!A#i3F%>od%V!_I3ZUn3sA zMc4##d>7OyXscoj)nJbCU7v?2ICD~DYSOBJ%x-afWBH5;3)t;N0^yA7$4u@OVt%t5 zg7(B+_sLu2Qp8#NCoNUpbPL?OjUS~J!zeU6rPs=)!A=84#pc}D>p5l>f&*b1>P?HTAM8760L)>E>gJpvBiN)5G)^c2#12051rSSHP6m znao9ge=(^-1e8&F{AoQF$n;l{uS<237YD)h2Gq#Q*!Spg0*xit z`Q@0psmh|Q)Fz@J%CGT~D4`5PK2}96z&s6#*~oWVqvvc3u}q+O#)g`iC7&FEs40YL zTDE15XdT(zV17jd|0E(F!_4*AtFAD}Ms_rWw6KQNUuZsi(**Wgem#^1yuGfAtfT0P z(yFwpbtRp%QjI)Wo(KkCoO2*YbMZ!pa6Tc-a8{Fg5<<4Ox6>6CG=>Fg7&Q1+)~M2( ze@D0E5SU<~m8Aq*v7&yz<7dW0BA0cRxPI=qQzv?lfF0*YQZWT7TB2B^NQ7>V5Gh!T z;DGkZjdc$YUM6QF&A>v31_}7s(yoykCbx5_sl;|mgv_i?ColQXqApiK0|hgs+G7U| zTO{cV5IQtO4IY*B%T=~I1#HM3@q6CLCtjQ za-@hAs7PsesA;Y|oGZX~W-HuroX;P-8_~tFhZ#IC^^O)AuCYVQ$4GIQ7I+R;H<3BG zt#nI9GMu2VMvi*aK|Jj6#1zRL12(dupjgt}Gc7~tnqr|$Zq?*WbS8kvn)PRxgH@z_ zHRbKcxFa#9DjyV_QF3jjT%dYk*%K}q7Cvc#!6=Wpi`m$YJ}imHOc)z)uDO#@1;_d$ zJjZFN`f0Sv!^rgo!D(@(c2poms1{H# zZ+$2q=8VJfXl{jniW zMojztUDp(+MtAqiJTBn5v_eGZpd{Z90E9jP!mdetFdcb zNVDBy8gg@93+`iv_@buu-Ki!F>X(AM%DDq*pD(l|vUiQ4=fPTH%<)Clk4i(&@MnRH zLdG{lE~s2}*u1L!HVpd)EDCM%Nds2c*|dw);82x64NAzmXasl6=GZjBH)WLU2B**v zF7>eyv`)n=!Z^ozNY0ZGlQ(iTY4jc|@#p|@n?{e&!+$krGZs%zR_qcbBevmACq*6U zMSGQbiVT>%urB=V9%x zZRt2~TKIl#dZ~I9@XPay#jM6NgBvI>rmcFhr4c93CzW1>nr8*It09djTNMT(_GV|% zT^CYo>4Lm(-X)W~eA0(8M`HYL?{>RN1p0Q&zu2R-c>>FYQEh;cH_km{+E06oT&AF* z6T1z5u{S-k#}zTH&u$B8DP6MSk3?7I6Xv`Rc{{dwN3xUm-+|9-go_rz1>p1@pR+q9 za4iG%3q`yVW&%;&Nj1YDkH$PtxaBu<8SF>Uv(8vFv=&z{z^7jHp#~LY_}XSNgrh;F z9)J^{M`oP`w|?lI_wtUnR6EB(^?8|0P5bN^9Tz_eGtqYdif-k;5nB@S7Ay4H5fklG z8~fJc8FMIU(XlphuG3?Z)%J0yy?JaFGx5pRgKKClI*Uj0L1Ir+*|=M5(3Io)`^q$6 z*S6w}8l+fOf@CL4xu5;?`RldYXplk~mp^y1OK8eUDXB$?co5&O9m?o|ZY((SyE9RV zQly177j%EtHr1LV3Kdo@j4Tz7Df@KZbH$k@CmGyi4oR5Rpb%)*q@kGR1L|`THGlo^ z>mmj&KYhR)_AH==Wl*`Du6t+-KCo$27`{TL$m=JKFL9a{enHykIln)mX!{*=+$SUw z236Oqf|>F1wb_}}0Y!}`4!#bQmD0=&V6QK_YhdJMQkj@z$zsNr^-e)Jcu^zT8FEpi zy9Z=3PO)+l%vq`&*-UixmuTlxg3B2=)Ka+D%3K2AGGapnrXtTKAv4-EsO9&|(%(LP zrEa8z=|J)t;V=U-p6i_cbUr5g0yqPf$d*afbi>k|DQqpsLwpYNG5QSs_E3l5mSAJU zt-%@uUt-5yU@#6Za8KMvbVAzOYNhgVmg{^bk3OUD2!Xn(5cj)fYe&CFwi`F|<_lh0 z{YW}kP~W%t=%rRk{%j`exGcU38a3O$)fT(}!uaeMvahJ)ah_ zPJ@XZn!2dgZ%23G93of{ke4Xl@17HsS};)U+3=2WnZJc(^(6ipnd?3BCh>v2SG3H) zHjn>?2lETMDs@i0u#!6?4w5VA;)gti&uW>kR};Evj~&HNt#6gO!S6O|4{LF!OnJR_ zA9|hR0`npsB^!XwdhuPJ=OC6|c|?PRb2@hB*`n8a2Mc@6;UF7yKyW3NkEhA|5 z22sdHk<~Qis`j?O9DM6zgM{wrYvt854=sIVIg>O-A?SoZ)@Ko|Lc$quN z^=OUUC#%{Li(NeR$=@@)cbfF#tjXhQH0L)GE0T-=YmXGoo1K%%!z`*snf8*()&`~Z zXTjnje{t0&RJJ$dFcFy zsi4#`s}K=o0N9HD#@VHESzb8j#~5rws#wA9ZDPKQFWsnMK=rZRIvvOndc(4ZgobpG z)vV7~i4gz7TzNlSAPpbjXgz2voJKljy*};295?l%5z}(w^hJ1$^}Jo4og9g8I^$ol znzpJNF@RdO8H%7dZHu#A2|3UGNG3{746eo08SSQ?wFKj3;U41-X9lz$=UWGrhBWtVpwoa3|hwIb9ergc;pM= z;?1SY*+%kp(p4MCjDvW!cxkX-raqhqrodj@WkzkO)?*sIg->q2p_T(W;=V$rveNaC zj03mOr0yzRT(M%tNsD_0*q4Duf?5Wjy2Ca6yI0`18MEZ(nnG4x`nKR#%ctWiH31LR z!$KLtNAZ$G8ifE^gMYj$4FMG|!3gNhI_oPFB;O+%9lx_qpLm@#Wepn=57h$^LKCRC z!O?sBY4X*h;t@BLAYB~U8&D|3X`sx3BVWoB{Fqi0fCl}sOAsZ@RV8Am8IY`rz$7Xq z2_;d$7xYEN-0ZwY>fKt9zCsosQ@2IlJs{g;EYbjzV>RJpP5WH-1r+Hw3`FBWfX4H4 z0=uV84^*;0)5=LQ-^B2C3v2~kR-mu84w~$>{@1#u@1%e4CJ&Cm1pt+f8S(g>%tE> z40SkgdxKEpJX(l$!Ipj@O%k`~(#*W9->~`Ok(?;(D%(!O+w~c9b>t z@~;%)lAr2T(E_b>>dv}0LN1&p$Ut%cTe~kcDi{EW&?bFHrC3)gbno~L|? zN}QMw)ilPgm?t7#*KuBcG}tJ6KQb;~-l+`9(0|LuBiVsLVGu4$yXA9Jj(pOWEHNR3 zY+J27{#3WJZcqD=hEEm`-E3T z^GQ$hK)LJN1Et$f38SrAA^;FW=0zWkef*P|9x+(b#ux99j2gR*es@7HZ4!7wdoHhq z!`)><9UAb^Y0+1I2DoEF0ChShAg{z-q19qrDcety3SDloRL7zT{m@P0``vCm>2+sV)uX|5ABXs~Tc>=&uJHLKgO#MPZE)Y*_ zzxwIex_?vGY;U-F??oVZ(}Rm)S^Qwq4;KJ{vVo*)H#aEFXVEB)VFaTv6eiichM@eSvvt@(!ZmU`k0Ccw9Bq)Gi+(2OgoE_*3fI!~&vf5}plh2O2OQ*Tv z|5+A&)%?_^_Q)05-ja}E>k9y8__!CpV0N%55-rU;0AmYD1^~o{VeXNgQzH-BV2SNs zN0f`~MWkJ(mwzp|-Sr0qE1*fp4LkvWHHqxt$KSw>AD8$*SoqOReB^UgA{SN} z=HBy@(HE7h=;}ZI1yT!+iC9gP3(y*&1ORx6{k`L-D6Avhn`|6n}KU$L!|)J1DaG{}zgL(!Yk{Pg`UQ{Rb%i zw8cMI>0h|pf8(S675)4xPy6SH`Umy=1yB1=TLk~-DE!{!PsK4c-{+)>NJ0JD`t1!Ryi@)Wge&?h9 zeXRGVkNTaD`inm5&sgube(}Gv-XGHWZ~fx8-u*`b!oTM3-+K4|t|k4}yZ=rOBVGpqJHzW5zq{I`OTf6j~F^-;g| zi+?{ad_UNj|6kVAg6J-i0_6Oer)U>GDv|#&u7EkGcSmxG2+<3MwxT_PQREHLD)h1xBthEJ+O*pNhx$#v+;`w`K8V5M!!$fhJLt7^1^%MVE z39qKQZWCMD?qUVfWlzn~I-$#$?e?gvCrdZ)P2{Lb?$@wUu1}feg$-{d_bZJ1n9hOE zfxIGKiJ0g+^1JnU2zuclpx+ZjQ5)ssM)xetzz;WR!wClqhm#=O(J|`2pK~$h?rPnF zJJ^9r9>H(%0?*{az$`r{>M9Yh9FqH#J#b4I{K7r{5=i*Y@=i}C512uGjbbkS>=@b0 z{cO^ZC~<(7BA0#Mr?h{dXC{QnlQ_Y?h4{22<$pVP#6CTRADP9j9gI(xC-CExOOB1W zrUHe*RB?&Ef?a^*sq z_wOQTD%BH0=jz_JJ85FX=nWUt(`rMWaK1-)n+2Alxkv@8mKGen1SXsP@J(ugI=QMY z_b~4lo|-6^HV;!7-P&$kcS}kSTnV0FU!<9FSxyy?BU7##^|u)uedt+UB2bnT8oR$$ z*|Ye}rmHo1ev4G{p}T-RZg5e_cB5vE`%+N6Cd8FRP8S^AB1!LP?F^d#Hhp7slb^ta z`|_o^`_m+&{vK_vgcG7f&9Nara~ygFH%(*vU_5NiDP?F_0i3%glN_f1GyVG^+5D5o zcMj9D*nU9CY(q)+pyKw3JroD;3_&ofvp%A-STT(OkU3uV)b}v@F&ikl8}hP@x)9ba zjSV##d=OMl?D_5r*)jnCGbQZPCCoE^!%uqTf(h%p!%%M}Xq^w z*0ssB1tkltR|oFfq*5dzvx1{ z{@B<;PDGLD(=6MW=(g4fr`eH7x)-0UA-1 zw)l+GLEsx3{}77A9KSQNFT_BQlFvVHw?$U}&%A~-Xri}o$GQc;FHxRvH7q~}#zNS< zNWQDii?N*GTO9>DCOnAF7dw~EL1|K57#wz#)2NR^(vBMQS2bjwtw`nO==?x#klJ0EaNMJC zwn2eh0P#Wy*QgsS9`g7R4#Y}j#K`_`Iiylgg z!1Z;<_-Gg~A)5BH=+ngjIsZkrXnJsz{S!=hTxAkDE zLb$+puxF*`DMw5d z^Fsdlp(cWq6IHgn7#EmkLIFgNmY2@(8I6REcDN1HN1wXTa1V4|j`va!h2f|@Lzosjv+1ed|)hFjitJ~W)MIn#2m*`0vXZiG3`(TMLcO&av@Nr;+emW1I{lvFL4mZ%~ z`7=P!Iknp6F@0NG^au3qu=C#Zr?6oGiZ)+&pV3xfE#jYB4 z?OHFPKHmRGd1QX7>uX%SMi9_8 zXqdJvfe1U1y1=ayizG9nh{2%2hgSy>UoB<(m{4h4=nfOB%au7K1UJ0hQ}kqv8HAF6G|__Y1gvy;65$ zH=o?_tei-4Br2rH^>lXI+At^Jg3bM$hY)Nh5DPskQD!iuP%D$xphMy}QqfXyn%g|I z-0vuBAbV)Gs1To;8HQ#IRqb@Urdr#uVsH9YtY9o$k-{IbHX=XVzEj8W?w-+DW{|$K zYO9&P+A9~w_dXkdSy!5EpgfXZWlg%9 ze6x@BB-Z^!yFZ&h6|HIgcDkBpZoovE*7J{OL?ypomZ%=U(2mVw=!)2(B2D#BwSI}!z zIP=tcfz3C|EfE_$4jmuKbOMS&IA8&{*n|`^FND!(598lD2)zL$TKU~C#zl=jBxDKg4(L9-K9g z3YvhW?<<>@*o46kb-J=_Q&``ZbY2`W$S^<2^PL@Rk&nQ10;C*K_U?Ysg;DN27F^y~ zI6U35UXR_#L);*w%s^Y|Lx93c@Wf#eh(1E3F#LtoKt(Fgiq-Nz6Pv813%{iL8{l;%4CV_SxH>AHL5L zGplNG

X$rWGA%lN%8%7CbNlY`Et8q%weS+#0|JEq%et=`LLu9By9WOzXV}1d7 z06qe?4jD4)JpT@-}DOt@sJ5uE`QWR z&Tm##O)Z$^_&3s84dYh72;ZfbO0p2WbM*Tnm_To~tv);tahs6|D2uuzYSzC>Y7fg@ zcs<4fr9*){4-U_{k3@_vq7$-p412)$#FSJ>S0!(BFcipCogy&agA+NGvc;B+ma+ji zUxX(M3p6H>I8x5X+D z|A0dt*UdCUN2Q^}Y z5B=!{Ens|!cL_ljD?r;;W?+mSd66qm&?e8zWhmsA00;*s{=6a5DRz-A?cocpid@^k zy#VM2MFcs&u(YiR2g&1fM;54J0S*9Q;(o?^ox$u4p+b$46c;M`OTITM&}tD{06L%s z3WkX6XS;r2Y*p<3Jk@(%na^j(+TBMROjyd zU=z>aJO+PL`@#;@AIb7&DN4^*EY$)?DZnPV3#P3)9Yau?>zQLuJXdQ9ViLh9x@C9^ z2m-!Dm(){^)%D?V^=j7JZ!1nOS)KO}*&a~22nEmOY9Sg!$@4I2KT~Ob)ureLEE@2m z(sd3?kg!znjUfxuK9RNUlu}D&Zcwvsd}7Ul>i~tg8q{Mu_K8r7x^Bp)5X>)jnVHjx zp$pOvKil*Ld1^WU0NDf6H4`^>sAySk6$nm-D?!?BVW-woxy!P$lLX12t>Rh%@EaB7 zy=1!UwzN~5#6CyiBs;0|a-iq_(GkdAY2`Z#J;DSU<+iF;MQ+M)4DVBWyD+oyq7Dzx zQhbG8>Ej{(@}KNSKgwU)uDlOtio9>E5sxyHPr?ALYQAw z!uGx`0Jt&2FZ@u>F$tgr{&rF7RPB*ZwB7W!>~t9d&KwE3R~a(COidg-^%=39Wk z66-5e?FAvMZoWfhF0u+r7s$l1$clRISTZ5m*Ui7&EN&K{hCM*2=qKQgq4s%V+q6o% zH5akZWsTp(YU3;=)YA`T7+sIU}pRN}5h117*H?oj^~de?Apb z3559Z?hVW;+DpYONc~9AR?gjvNAK9EsMw)%WhkG1Q3y3sRJ~DGoM6-Hy{ndR6=z)& zQ9;(WaGL$5o$?bf2KP7{kVD1bbrc+>FaOvd^t0Cd|Covr-N(V}L;vf+!q_3p_11g3gh6I-q z2c%pe)aScNJNkk9DDg^;+!+j3-b=NB)z;nczQFb?Wz-|(tFeo^#3JR^gaH`7HJkY} zj5T^J?_+}`WC$4^sYf3g+$tIYgSC}-rhO%IE7u#ApBGoGAhgpKy|l!Oak%h(0nREL zX65ibq$!u1WqA?oY`iZlUgIbbe(Ngb=Wj@u;J2yA8rC6IL8y@y6E?Exruz~Ylf;SR zn|cv%Yf#`32WEFM{B0438Vk#ym$;kQD?Gvw)>65F9j+~CkJ0v!BeFT^E?sKU)JGs2 z;@5>_g8s7_#}a|WR6dj!y%LZB3FR_KrR0&|7FBwz9?Ut}qW1H2(wSn7Y55a_f#TjV z1}dJ(4$}$eEcOEuPM0wa?RBlQx%NfiL#!W0=c-mT4_}2{F^{{Rq{a5n28%5TpAFQD zpJ9;o3T5~nbd0O+hgH)^qcYo7xE|*LRNp43=AFc&*W>h)pW(YHIH(nPI%P1ZX&}Qv zFav?(9N>~^h|+ASoid%ozvc}4gd9!(z@AzDWS&mycm4TeZ>{JeMTtvbD+k)QYz_4q z5S>rVzUHoKZ?cY$Q$iTy4^WI$2B8Y?jmCT&LSE&=zhd*+2GB2&!w!uB_B!8T;$y2M zZ8RP%U#|Fs>GQKTfQ~}G!$3SkB2Vrs1p7+Pp)|k zWJK1Yn5CH}8pfi7w@R%G7Ca=?%I8{M6MsZXgC7Lv^(=Dxoar{-vfArB<>LNgG}B?7 zdBButC==t<?j3V|M8p3eLU~pQBR!f)@^0;>$ z$TsJ2Ks~TP$3) zUU%Q^4M}vag}v^p@YYDJ3Fa$RAcy?iey=Iz`!D@D-ZcwtTL7eX1t76;vU68TJ^;Fq zS6lfrh*xSdOt(q0{N}MN5JdjLL=-zDRx-r7Q9R=|;$)26fQrMb`BM3-g4D8xKbZWC zhhDKESWFc2aZL+-^<)iEC#*VZwpmv0#qGY`sWq4!e ztcTHwDzmbN7W$L-w_h7XRL{ZzMBge>#xra#3{1Ij`PjE>E3b2IW3V+BWok7P^e2z5 zA$0KxzY$B1pK9OEfBM`o2r>N2&OUS*m$7B|3p#3Z+_;l5jX{MuFiE&R%hf#7PxqA-ZD%`n$UEHF3gvjNJ-yV0-*Q1AgCUEF+kt#Z-FpX!FqbE`+u} zGx?EYFD4YIe@c!kmz>%#7m6XO_(J9tpRa}51<*xGO2G-s8>pYXab4LZ??~Bc4I;?I zcb{5A9;IjCB}$Z!OOiYj*rE$Bj~(Wpn!J!G%vc1orf6gx@n4TEL=#)n-f`!kaMhK2 zVB)$V?>=@}_m>h$9SVz&$_!k2f*a=_#UROiSiXW%%G{5~ixxOwgcbEaw;u1`^k4F~4Uu}JUI-}tuS`lUGry-wIk}QO=p2>}{1H9SX zVC&QWc|#^IG6Y&^*#gJcexlW9K9golSZp$dULWIVwBVg&+3azsMitOC+98%(ruD3_ zoK5|x5IS>X>3A@$qa=pHf4w7&l;(#K=evD5>-pyKWbbuuS~{UcPCfiXXkp+T%wqC& zAZ`uk+DrE4hB6Vtl1CxYJLz*B+5iyh1cW_1_ zxrR^CyZ8W3%D1G-Yq;U{ba)buD$_7})CVUGi{QF2(i*}B5z26!b>`F)$0biZ1l>7n zcjV_+fN=z)6d8l;v_--54X1*7Jiam$D(WDvCoX7MHxiOhn2!nj&DRrOTn(ue*BmC&-eLuf-BChdj908Rz5^h1__KbUDX9+b%&JC;?3OyX; znJQONk<8V5B+6-u9;m%tURg-s2*wKH)r;Fq6M&%mk3Oa9BzX_9lQ*ZA`P7hA`ti{_bI)ekEYBwEAmlcX8R3=>G)vwLZlVV1J zlY_~YO*A{;E^)!F$RR--!L!oGI%8T(G)DzG!{~-|M`~<_<~RkD9W~xtB=W83w^^uA zd5DO09?s(PLx~rwHFP<$lc98V--@=&KA#|wuQNNipuDkfPJF!hogxy%P>578~_c{uN& z=eRd)^iGXueQpIzq;~dxNrt5q3n`_x?Fd!v$wJW8oFJ~kcyhjcrqs7PQydRP84O#; z-{D@pQLzn{hB>B4!LP4BA5r;)=h{JpeSL1e0p0dYBDjZBH6EAQDgoa~-$0!1jQSwi z_Z<=6@v&*1*@X;Fn%~!Df01@k!)t*3g=AS!P_dNJVJ>{-Hih$QyTN;Ch<9cUEGUd- zJP;@Bj*N8L_&W-k?W?4BtzWF@*yOQhBIL3odOyn~!MW;>CE|&O47SbzNF|iBsw}#rw#L=UL{KU=$g%*{HAUS*ky64&1ENunT(ILPa$WGL z@bsrt3cU}!+i>MDtfc504gI3OG3q3hE)_!F(EHlZ54-gs#?>)ma>-)NzyqEY&`;wUcV+4jMHY_+gEhE6 z%zUqGX=92L{XP>Z`_OaN(GNeNOtv+pwQ6CG@2EuqOQesfXL?({e(g!Zz@zA-NHJe? z)YGfSeFiZhV&Vb`3-S;p=fVdG2Vt(xv_`_-Qo?P^u{&v@ao$-8cx5@JPMx$a#tDd_ zkNX_YtDoOY{_vs=idkV^_PQXxO~Etu{RFCAxE5!(*P&Q5TbJmm64Su}F~nqJbX)Ma z+5enE|K1j7qV=iQd}_V9cIJj`(^ZVeEIAIB&5HLRl26&%R)j-*M2kKC>-A6Im4l^N z4vwMmq3&m&2NZpAo$-#3!<>b`NTNm|s8Gk}Tu09rYlUV}H_6VI_OMAz49q9Lc|+6_ zg!&qgw#0J<*vl*r$AGl>^y=M*DZ|7DECz28^dwaUQib7OW6|VN=M@0 z5M8V9!xn(|U}1H+p_almo4}c>!#QltRPSng5v&Nt-0N=c-`{i$5E#08xb2ZjFCm~n z8TKs{eQA{aIU5JTUkE9$99}9*k#(035_PN=*6zIvx!mVB2ipHoQI^uebB?V0J-?yV zT#Cnv8iC+`3fJl}u7>;ucwZqEgbq$wchomfogFGJ9#)^8;WYzs>~%%-$zg^w9Tw*c zebp)Yx1h3;?6khlgA{raPBP0SbaCP-Y{dOKa<&t)T@i<73s1(D5)%v2}u z+iYGT2cS-@Ovr+%RjFgwpxMdBoxum&1wX^QI}u1s>|~ghSuHlLIhH$^`u8qF6+a$U zQ7^@yrh|kx)*5>Y927dnT$`~)nOLV84hyq&zOE@DPK}*M+XRm3>DDQ9#}kdGPah(E zdjf&0;tymaBjUch#rK2!nVY`^bf?931VHJav-NL$zQAfQG7%xg%mF)5nR|XO5IEwm zUt?^}cQxA;qyUylXQP}jent8+CabG&W!1?JmDu!10go$Et;#cXuOoEnO%c!)N3q97 zdw0dlZ#Tn|Tw%Qk*SWx^TQDvy~VCzGw9(@O?6Ufy88AU?NFPDXm~5(^rI`wgKgiJ`Xf-Y(i#INI{A zKzVz;HwO<%c7yNXxG&ELC1Z^ zEb4yjyK!GYjfs7BZz$_tgjgip4@QQ)nonIwb%g;V__N}6v6NTe;+@QXc~q4=KUfg9?sMQMV`{;)thMpQ?^yQK-(Ld~lB+u2GkPuP1gQM4|E9bi;Ff%;qI6|n@ zmLEd01c=`q>Kk;#NVO4~NkT^ z%hWs!V;JDMP_<{TGaTYzz!>n#j!fvh-(DfkeX@QK|771a;wPRH=vK(DFY%R<4u$g_ z?a<%av;Lr&zLdRCZJm=Yi`$4`RAM7{_zNWqqb>tvIdJX;#~7L6sH2bD)6Yh}L```G znPd#ZQEcO@DUKDSG-gwb73v;P2=ff6D!eO`O;56ky=L73|B77U*S<$S3nCy^cyfzo zRvSTzSW(~X z?498BAVRy2kB%t2xLUIbuRT`sMOg{FYgJkW zZQj`JiKZsO=$jrM)dzSl8vv;^HB( zHrv zXUS&?&nkAN68V+tCU$5A3`};=h85e>$#$Q)-;tN_0T!EKx6ze#nYi(;xw!UfK%R;@ zFbccGYm+iQMJ6`BgZ)ZK4*S5i`PgK7CMs|_W=CGR0srwKNwpzAeUgF8SbL0L^0c$5 zKBTjzNA#I*1jz2;2_JYQhK8^wXLY2AQnCH85`-LvLeid#wcLfG+rmf*DgTgfPNmx) zgGx!p?YfcZZ2bjFLf`pklwqHx#e~=LWqn zYWf@-w$uygTGI3evRVh8{v%$`12cSZm+^yp{Bfk(^b)EVl_?aahLFZD9yKr;#kcE; z6lR6wo=Ix4vCCys`JdbwQu*#_wh8*L<3y0Q^3;kN?0@h-F*f*$P2M&pX1GVz0%BKn0e($1HlBtQwhNwU4i!MW*FrVU@9 zT;L8&@25a|*7*a+AY>mG{!^)BCMAQrP=eT!uPiD?A7@lq8oO^$QW`IW_$vp9te+Nh zdP0?{taribOOG-zk{e1OaCIaJ|2{t;&(`LhAwj8R+gca|l*`7E?)&a?s;z4c3i@x^-9Xe)Z=?NQ7fR zCnU?~FUr~x&1tK==`W15L}F&yh`Bj{`95r1NC-##b4W#@p`{KRbvr#+U;X%#HIC`V zgy3?m?FlCry?~g&b**W>$LlWA_JRKj;L(7K9Ki!3A?Lz^Bo}vKTe- zwB`xjVQ2=Vwu_6M$}cWJ4D+CCu$Qc-CzC)A>l_8Qo@*VPP&sl3fbGyqWG!<;5o7-% zR&6V^wx9WI1V$t4R`nD4Uf(pmrksO!r{@iZtH5 zJz{K3(3tg$wz@WOWwv6Cql`URnM!|66qLgt+6u#<6Wep|{;w0m?27OVh#=ngB15!i zYxF$MrG9da)^DkMJ2m)x`&lTUX5=&?O>5-I@0vWnpt8Cf#0#w_a$&*2y2^!1;d+(@ zYNTzcj(b>jqcUq;m0}iKG2PZDml&<6!C+%LtT%#eId!ScGfHFvoPx5qF6BMKF~Jkg zRVTp%1>CA}X{#FSXO}^In8LO_zi*sr0AQJ?&AJlAD3Q$9Qf|ienNQpW(Ldwm1)0iN zSR8`tl3UkQEhei=Ni z+Hv7u7s6USYQ2-U?rG-;Y(X+oifi<4d(MEx7@lK|PQ8m*{qx2;yaYLp8Cn1Xqm@Z1 zy%imlXuS*0zjqfcAYCBinfR39HJa?AJD$8otfrqh=;y@b_iO97)JkvY0l5<>;?#gy zo_S%=*}vV;+B=}A5Ack%J)&kBAO@oJDILwbvg;B|T$zpp|IR8v0Xz!ofvcZPPxSfk zvpMqInhdFjiRuFn;w`ftNC^pfcXCb6N}LjMOrY^oxN#6vu}XX(23D*m{{sd2yxQ_+ zYdp8r#OTprGXE$DGNMF1LcV-G?hH+z8;*`t*)dIXw~YiW!VOMlv&o)9nnd7 zqZ1EU&}%P}x|7*kG8;CUIj8^t0{}@NtLP(kOMX%~I@S;EA^AA~G&TI6-^fH=_7w@5z_z*og!)P?Ot_9A9+YvY zO@?!29L8HOJ^-*Jhsph@7!>jPv)lmQYOFxi${$2LZ~dfnWIHGTVu2c`P#bLE6xo1{ zAtcqZ5i8w+rJn9 z`)k$~rD+szGxq*nS64E!g(c{fG{1VYDgrXiz<`$}Q3ww!Ct?2e{OrI|XdVJArcZ{* zDw;Ho0k2ErTQ}|TbCpxwqcblN1p3?r3)v9J{$jl!@e3~|C!cmra^yUCW z4=CzNwI#?3v0*1q-E;ZJHx-BkdfCWc`%di9I~bc}3u#wcS!(d_Z97Qm5JX>KWZkA& zFcf?;qfB{)%hqTk7*3+mHc}I?Aabkcp~an&_bW*l@A%<~{kTLbiNmkJdJuzkmA%?q z8ajT4@)-xCTUs;p-YY*rxtr#RakKcI^Y71Fr!mM)jV54MXs{6UupmTr~h<^lJkM{yDG(+nBnhWgL?54be!T11R1#q z#`@h%pq!p7pjfBcURTV-OX(A!eCr-*r!z}$5Du+(AkeW5>1hn9?~8N`WzM@md?WNN zf_b2cQrauzRY%`eqgb-`K;TSh^v+i8vzS}lw}+7+!zOYg)Lmng+>5O2iq`tVxKaZy zFyo4@0|veO8w)^`MmJ!6H8bABp-QWi6JHZZKT07QXqg)PuEHG!ZNjHu>lRV!Ev+X2 zsE&*!N6){3T}c_)2yndXvpU87ZwhV!?J1I@Q?kfRj@0@vjB=S~{FneDvzYZI8Y8Qo z{Q-Smw*Bc<9z>(+yK;y2^6pR;Pqd||X7ed)Fq`G|r^_6&x}!}(tN+rWHc}{}HKxGI zMNGvGg{y+Nru4>gx%nnY^(>`@oc9Jk3ZBmh*OsEDPN;LJ9>FhU=0zp#&oGD4Cd3l` z(S`fQKe9{|0P%>S8{qn{2xZKyX~N3%+|=^(vzVlO*dB+0XT>0=u+{x3oqsYWRz z%J7jY&2#tY?e-d50nMlUW#PVd^0AO?MeZeAV9RX=2y?@)i%7jFZ~U|<+Fu{ ze(Cl{h%#qq7-b9jSRPx4tbCEmNTHP-&PF|%5Y!YgUFulYTl1txyLi{p z3F^OEEVqSVtursq=w!gS-1z*%YtMF}o_xZH$FyWMjJrDJ%$oo_F6yTe|K@+VF){N=}T{Ew{ zwSD|QD0zVuXCKVCdJ40%y5jjxG@@0$=W$>Y0R(QVO9KXA@?G!fff)`g&$a|MOJNiIa{+@pNZ@~NejYQm zdon2`WH@vVG5&}y&|SpN)NDJ%Zn*o4|BG6~1lPVI<`S8|X zLUUDE%1SdTGqh75&O!0{8&TK7Pk!}`gYZ&IEXvk2uA**`CJ z>zQf*lJfsxG}}Z-DdidfAN|FHOv*x?!T^E>cN6mM(?I`_=iv)c*~isnJm@g)vy(fW z7D&H40Xy->h}D7IstS7~6e;!7L)t_DWwT6geMN#v9OpjF_nzc)Ki5pV!kXd8q18qd z>)7ZT6gucGZSf(F6DCN>5lm{hBSZ$^aRQ+r+K0P!0qA=L%UMc;b*Kl45T@RIDrtwq zS|+pK4T@u*Yr&*KPx|Ufve#3xCtWodU5LICTXgiWr}+CS-hO@Y)T1J7<8YU=_-M&#vNh+IppCOuwAGXUO5IpOh-ECn6v< z-dyPQpkhNj19QA;Wj+7`KSF2k9E{L^J(ijsP3-plPxvp_u3!0I{8S0hlhFrSSsp?4 zGP9=Z6?oPT@AtTcGC}UTt_-)&0wR`4Iaf5AH+L)NgIw*t#2N6>e>kt@dGv%t%O`vp z8#{)4ljynQBFLp?7cB_$18CR@TaRYno(G}GlTn2*ODxkJ*_eI+0|_Kag9cs?o2#yg zQ0o}I<;HI!WK5Q$>*rKz!vJHS;lE%=kv2Nv3*2IbM+X7RDg2V=)JLM1eKb$^`hs;M zpZVYQM;-97mRM2S(O@ri+!SNcm3#Dz>0M0vdHV%qib-i1)Hb%r2jR){98)Lkh4### z=a#(=CITR^Mp+-^~z8F9Q$vGOUyn9 zQQWcKz7=SWnh|&9oivX9xsSWpys)68L7(HfTUc zhhB0%@?o`0-LtWy^q>5=_Q^(N{W3a3bGZT;YjR)tSx?jP+TROO4xl}c+Noh)p?hG* zu+&#S<1PqQTp=z-Im+lW_m2QsXM_2UlY(o|lTYQ-0~=wpOV4%wmaMgYW!)Z@$!nK? z;z4rm0FhvDEjS|<6IF7`Ayl>qP8O~T>AC*c=H@*$A;!*npf@XO@yQ_$7i6oPzqjYy zDWf{PmtlLb;#Fl4q#_JjK3bQmLHMC7LkSNdhjg$B2$V1s z#cY|pQU_b5t2uWkL@rD|Gf;7QIw- zQ+7XHLH!4-Wv<-WlD;W&8Zi>0%B zh7nt5|D{mWja#d_7fd_DFa#du#V0kSabMcU!de+)n;DeWZ&2e}S&>xPaKa=509Uq2 zRz*~-p_U~~6(1Q3GsCf$&XVEp65sdpDjt70WP&XIxwd!VPR6CWYG~-R`cFXT;-fxn zG&c_7Y>2%-1R7_yHzvRU6@kW|!qjUqo0}5$FAA?Rv+(;w#ku~>8ak$y>Ht31>z?Fu zr&)tEur+mMMxCY=?5~AHeD4SS$nJ@ZT=xlz2XN(>r<7ydecTd?%MW$fQE)XD?7M9N zX}}K%EM|-1EV3c(*NWTUJKxx@0Q{TaGLN*lm)ACKCTLMHOp!K5Nw-EKjcgvIIo`yx z;?O=cY?GOXnhu{qY4kbH`0BnKvqt#XF&o$bIrM!b6vss9s7Zx~P^!P*Zc6NB!U_kW zufG50E)Y76k0URpu^p5fn%r7c;m-LLAA%zTJVGeN03hymn^ZU?xR2D9n8GFP;1pS5 z)RJB^YLj)mTqK1Taf7z7=^Rj!r24mSj<2q)+;c>n_ZFy9RS6^7=W-k`wEM)Mzs&je zwP!51u;OpD$oQ1wBrW2UQol{hNW8(-r@t?$^Rrfr;K1Fb-p+jx12_tZBEr>^#3~mF zt((L%J8pv;DiFy`D%U!brp7T#u9C?>=yH{RP%B4WWK=u-4)DInr1?Vt)q3`aa%@V} zi)^&UuwDe%uEa;3<}mSD0PGEr89$|1JGu^y>7>Yt`i6;FM#)=7-~}Id>ao8ZJk)j6 zSY%8UnolMh%U}`Fc}6Pah~;D2#Fd@#UEQr2KXtkj@a?sL_^}~H?7rzhc=6%F7`cFW zPWU2ps=3CsIrBLQKiRXy_+Ik@>o9|WkreR@Lsg^}{XjiU^LHmqGHE4Sxqbb zgxj@JC>j_QN1wzZq^J6Oh6-q<O9BDrA$MOl+_Gt+9kgu7`G-Tcy#ipiN?W$kHQR^VKaHfa`U_IKOPq~8Mw$6_rzXa zPDDR{lJ`nwbfqv&GDrKiHGJUi=g7sD{H48=Tvnq6LdAkzVV-y?03nyOGN87BDkVv%!6Vkrpm8VeilQz7Ake5t{8M6gH{wv| z7Qe%L+vYMx>RO2yO#A<>XGv75NdLG4UEaJ^K060Xg29o3?Lpg)!BQmo)}}bGHhb1D z4T2uP4)2q|{WHK(1IEq8vQWE(e(@&~(I?AA#b}Q{%fZ@8A|ibthSmV>P_lj+rc+@5 z>@Q3k1y`YCEM)(Ft}_Tp%Wq%JDcY0&lgfawtq&;UncWLXYPH}&f>j}ZoVm)b1hvJS z%%oS8$O%^-GLg;tBfJd(Dhk?f78@cI0epB-loC;c`q_hS?9pH~V^9b8@r|lKHeMO3 zD4$kTztoo*xZ-!$7`r_c3Erl8=_%5%l&duWtDaV?34LWln^zGP7fC!%bnL1rYZtkS zgkZ1Uqyk>|!JH^aT}^kVAB`d?Sx(@C0>x>gaPOFXx#$4$?w%8ElLfsiiG{Dw%z{uD zs$kW2hHV_QcTE>VLVb$A?xfBj*GdFJ`AJp=)1{EtY!{5qfEudOOb}qo;>!6Ax z05r^|Pl}=IBKo4x7e=hDi2yH$=Ne25jjXQfA=xXs&*{LKKPY}_Dr-@A6eW_{su8I0 zjFw9cOK)0?#1N}RozVQ7o7S-WHU*UW?qh{@W3SiAWsT-&xVVRLVmy1EK600m4q@@d z+nD?YnEOG1dVFF8ezl!zMA(%p2fe@{x=~JKlS72Cn;gDGPFXISm|k>lRJkFq1oW}t z6k>2npcywXy3-1tjHsZzoLVw{<@&eG@|%(Mo+}W<10WLrVRX@fFOWwtyNR$*wwH64 zJ5K^?9z1WpEv?R|cJvG-r5u?nL01{C!mi{rNQg2VdWRU@dS7}S#7crIKw9eOgnp)9 zp>dTjtlD@t-@EVI-J;ZtwGPL)8!HI_00RJS!!_;?U$PDg#g?Ob@cLKR4)s|FY+?MK%tGyCTHatNaERav zurmWjWAadU2rFe->2Zdqdae9Z>{YVDhDAp97aiUpmW|{;r}TjB8LBRm<@V43ZNl9t zu2!TdFeSSu{UB9YgMa`RaI0}shB$-&UIEb(`NqIArH|*WMQc=T)Wo~rZ@2C*?W!PJ zZ=2Q(LOsCAzwlz2_HN;o_OQaeKl=dUdH09XgevNF{~r+IbwV*@Cf0+U0DvkdnUx-* z`)Eu0Vy2(wb8Dn97MNLu&04Ua1Wi{G&a|U~lH%T_DKlG=P zBt31Hp{Q{E1K}0m&ryC{cpF z6*vn*+ElXal{MG2+^6OqpY_kV0qpqOp{oi!kbO8IH8P?PON40NSpP*Ug_{yEmfWD; zD{tQ&O!b5UB3T(%cee%Nh(N9mCA#rIApH^l893$zJh*m+4bL&@%2Dr4cHsmg%DCZ| zpqHw>`HZji-FyU<+-r?>&DUBi(GY$uUJ)bk(;MZPLFRn}km)9hG5n+TN-ZXSnm>Sq zAvE5}TeiRs4}1~t()V?qP}miR-W$PyMx_)yZm&z6b|Oa)2PfF$CkXOC?4Ka1xph43 ze&#{vXx{#s5Oi~sfb|M|=S)IS_hoi=?$m$56|Qlnx<=we;IMb3UOu;5(vyO9Q?uye z)RZUDRqt>(2bqz!rpSXB9K@ZhJ$=D%8DKS#aZt3+=+q_qkb}CNx9hNfPK%u*#1<6(_XSf)h@YXhxk)_x3}naru7! zyxMjV<37f?q9_7DBOJ->mzMY)1h$JQ@T=!QZiqM5QxsKBB}KwvKs@Ti&FK-#8N1D| za#v(b4{GQ0LuB(6)<^*;C7r^o4X=9K|L!gx>P^kYUQh{}mOT zzz0HA&bw|VuB%!e8n+{0msA=Ke0#hC1TlV2^%mzl&n$Hjk!odbK|YD+KoSIU&*~QD zINL_fJ6NkG{`9S6{zzs?G9hExY=5W!|M`cBieOc6F5M-5m0zt?k_~%aiA84f zBM|(YRjHfX6X)edye7k%r@22EO(74&85^qhc%AFWK8rR$h^3Ghm_#3Yg^Q z(}0cW=TjP=52A1Fi{<$yk>u_3LBFKcrV5Y#?B@G^!1C1Z=lF`z#H0eQ3JK-;yxz~Q zVHwvIkQOd-rCnFI*Fg9tibxX{t|_z+N}s$1U%;5VVoAfrM%lc-;D&%wf;vthw?@Z{ zanc$Ho025Al!?=gSXU`A6W-QdHkPl)c!56lh||sXCzLP-=3nNql9Pf|EHo?^wmaT2 z)~wOSqzmb`GZmzd|G}4uUS3HV4lBdx4ob#wnM*pCej<2#0gnZ11jS`DysCnQpTq*2 zTRUYNQyb2T{WJ4}{ywymd7NAjnU&{Q$ETj!9fgOZ*37)aZppy(&b8!BvQZtSH11++|~}#KAF^zqb6xXDMGos2bG@ zG6q+NIo9Vm^Lp#<+Z++Tqp?SHRJVu;BDN++P!H$&2qa2JYFN&~%Fg_JkPPES#g;Kf z6=@2F(S}^bnag=6s8rfSyql9g{LZrMK_kQl;2yVQd3U*H+pi-x?~>7-K${i^<552OmFy}Iz1$HcEU7=a)e$Rbr9xt#vQlgfRef{U$CF&$>n66LuK6h|= z#17&J@+jRAgNV_AcqczO^sPlw1>&6NO1i9o-7nJNJvffYu?zf8HdQ3W>~u$IUsIn> z4$}8&;{a5t7Wb4&LRK>tjmP51(aCVZOJeH;0u`_mRcK7T#tFQ_ zt@ijt(ECrvgiC>v1EeCza@RwHr@e-!3_0spW zuy)J1rhAZF9x=6S7)twjy}eZB;oz5qDDU<=^tsxJlovMeu5^9aZ^U!1)vaM|T(;KJ z_DO%?Mc(&u07AxfAsI~nK#$kFPeq3)k%bY$&1=nBskyekSor|cc9~&a{YU(B25oY@ z_qCBKM(X^qib0~I02;cav||Ob1I(hz92D7|#_VJO0$lHK0lSaCIUO{|ts6t`lFDN` zCibYw&dE=c0NXUGMWxb-{a00NuIJyn4$lGY$W2?Vqs8+8G2Oyh(QX3515gF*)Q9ne zhhFWlIg?2NLJ1pfsK~hJICk}+3vhz_#han^xQ>GDjX-G!t?D9(wcv1l6lWin7ko%+ z3CydG8}|fuLtTtrN{FA(H+~H#oDcDi38ej2$~eTM7^p=T@n|Ug?>_wjw(N|&>NLmY zife)^p>JbD zw~WhSkty+Fl|mVZNQ;QExL1}n*9{2fI;@d3XvzWlgmoyvC^!Zz3`jcQo|U|T5}Knn zt)JNLw8&d#vWM)>VhdzNVA4pm%k^=@qf0+O{K4Rih2+YX6woJ_QPjZ!~RyWxXlt4 z8vNW)Coisp=A z2RF(eR@(b?R3VkBLr+8FPhW~2q)rQI9t>=bUR|QCTQP$X%lKmK z6K%}E(DDshPC?%VFLv5{E(k);nhlU4B>Lkc%STNkZ&dDPzoEpmka;wty?KF@iO9LB zrX(*7czS`nd*QGK9s$kPVAh{S)++5kdiz0pC{bgNO@d*#XUMjZ# zROCAnkDZX`AJB)2_b>HG62^TJE0c=&Btb(r9CalT>Gp~f$#?8!Ei5f(Vu4Igs zg(t;d=cw|m^Fs_T%2>rbGXwCa4kle!4@0ZOH~eGK3ykb_0;zr*H(XX+uSXu zC0K22>_7~(v3x(UK&ktKIG8Hp96TzPu$fzkirz(WNH9ciE9Wd0C)ieG6Xv#Y+^QVi zWpDyC9#bpYTVEsB8rKFvp*8&B1%_!%?rXX6OloGf6>0>hM};4U_WNYw*}Apl(&j&* z>f{cAQ+tQ7uIjw@&q_bh^u%^Jtas8`{7rA0X0Vv)oR*IVuOv z>Brc$rU9My_GCuW=m4>IhfWCXr8}KMn{g_+A|IKCj*Pq30&!|8_4My&PHH$n`%-cH zEU%1(8~sC}MQC$MQ?A4ovJ+XbOX(xTWG|4EcYWYKk%IA)^FK!65)kBod2G0H_wO=nlC3y`kYoss(tA+T>2`dDh zlfh033EPHzsBvJx&?c&NF%!|`x8l^rwO?){HPGBVubAmfYy&9V2K$!G;eC^Ta9%zd zfS6ZLyY641yI^FQrrzXsqaeqMtUz`l4lmW12-Qrc*Jq|V2= zJ(*>(>d&BY+c#=B4;}eJeY%y!oQnc|7H?Q~&vpt*n5fc0t%zL2BC8pQMWU+!#o66U zNfBpGo3QovS48(##%)VPn`xw9U7zr}VR7u{k)L(ZQ2kF)38q-(8e}Ix z8&R5l2JnXBY<*3m1_Q_xDD^P5u=8d> z;Zw6cVZ`fnYX^`3mHb&bs^9Btc-5RB)66|pcllv<)!wX6*vk%qK_C0xy+52ee- zOCl^wiO2%(*R~^3L(+)xR9>%5%jc);RTJSf-#QKyLy$tmTl zqo*4OoIwu;n}R0MYOEgjXofcMm+DsDtxz89J0|?r9{Ybv>h`mvg525fk-OEb;P(gy zqW3BE|cPA}-+yTx{LU0OIg^Fjo(NGPW!fm@D#ppWoDsSEK#+KC0}A z8y)Wz9N3gyzh<++vl`Qp7sovL*&<>T+qovpN?uVv+*V7~vM@Y{3-^?%-1K@HoA~~r zZnWna&)q{tuSvNXrDmoXo1vt=_7 zBZ9~WcF^4O z{(e%#wcA9m4qiHjD1NcwhfF(^F`J9cXwD*>-pW&W0b5{RCx8$!KI&O(e8<(^Z2I*{ zapKtcmdadT_&)5DG3g-w9i)@1@%t7_^;=NZ_mQ;PAu1pY=mS+bOV;z@{O zy;tTa9AK=8it9KmVZ5$-J8EWN00Pe15!S(0s$QfOw+K3tHFWqWDQh$S4SA$s6lWN)S#*#6vwYhfh_l zmRVq|6nqR*eWhCfb6yQs_#;yb<-03iG=`}`Iggc672m_db2rfymSy3(fsW!UH(@|c zvL(Rh*g2)+_22snaX+U-V%P-M^>F<@k+QTM!Lm(ZGEJtI_vDhACslw z{3{43Um|UC!x-;0!LDqxP$6;IidGzKHos7jCPBw)$3_QVki0ETT_6JK)qQIKX%a#p zd`uG7LqNEt6cti`wy0JvsP5CeNOMtOdB4rzh?@jel;T}ov%zdHh=wt6_SPNE+6%x! zlaYQq)j_=68@gvodiPCxi>{t9#2uCYGa};m0lNRA$5wRmu7S=bY3u&1z0*x(bpIt+ z!x?`~jms`|5%d}x=|XI|KkP-e)oS%ic>Fay=#EzLgD}Gl+YZ{w{$lx~<>N1F+wxD5 z4c4ExGuI!1gr^UGm>ngGD(I#r*%45z0u)PsTc_(p=S{BXI(3=^u}@`vG@Wj-Z{vkSP1)HJn6uB8^!A zEy~Pg^_(}a*nHRHiHf7uJu{Sgwq*%EA52&?VcEo0ooaKf1;LBG3pZxstUetbT5XvGu|ie z)WlvQZ!L2a{9rUIpnToCDuD|=Wy|>axN{!rEt!fi0`7fvKYJaGEE>ZJbNMrdWSr~U z5csLncl@B7wd+XEAbde?)BRdb1Xb0_69DG;XYI5vW`mI$8=gY^O4HO-U%|Cd%L zj=$pu;2xamW7-H@4et8jRkcy-x2iF0cG2$Xa`TN_e`16m%y!UIiDX$1nm*LU+}HpH zi@%%_?91@IV6_i0&{or{5#@Zc4fiGQ^m+r(00095L_&W|owK;Esi)2lw2_`B-qqIO zD1|yt2c90EyYw#J@$Q7X#y$Ql5Pys(G9ShK1y23~`Yocl<^#>2=l}o%00093_9M`4 zEqfnfH1_cEBZ>C!s(3~}oYb?c%tFk9t;z}U@VB`eItkw_1LoxMd>gElj`PhJrpH*w zY}^0O$XA@8+E3Gf|x**=S30lV*kAgKkk6$=?-WLGOiSCZ$6gkS}jN2NZBToUc z1ko6?lAnl1*1a>2?RzDTB+t>J5C8_K@li0o^1h}EJnqggYp4wKqjlosSQ{VdYHUaR z_vD5N7uG)k4vK&e2rRqw3}<~IADs?cC*%3QQXakCxN1G!3_AaD7FNC?{@9fqkSAOn z6iM}8^sSrzRe-;I-?P5EmpA|bto7fPa#KzLE)6JF^SeIJkq`p0C4gubOPtE| z#-4aUC%auwr?Q01<>_UQ#*f-CRb0O6Kf|zfSokHsn_iD1u>q8@7ckv4qn;E1jmg~f zcHrm~kBan!5&Np;0?F!s^F2pG!io zRUuLzE+4z#Bn*K12~(S>Rh)F9GDSQe%znjf5KrYO!SM&JhnARes3|_T7-;8^*ucA( zng+&{XH{*{DMl#U52mpoEadAgtGxZvM{$#^R{`b9MffH_%0SfgoS}B7Jk4qO$v{cB z=Cr-xZfK{7!`>3g8$lX#5KMDZ{OBs{Zw*KylPeIvL7#pc0s_CWrhSq#inS@qd`QTb z(70nDJ{SH1+N}WME&(=Xwmn-V55A&eXcW_!dLO&3Kx|0htBWCt0Ljxxo8-bE2Os44 zdYu&f>F>IrDmc5SwursYmKe)nTLEX2_)KB~CN)#)utYg8o0YzgMuF5bcUCv$U#Du3 z611m4ZNurf0eppzGOJ-7KYyD;2wC0j;#s%BVAz3@2}gUC=5N=!c)Wqls*$W^5?q1N$x^u3v-lC&2-w5^HA+OM_H9OZd*8? zAvBkeRz~_}l0L$P{f(Tb(+=jetba3>+@vRx3nus;oI^sxa-+l0HE}53+#AAFd(QGP z>=)5HT=T9Za#Fle=*_>FZOLTY*I9w6R#1HBf%gv^1XRpO(Dbl`Do5ll5qNJ@i|I)ebkxmz8eFlreX-y>Cr4Kmky ziQ1CYXII9mgESV$EuI*Er5r?rBfko^9xJOh=NFrvMD~I)Uo1;1?9VA3^;ZdQAf@if zbq;f*JyP~qQ@`@E$LO@-?qI?fKkZL+vGgtMq6NZb!kz@wj#2I_K)}6 ziHy973L@`a4Pe~&!Dq>Mq88%m*;+)p?M1^ZGJbghed;C&%IH7}_x>V59{Qjfy20#} zFPu-C1u z<;3lq)sYv!88xv957H8qA^tnnUvTdqBzROuLTSbM?ZPWTwe_6m2w@f?d$}RhrTqXG z6mb3jn|xaQtP}ZuXP2-;38&in0*g?&aOfoej+9*!kjpm&`X@X-W5=kWJn#>988_mV zU1=}?)|>>@;?SX^es$3t(`{S?)B*Br1|`R|XJ;=4dzVrcn>%7}%YexT`|kNC)ZBCk zJf3k7WnXM@l}hy?Onfb?eL#CQRpc_j>*s;a>#$TmoKH!I)N&JW4ow4(yD!;=K>ELs z8_lz~&-csQxFK8k{^2of5bqX&BYm*F3NX<~FIgR-@Iz0Tpw2eCs&%?2(@U>UVHf+W zzGm^M=$1EVkZp|hOrg()&w_g1=zh^X8M4%1G{n(Q`e?S0eyJ$KqwaMEXDnAMQ=| z0dp)I1J1%8R;*&E$3lkA$CO{kNy|i~`$8QY0nbmNjnsm&^HBPreT2a@nx(S*Ujc0G zBh1b;DD|HeB4e>$#~a{VfKcLrYiu2T#iie_*`8Z*T;snfiktqHGdX*HR_MyI;bvxo zH+uel$1-0yM8%v~d~~7w8~h>5_?_FPUe@i5Y2}^-(O1VtVg#R&)qV3E%ucv@vt<~e z)Nm14KAl_Q;NLGQ#A*Nlp3r+){BUY(E0#Rv&%ve5o%?QTBJ*!T z>{Y<6w{BJU-;vf|rWk>Tz@{3IPFDv_^?djC7$+=Osx%S*KVfsz|pp{x@Wvim{B>F9W3&h1_k#g9nZ202rfIL*dLw(YmH_a5Z;aHPE_kKE)nR z{|CKcKP3WC+^GsWW-8vJn(q@Vr(p^bgQ;DfdfrJ=V{rBOL?xsFsb zfaswST_(%eOZ(DXtS;!WM&mNCxn=Jyu<`D0FvWb;HfjXEg9dE8P1_7k3x8*Hf+7;R zkycW1cs!%)lSJcCJPnYc1a_Q^0QZrd)YE@n3o*LX$B?I2_3sl$yn)vJlEiI-QHP(nq}u z$YAXL-XKy51ZP1AJ8hY_#{|53!m=*Abhl^VMi-|aaDg796zRo3w++9H*wUtqq6$Dc z6@XhO&}k}1!WQ;i^rA>)S5^>IOijfa-<41QOVQt-A~iWlC-pYLGtt_-_NLaQ44zo0 z$L#V=J>wbpjT^d)A ztax}cgh6#%L58W9kA%Sg@A9V=lkNI@aGa)#kzVKd#rh zccgyk+qy+LU?XCTcpn@*09h$P>}5NhwE3D%HL4R@$_Sg`@o~*@W$rk@Vsz2kHc2>w z_ecL~2YdpqmEVVBXO`BfaV%Q_?cxNC=U=Bz7^%olA;S(l&+pZG!3}PN7>&QVWeo6Q zer8BZHBTO^uUr6P@9rI>$`lBgzy~ZpnN5dRW=k33l0(M9-;PWPnPF# z_ngD~X|hj+!oOV8%}wzGjfMl^+VIV~RZJotRaBR97|{SL`4M+iIB0Sj<`(ebvXL~ytbN*a7Bvplbz zNt`}RHbUmMaCN7kGkH8wS)tLS!v9jh0&I1edyPlA7o#4Oc&VI+=qSjpq-d5~f@PO9 zofQAlCS=1^@#tz2@FH)GX4})a86J01dO?Y7#FGJa9f>)=_l5vHhKd(2kDabS8@$Ie z)2@N-9W0+nfbYd)Qq-ke7Y+#Zn}=dwM#!28&ZpV2(9g-Wck%ml7z~6n1dS!{JwvFk z6re18d77vPw1j8=65*^hW$qiU3lLF3DwwEk* zT0*pz2z$6YJ%g<1*q6*Oe5RDXK>GAr;-O;|E`kEPQfqjO?DlJ-N<29D0(DYX-JuP0FEk-e-pV8 z)D*g2K}A#2&?}KAiV)}h8?CXZ=rk{%`fNOYLDg#Qrb;-BSC$Uit1H-sXjC?c5sV zJ6so-uISm)0(BA)0&1N1z_p*JL9UYSYUt_5NH1iVTOYvYP#|Pan_7V zW*?{hvLSA)4Lv^dh5vG3_J>xKh!g&v0rZOFcfb`e!9>Z?vT_(HRJ}@T{Egrsiprq&R8c(T+H*yi6mLX4x@SX{Sv~QXx?OT7y&K(uQza90cS4=|?XdzUSSf zS^q=wLjAi9Y&)941RkP%>3AMQh_J$sb~pKyM&M;vsU9Y~0XD^FRuD!oYpD zNT6>yg@4XUlQpGbPBulS_h}5t@H2a*HWL0A@+rj@@YOkYox>;i;y}zw^cGrtCzCkb zq{0hVwpLt7jFX31J*AKCw8l-7$vs*6;k|29L@{8ezm3pl_UmN4=taze{@Nvg>c`n` zsl7SEB1BJs=jpOK0x~J}pw&p06xOIyKQxKdqdiz%BFxJvpA}9vZiCLvZqsb=yrv}3 zcbVdH^uFH*8UnwFNyOPvJb1CYb$*_Y`NzFFu60tdG3jy-h*&=|ww8KU+-b<;ZtL0l z`0A1Zb2%BQf=mW_9M0>2=C;GB&2ZOleT-$T6~9nd2EzrKPNMxmzV9k?NDtr~_-)g2 zswFBBfR@%TxsQ_AM?cSu;`V4>z4F<6&KOdKi!$b+%S6lt0KVJG^T3 zQDpH8vXetE>u5;{D!I5=6_+9LkdeMI;_C(_c99N(&+HjD7&CY-LSdVdKKs^)ZU@0? zMC5tz6TBV&m^;U4oMI?=IOP&>WD$3aqC zTZGlmc&l7vKZ}JgG4e^Nz=RGLN=mqfkXMmHwe?jS#^;$79e}lUTyo@UKJ|{i;B~l) z0fXL|DZtXU(F~UMqmsqgz2Jv>c)2N8;xzePlilCh*@g+I{gLj_g3% z{M?5z7<9{cNEpPQ65PqijWf-l z5s@@i&}}&5l;V%Flh zYy=12duT-oI~WaM7rs+cutsh2QAfEWA8B0xkV8zJz%^vG(b=`*P6{S_4E4xjBy zYYyNN(larj1Q=W-5a(TKy(z^brxCc_h zRaeq84+(2|=ind{>QD-ojmUFOOm7$cabd_?g@axL^swr1cOc=wq`cJZrYN81pbGE^5!AS`O(z)BtCe$DmshC(jS0j@Yhkmrl&i zPivU{@zkFeBD zQ=E>N+!Qm(m}IG9y1*_u$;MrT1Whh%>Wv4yxCh*ktOMO0Uw$?*jQdVd0f!gErK!f0S$|dx=FSNA# z&vgt2Xgvh~O%KEql_xXj(EdyL0dI;hn?2;R=z4dW9t8@@##g6Wkv;w*t)d(XMhA;T z=g`mPyDtyO;Ti;A7J>C`#1YE3W6LPv3CszEO61$`|6mQY<(5cG5z2c;{^Eam`(+OH zWGI4Mmdk429!=9br$|h*4clV4q6dG5$8Wz@yR3%J+ViJWHGF@1Xh`0Su4I6=UlDz> zJ>o`bB}!*TtQFC{$tI*SXm3G5*Y?cBpVafi>q`&($=vXQ7)1Auxs_b*49$*_6d-6^ zz_r|+UW!bY__r*P&zQ2xj{Uu=Gy6}?g-n8$=KG^`0lOh~5e){kd5IY&n7#wI#!-32GE4HTr<#sW5-8{35lZ}9V))JZKNRJYuw@8Ph zKw<~s*tb!V@iO!>Lv%}QjY8(wA7r;n!q}+$VT~-zzK&QWtOmlx-`&q;NIJRZQy8a>He|$vRGZrol#? zr=Zav;Llz_=?9qI^mO}NceA-)ME$we#VyRe(mC_CpP3w(<&+olNz7x=1Rrrke7~mQ z(TgYtNh!MDmbM*DQR^hk%5kO){*b}TmEUIafZuInZ^z(sitP4UE8^$o;nicRszuRv4X49%%?uLqB82p_QK6E$MUylT9umf z84H>JoGNKQxj7ygSnj4rp#WQ_H^%o)s)4Vl@GgHm{S=v|E66RGT^iA$+G!{C8oZb*bpQy@?L| z?|o_QQ?mTd3Yk^gq*E7O%3YIxW5B{$DYidZPp7%V1-X6HW{zLW6T+*P<$B_W5T)ia zl|(KH81iiKEjVy0VR{cY3!JGJY)|?Zrkx!Lp9y^-PpRcsBPwBTzpar=#%%BIOh-S6 z+Lamkz9{;jn$L<5eIeWZFachw{aNBr1#pG+O|Vne*rSfGHwrTBRW}XOw(7k~F4KI} z1fq8ckpjBa(X1!X1<-am=pA8Rn=&FSGLOfRowt!7DR7x4b4pPlTM=rF(YnS^pJWG{ zwry4gIpVE%X1df;lZS}KpA%K#|13No9RS^tG)FR38XICj*NePqMCC?Az})A zLPH$-*AY)jFgO@j#=g`_AFEpQRESq}Af^Pi64%Z9$2f%LIO^Aif7z2E*uZ;T!^Y+M zke?xKqK~HNUx687(sApQ@7ev%gNV!|X)poScM-l+LhN+?v3t7l0>0*=XVS|38T;Gb z3ES#(t^O{fW=Pe~@jkh@+iDuc;FuaASTVYQ4JuaF!a;LHUmElEew zqIcsf5Ii)o6aa>AB#f^mc{|N(2cgIW<+<;;2wH$8Ym2ebtv&OY*PKO4aKsY6SbOs} zF~IWSem1w1-pgKMwlMz8y4^Hcs~Z+ltAbfuF5m%PXp*9km%aA|E)+wx#@S1QVEGy9 z_P%b=t;#gtE+1}Fwm8QR!%=K6hXH-A{M#@+YToMLcX5L@10X7lmX z;+$F>jKzIeHgl%55l-sAu8-9CS%B9}K zY6RrdG$~uMf6^2f+i_H>??9vA2%_)2r>TQIhnRFpoP+u8JntoZ`t%PoT$k3t`>Rjr z?;ZK86@Gv8-sMX`;p5}agy=#5Y z0F+CZo1=eyIg(&Jb+yU*>nY18u|ZW;NVi?3Q;=w~PBo&H$JP?yZY4z`?7!V9W9sb> zrJ}_QMNC|@m8Dtd@FBBeYwqoYljf;JUWNRr#e%KkH<|Q7hDHdM?!JK1exdT{glh_t z&WjA{7frO5=*q%x&@pd<6Q$zS++*2|W|vGGBCuK*j4__qE8g|y;6UuLP{;91H{arr z>W%Tqy%X~ACpY8Cmb47Svgf)UTpu-cHfqk+o^Vo|+=p0gV6T%_apIoNtJB0`noM&1 z73ltMd1CXkOP{Dwk^XPD*vGOA;!%l>$H%$OlZ)xxZs0m}xFcpML|gtz6Qk}svZERr ztQo&^yc$UMT&;C;Xx_3w(IK{JaWNC~g$g0F$r_b#Ey<&s9beblDBY@Cy_gI|Rbj&@ zRSaYcyXWR;JlxA2YY`9aS`5@agubg!bb;D-Bo05kYZpZBdLMV-V?TLh=-%%F^}ZrP zlE+BB(fZ@a zX4@X5ix?@e#SBHpp zOffMlalB34c!Gm1M}UXJI<@TSpWbinZ?!i`zUdv68t*k9K{iKNaL@<}k`H3**Ylt_ zEqZB5uO%BA!h$V3eaDtpP?Ug%d2Dy#(1p)_-Mo(&p{=T+>tUchF9+5$y{L#tGEOZ7 z;HY#s^(^+BXAg7jU@Ju2jqS;sB1}SNR^$Q`{Hi+toqnqxlM8;cmZY%~^0^d2?Gn$q5s^hRYO^Jg(eUM5SL_SQ7T(qlMQJZoKrdaR-WpkfCf2mRIiXB_yr} zgORwzw-$bT8Phq7cbiUo%B!7nCG2J(8%h4-Hcrv&Cw*|_kv`O#00+i>*%_pzvK!xP zSIAtnosl30?4^Wk_mSb$duTe+G>LIBb_c@C`m9KExIp%ytnOtUmJBtRL8uBDUJtFY z-l@D`1J!pz4C-v+6*>QF=8^s-SiUmGfDbtnJuqt#rd{D;pZLF2+P+^B0PZ zi7p)q(!HMM(4U8)9U$hQDhHoi)mRC&WxV&)^+Ix$sU5|sn&9m{q!nFkE@LR&0?@G# zCB~8XKNI?fGbr5!^{0eMw)g=*fiPk3_iiX9hB~Psxp;qcz3+_U+1qO147jjhbmPS< zy{Okmul9|C4(XWT6&7lywg`@F?%JHieAsL2x}!i*oHjUFt1yc;UH4u04C2j9DS^=x zt}TGERb*csM22w23~&_#Bcww+gmYv+CI85G1UKKNlBFf03~Dy#hkrX9DqSMDP*!>V zOTo}&ra--w${nu1uzg>AYr)NP_E#~!j{4B}_)c(&N#6uB#%(CVMv`G=r~AcPZbt8d zx#LL!!Ht3dGUUDXxw(~dUYfv~53(?_Bp-38p5#~&+JJBW zVhk*5#oRR+j`0k$ZGxPP7 zHsF!kf@G8Ox}8&kY*iP$UurKK@x%f-^?F#vhC`mzYps-FgLtVYj|oCr@VpYc)|9B4BLYVdKb1}$jeXL+q~8V-L}F1T%rx&x+=sbRh*=(-iH zAf*Jx#e<@1t_oXag7|h0q(ri*Dx1@9G-cd17e1IyQ$Y-ltT?_rU4tCy7=CO*5O#Db40Gl?ci`HPuLfw7?RT?M*(cV zVet2M!|eaK8d60;9oJdi_~}VUhNDid^{s8lXeEPuWZoXlX+@Tc>fZt3?F`#;TJ7vmsKG1 zNcnt@=Rm1oPKWpNHlX~Xap)F@W7nxK^k|$!+Fn$#lCQK=Uqc0ddQ8EdololNrilBa z)`v87^MKsS`l~Y$1LC)Oi4YkhV|i7ievd-2bEn^#;)En%zY&h79Aaw`;-MtCNf$ge zu(9WAFHeJd&bB$zyRYqi!mg7zmlQ}qsI4`K1Fej_WI-lAS~1qKzhc0tQhz;1MA#A> zc4r=i)D395g(EYnJlF(Cq;_a)&bjVNj zQ5*xa7{d_KaiPA~TYyB{U-3Jo@*vq_4qV1xk(l=ES6+~q?JqEep;_c?7n1V1%XH@7 z9p{1*D#P<>NFgdhH5p?=VsWD{`Ojx-<#+Xy zD?+Q9I}tYLCgQYS{;=-1E%`b)J2$fEjBlH$bJ1bRK*W^&7g`Fw=OO_Zms%jFr21J$ z<6B_SJ?NdZN`t@c@9o7v@cwWzDQjERAY|Y^V{B3FEOCl2+#DH{K#H#se?6xOo4|H5 zT}(YD@|~XL5(%zLMNT^`5z2|`+|;)ZY(_X3AQFfUCGZX_V97VJ$i&0zBLW+Js1p;j zRa0;>s#j;|RGQV#%uHwN@3NvfQ{U zHIkxA4Bz*IWbp@zu>*HlvkhY=sG}L82uTpdXK3Asm}>E}(uQWJCg<*%{Ann=%i3eh z{CxRq!v&j7$rObGH%O2GU48ZPItprN`ZZ2=9Jq*^7k-}oI~~HU{%b(FWiSwN#4#g; z%CF-v`pW1c2e$O4(6~*p-W(m}lH$v}Y#dT@s<}O8C#~ld{;};Eu3Q4J)%*G9SAn8A zO^?Q{i^CS_%|P(aF{VQTaUl<>YZX}qyLOX#RHEtIHDUmBGsocojxz8(x zKuap@5HT(xy^9sDdXF+E8{KgKmtd=?TUWTt8H))RW<~Kmd$e?lAH!d`Qad?v2X^tl zQyzzVBVrc7V5ql+3FCRj9dcE2h)qm1me8r}+Z8PMN7Pj<^_#UxqEN&u!VRZ>Lj(I; z6&|uYm00XhBXbLeL8F;wSv}0{PfRUnS;uhwB+l)V$aqSJnyIBHS#3m3tauRS`_`@~ zDl#BFCt0HJaSo;}lld73*e_p##zQvLCT2w~Hn3T*J{51#H|hRi&3?}OqB9z%^5WqO zPADAdq3`UdYj2MN!I``N(OahO7O9v#QTOv}401|37>m-RWVt3D8!0CEAv!kCiD!rr zW!=c|*-&s9B-6eGd;HS@(b~{WWN74ZZdYi=d6gm{U-_YdN1&lv>0W!&e2wJW8veWyko#9+90MoS+ZC zVTOYgY_*1f3qt$gox1SZ7P+~=pEq+8W2A`^O817G3;s) zZQbees{p7njUig@9s<(7nID}$$M7GnRtCc#*2%Cp6VD|C384`ZoNbJKQ=P0V&uDrj zAb_EhBUIhEW~2_fW?M1+D6&=_rqcQTNSROSQ7`z{Y1 z_?+E5EApX{WXD|I?EXR+=F}R?Yym^g4@lC8!v^g8lVQ!WPgdELb&R#U4(K(qTC>|+ z6YJ48%x;&krJ_uVjF^q58#Y-^F+Gt9XvSI2OOzB|g&9L>G1E zFwC@dfpBPgtXk*zb)d6YX{7R?1M!)RqrgEYp6~oq23CB;jO3jAgV54kCyxul1Ivp_%J?sH9gF%~Z z@R&%BIy2#|3CCNO5&@2@FbphVPcB4t#WC zU#Fa72(j#bsJAxvzEz7lQ2{+1l#?3*n)Apv^)dx6ec5$@FG2t3N*3@TtS#YmhaHgI zn82XNJ{(OYmOBHhdCN7%FRiCQ68ZZ359sjT-?~0O5n3Vi^3jl;LCc#&`O*oHoA}m~N#svJ1VSaP#vbFunlePY zN;)QR8pIO|ML;O;9XgoPEa1IgscUGmi7zl6S-mHsrK$4#m`lIu5)`&B{6(_@=@c<& zGJ;nw`0fSly-l`Fyk^OR-i+_d=F9)=sv6vI6k>kf-xjq2UiIM{FUu_a*??TEeC+E! ztUcCcI=4Jxi9((Xo&)>bjZnis3;dZ4PxTa@YSj)q#l0KshUgm`Wy1FxDjEClp>egx z%@}<^v0!}UPSlf{ytT_j?#AJ-kXj0G8!#`(mzbV+DwkqX4!}dVvgnLqb}CBcA)rhv zX+I!?KR{WM;v#JBc;5RZZ;lT9o;{D{dtdKU^arIsW#GcX5+7e8^wZ0IzgX@VnpQS( z^p~uH{~Y7+=7N@YY6YzOcnD*d%!Xj~m(GG@FG=W#P$RWh*{U&8RlgxGT{P<5B(b%( z<=L+9RXJJJaed*ni)cdc?oC2$;k7cRzp{n@%d&$L&vX)gYwqpGkNB0q51bnU)P&AOHqqKSBd%;i1FADtUh&HJ09YU!3d{f_*uP&m>zGv!jkF&8;8=zA!}M z(W78yPvqSb&?&YIJCLnvzu73Y6qB^14=Mg%X5F1u8vHQz4+D59DY^n24AzItaJpt1 zXRfccN1--7pd(R9@d!+UNAe86Ym$-bOEUR1qv{I%)9HU||pU zBJN-nfD=P(>K((wxcbh=8dr76DA#KGiJqEJ3&DBAe|(&}WaNlNH~MU6YvZ$5#A=`t zEg*}6(8t$k1!e=^tNy%w+p>s(RD%&Ws@+2xQqW8JLco(8tbr)gntP1>FhyP?gx|6} z7%Sk}ioNu%JUffbah0K92!S(ICiBEt{dN3T0tq_|=^Ox+(mYnff95$!q_zdKE&DL* z;x&w*13j*L(EmilK76s)xp-@#%6leE{XW+0t8Ou%l~I=TRJOJCp-t75mGi5(bIHs0Lt%PB;5-72A&~918`>a5obP3*8dMktm_p3hzWo_0 z_1!LMudR5we7SaOPl{|5_PBb%*;r{irCJ{@&1eU*9j19*7t@so8awh?{Vxd0xA0mA zW+}AN@1KlxHc+Y+cwk*X4^4{hsLG`8y%b(9$%A~+7qxR0H$t%as=7pLsLyD|o7U;B z+`Gjd{#g7hgL?}?wo-w!SM*tvQB~NR80XS)ec~+1!@Q9Qt7TR#GCfF}sTAWBg!UzS zP%IGn?!4~MlB!bevgv>2V_|d=2ta7X4Kd(npBG}UgEOey{Y_mRbsTlxUf*rtIAR3Q6_$%mG(j^Z!$kqy`(ffbX4N7H8!f)@j70+%2di z^T}kX!U*;x8U{LrwvGf!4({S-@3O2TP>;D7ioXG{7E~uVs3Xy?=Wg>MCOleKs2UuJ zUuU2dKTWc5JqbGT(oj*FsfDvP9&hl#(hmDFWtrzvt2r!xg}0^`U?SR$3aJ(!J(kf8 zC9~Y>LwDZg$b=HcoGc?MvUGv~@#p*G1x8uz`8aWy!HX|k@SS!x5yfW1s`yan{38|@+g8*<5MVZksB zF~kJwW?Hj+w0ZPZrqq+NM+F}#3Dj?G5X?3A4z6t(UUO7D!EW;I28fKau06-bo<2Hp z0^e6In19pctgH=F8IP?pGP{h=j$r;($poVr)>CDE+cx3P&b4AQyH5*L^Bs*%C&9Z3 zv{(VKdhA5jQW<~aaVgw0x7fC|NOKR#=sR`4X0ageYTwdB#KGP}iqZ5UYD3$YA`plp zE1CfivyfCFNrwiq%Vllj3#Y@{SrGPg?74YA%y(%9o^3XKUfMSPPFvMvEQ-S#((d`W z>4(1~G-J9i&tQ|=3O}_vJefEm-eaKPj>IWLA2$@GL%LETDWf|Z|Hg+&L8QZf7M$7# zk+g4LjjZh_6I!x9uB#&;rNogDKw$ zRl#J8A=|Or%@vP65sU{fU-YdMw+f`2joY!uz}quf2fYy&^bN>nV)BKpotb>-|IDVo zs4Ktul?;aW$jCQj;M2wj1Lrl$bUykyk}K1UZQ7`1TE6S3H;ax`tn|>Y(BuN|^;U*L zV=cZI!hi>fMJjHzU*71s^VJur@29ujH5-?&N~7|q>jmrwGyB3>M9C`9-9uZl&U7h_ zi=mI`m4m1)i2OddDW3N_+)Qo34Vi}i`Rqt5jWa+~M7%|Jv2|A$5x-=G7H{xedv_ye z;FxcxE43TG^aeqR^5<`%i?*scj6;~LQ}>siPD&GDx~D6nkU7qn0R8>Dgt< zs2$|TP_+yE$e_03reZm@7lBta`r<7Keoy?9u;{tUy^~5F(Z>eVg@m)?OVJkEUl~VS z+G-$8e=pU#0|o~G3^vnGN~AM#*Ih5oY8B6f(Ds!(PUdCCGHH_>Y|-tbXya)4joD?& z@%BZytM2 zT&g_6%%#H!UF*T?t~OEm2(x`S(TDBVLg8NCj$wQ-6yb~*W$N|tKU|TJ4{KXjBcDUH zAZuaqgaN1xaVA6wynhj@3~(zg@{W;>K*?hM68S^r^f0R!^Bof;ZwDKP>VD=n zq^PS@VA_gQ&9j26eh#@D&V_h>;Rx&ul|gb|X(~X9`9- zok6nqXqVH8Y14a7@GhE|Tqp@ApTw_3U)g**umIuPW12cu@gmLQ_- ziiKr;@74qp{CRZS`dyE^K$4);crKNHDs*gLv<iSca-bi%FZXYkN7iw2VQuqfxaV&37L9kpc&Vy7;6E`J(ALgyJ5M2-#u#vzn>EZM^_Qcuk9F4l4cLJ zhm9<$Mmq(CXT3R)wnq=_yg7=eRayi#_+=`cZ=G}1@uIh11CrB~rqX$biA}f}D3vnFvA(g=`|94N>QIiiXHjCcms-Hbh z<3R0PruW6F#7&@tkbv=EX>htz6@lP@4V@>shRN+koCotQOu>n&rDa7GF1&_vvK!ZB z2mdiL<{-QlXGI1Ef*)ntrfs`$wZ6T_+~q;N;8@cfGvNjt1uK*(=Lp0~gPXmjkS^lv zw4FSId=8Rj*Qq$*1xJOoy<&B5D4j(FO<#Ee9X11sU9p6uUIWTUY>KSjf)#@M%8bnU zJ|BFGGTjqB55Q+9fa(DFFj0}GDf*O$0~)V{70}?}@TfwP{fX>n(qN{=t30LSAYJ^a zc%v@M+7dL}MDllG>62F!CG$vw+PWvV(wI;L1rh^`*%96q=!{4xFvD{UaK6e`wr68k zib5@L|4gJuP;RK-0A)G#v;E{AkVmyv8$0{N`9kvH$M?0K1aod%D-*|#2#Quyd9}5~ zWE~YK>>d)mx##2X*WAJ!vL(qLtIXn|b{V zE%)T$#N7={Ua{!fMGN}bQA-uRY4@bU`}~$7di31Am8n-C7LX3Q&Pi`wn?Y2lHxhZv z#Sc*_5Bxc^sK;%eRD4lkU$h(3`7_|kC)uE)=j-?9iEn?slaL^?2^F1MH=LkQ^G&j9 ztrsrOt)g9=e@hvMHw6wn6)&or!ZYC~5nDWni;;;yTGFa+13kbW%i=INPo$_epu%pf^1>xzx7%OiW6(T(g$yWlAa*{PFL)YUi}hi zH6Vv*dD5I|nY31{ftDZF8B_kONE^2JWd3^OkkZHWaCxxDh?{2&*p7tPpgpQ@zFAYi z+=Jd&P(0+R%rO(5eMPRX>ks~K7WrUT(mR$tQ2m$Ln$&C8U zjz;}Xn+%7)F{)m9rOa+9-gbH?UfyVbU#6t0B#+AmVpSaOO9Q09ry`a|2b7xRmw$$=S0@J&F@|g+4i+wSd+sXSwDn6-T%JI;E#T)1dP_}3m8)L9Q?%;HT z7D<>Az%g3Lq!7HF%XTH~pRrj}nU-{e-OH451D(b@i&#s823u2w4}1)hYh82ytgB>m zfTDHBNSW$zWG3)=H-_XxxdL$VxaBOQ8Q&vn)|94{(Bj_T737U;jh@&=`$bJ+iExA} z!&bU-NsQm%-1Wkr=BXezbL0Ecq*W?GxC$xI$ee2 z>nYP0b{GEf{hLTm1lA42{8x1irI8HCX(uF83`_fJJq&e6L=o2MW`z8twm1ABD6Y-G zlsqd!F#g<05Q(JRYihUn2@FuC(r~7sGuEeKoq(&UxCA?IjmngAdk=fuApqySH%stH8;7Y$*afrns{nSY?XYvgLf=SfZUu zj-H4G^XE7K5WLP@2hAg+I8FBjrq*TB;-lMl5Ec4V^0stjU!+;3dcrI$h3U@Jsf}#Z z#J*lt*TgPOCA<6(3vTJ&y@&9%Dmt>6y|N}!%X=%*itD%6NO2N~4NJ=3e3al_rVMi; znOiX5=u`X-?I2xee{u58JVcd3PII@<0!k|AV z+t+sBl0ep1?0$Bjj*rA5wJ8O0#$%l$9eXMmE!N?q8`K?(yYjmsX3aDd+s~r3|Gr>> zO==XWFRigh61JX-e^o4B7bW!lTb2N?gc@{2&wxy#|4qz1-RBlee|!LM{Innp4Nl!S z2-g>sot~1G_?NNH(RO2My1Zdoema=PE5e9+fw#~fI?WzGNu^TK+gqLy+v}cX{nzF8 zqz2caV~s@(p;R1fRu;}GlV`;Z(e4N8n%7cGQ_C$Um-+(OnFI|1nrTk}Pylc5U2LsZ z6BBGmAj4ggp%bL^lse&7AEAfsmYC)$`s7{D{w35BgfUBv?owVw6d()mvNn3hfma?} zWzkp)x~_)K85UdE5z||hU&%c}Z`WJ@kUB~I+(RZoA3v)2@>m7zC$_vccpT_IH7#cQ zKm>ssXbYrSgbMV`<^K~O26(5uD6l3;9~$edNrB0&J&9m>lwW6Eei;!_MF~{GI73KG z+Ny*7aiDQof?yF6XDBW7M10aTZvz$zh8$c$x5*{6gARFyT!aFyXtEB*c@g7W5`gkq z7^!VfNw)J|-Y;;A^sD>K#2P(iZ;OoFBVpI6bx_*`;Q$(OQxpw2#0*u@ej%qr&SOO`rzV8QVO8(?)8-#h{Gw^3GQ zUcVOggpS$m*r~x0)g?gTpR5?5{_B|~!T6pa^hz~DvAMo9}{uS+8w zg9P*`M_76Ih2jmdae;G!#>9p#vCC2cu;~N~yUxJu@Td>cX$qj9Z68K)Hdziq48Gs8 z`LVHnXm7Ef@mBz*+81KJe5#r)b`c_Dv%5g17VkFhem$B7102=v1kcxBUf(5+K4kUHaAh$$r$>GcIqrt9WzKMuOC}MZD2$q8JMr(w#(XMY z%yR`opQ%9exmot91q)BjiXN6T1<>k(rb@8;q$t~%wHXZc^$&aVV*ILl0jXV-$s)rW z^P2kSX`x~AC4TIfB}}@fN}3{E{JcdNS@Adm0Dyo5(@8CbeLjnKbWR1JubP@2-kbdJud9FSaI85@vKVh%LNkw$ z5T5aBzAM>8SV9n_#wz)>i1%TvkKn)<{@^8!;eQW;$O}ida*%^&&jbKqdAz9;dK7hn zz?#XSz{56Qtj%CE7;>#7Qo9b~YuZ~*{FrpYgqz6qfp0Q#NpVMKtk^&EwKU`>8@0q02Y0%7Ok|Fbs0 z5jV;`k=E11q2DcFJ)=%IATAwP-R}m-C3L2~2~Eg%C?G&%&ZNEoB*t$X2B2&M^Y0XA zoNtZxe*gdslk#X0%zg5$fSr+(zYLI?|L*?2BP##^lKgfN6ihdjEDCCS}j%NH|lfD86D(p;Ap?{}=K%#J{c{-)|6h!R%mBBwCs; zD2qx|Y`0||U>@eGTmTb$#%F?@0sxUY@8UJ)6f|V58$jeG@Q){OcL@ME;oFrFD7)}G zbO81jOZUGZ8CqBT5XY%!#jrbpf|B(MLdk{d|Kd5wq*`uOp|04?IU5-`~ zTU~%C%)i}%>=VDIt>@n~PW~Hrr1`%NJ)Zv=rLzd#7whKVc4z-by4U|jSLf?9^6!6u z{s-N5zkkuqf&V|#?fw^y9J>FF?)AUz82&GGsRT2a|BJ5t*T;9D|AXhhd%(XJ=6iB; N6#swO+W)UC{vSiy)fNB% literal 0 HcmV?d00001