From 4b034d19f69bf9bf5a82d339be9062770a0e55dc Mon Sep 17 00:00:00 2001 From: ilia Date: Wed, 3 Jun 2026 15:42:42 -0400 Subject: [PATCH] Add triage tests, prepare-export, and UI fixes for Levkin migration. Cherry-pick heuristics, manifest merge, global file search, scrollbar styling, and pytest/Playwright coverage unblock review and filtered export for mmetl. --- .coveragerc | 16 + .gitignore | 7 + Makefile | 35 +- README.md | 5 +- docs/HANDOFF.md | 29 +- package-lock.json | 76 ++ package.json | 12 + playwright.config.ts | 36 + requirements-dev.txt | 2 + scripts/auto-cherry-pick.py | 439 ++++++++ scripts/build-test-fixture.py | 59 ++ scripts/prepare-export.py | 223 +++++ server.py | 29 +- slack_export.py | 103 ++ static/app.css | 103 +- static/app.js | 429 ++++++-- static/index.html | 41 +- tests/README.md | 69 ++ tests/conftest.py | 138 +++ tests/e2e/review-ui.spec.ts | 139 +++ .../mini-export/153niagara/2016-10-05.json | 17 + .../mini-export/153niagara/2016-10-11.json | 198 ++++ .../mini-export/153niagara/2016-10-18.json | 309 ++++++ .../mini-export/153niagara/2016-10-24.json | 298 ++++++ .../F011NH76RUP/IMG_20200418_090219.jpg | Bin 0 -> 391180 bytes .../mini-export/__uploads/T1/note.txt | 1 + tests/fixtures/mini-export/channels.json | 68 ++ .../mini-export/medical/2016-10-05.json | 17 + .../mini-export/medical/2016-10-10.json | 261 +++++ .../mini-export/medical/2016-10-27.json | 241 +++++ .../mini-export/medical/2018-09-13.json | 84 ++ tests/fixtures/mini-export/users.json | 933 ++++++++++++++++++ .../fixtures/mini-export/zoey/2020-04-18.json | 159 +++ .../fixtures/mini-export/zoey/2020-04-23.json | 277 ++++++ .../fixtures/mini-export/zoey/2020-04-25.json | 665 +++++++++++++ .../fixtures/mini-export/zoey/2020-05-29.json | 42 + tests/fixtures/test-manifest.json | 167 ++++ tests/test_auto_cherry_pick_main.py | 49 + tests/test_cherry_pick.py | 82 ++ tests/test_cherry_pick_extended.py | 63 ++ tests/test_coverage_gaps.py | 260 +++++ tests/test_helpers.py | 113 +++ tests/test_prepare_export.py | 151 +++ tests/test_preset_skips.py | 50 + tests/test_server.py | 112 +++ tests/test_server_extended.py | 162 +++ tests/test_slack_export.py | 58 ++ tests/test_slack_export_extended.py | 203 ++++ 48 files changed, 6904 insertions(+), 126 deletions(-) create mode 100644 .coveragerc create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 playwright.config.ts create mode 100644 requirements-dev.txt create mode 100644 scripts/auto-cherry-pick.py create mode 100644 scripts/build-test-fixture.py create mode 100644 scripts/prepare-export.py create mode 100644 tests/README.md create mode 100644 tests/conftest.py create mode 100644 tests/e2e/review-ui.spec.ts create mode 100644 tests/fixtures/mini-export/153niagara/2016-10-05.json create mode 100644 tests/fixtures/mini-export/153niagara/2016-10-11.json create mode 100644 tests/fixtures/mini-export/153niagara/2016-10-18.json create mode 100644 tests/fixtures/mini-export/153niagara/2016-10-24.json create mode 100644 tests/fixtures/mini-export/__uploads/F011NH76RUP/IMG_20200418_090219.jpg create mode 100644 tests/fixtures/mini-export/__uploads/T1/note.txt create mode 100644 tests/fixtures/mini-export/channels.json create mode 100644 tests/fixtures/mini-export/medical/2016-10-05.json create mode 100644 tests/fixtures/mini-export/medical/2016-10-10.json create mode 100644 tests/fixtures/mini-export/medical/2016-10-27.json create mode 100644 tests/fixtures/mini-export/medical/2018-09-13.json create mode 100644 tests/fixtures/mini-export/users.json create mode 100644 tests/fixtures/mini-export/zoey/2020-04-18.json create mode 100644 tests/fixtures/mini-export/zoey/2020-04-23.json create mode 100644 tests/fixtures/mini-export/zoey/2020-04-25.json create mode 100644 tests/fixtures/mini-export/zoey/2020-05-29.json create mode 100644 tests/fixtures/test-manifest.json create mode 100644 tests/test_auto_cherry_pick_main.py create mode 100644 tests/test_cherry_pick.py create mode 100644 tests/test_cherry_pick_extended.py create mode 100644 tests/test_coverage_gaps.py create mode 100644 tests/test_helpers.py create mode 100644 tests/test_prepare_export.py create mode 100644 tests/test_preset_skips.py create mode 100644 tests/test_server.py create mode 100644 tests/test_server_extended.py create mode 100644 tests/test_slack_export.py create mode 100644 tests/test_slack_export_extended.py diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000..d2f4f7d --- /dev/null +++ b/.coveragerc @@ -0,0 +1,16 @@ +[run] +source = + slack_export + server +omit = + tests/* + scripts/* + +[report] +exclude_lines = + pragma: no cover + if __name__ == .__main__.: + raise SystemExit + def main +show_missing = True +fail_under = 85 diff --git a/.gitignore b/.gitignore index 37bdf18..2cd51a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,14 @@ manifest.json +prepared-export/ +node_modules/ +test-results/ +playwright-report/ +playwright/.cache/ .index-cache.json __pycache__/ *.pyc .DS_Store .venv/ venv/ +.coverage +.pytest_cache/ diff --git a/Makefile b/Makefile index 2fb28b8..cfe42a6 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: help review hydrate preset-skips +.PHONY: help review hydrate preset-skips test test-unit test-e2e fixture help: ## Show targets @grep -E '^[a-zA-Z0-9_-]+:.*##' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*## "}; {printf " \033[36m%-16s\033[0m %s\n", $$1, $$2}' @@ -13,3 +13,36 @@ hydrate: ## Download attachments from official Slack export URLs preset-skips: ## Apply presets/levkin-skips.json channel skips to manifest.json @python3 scripts/preset-skips.py + +cherry-pick: ## Reset picks and re-run scripts/auto-cherry-pick.py + @python3 scripts/auto-cherry-pick.py + +prepare-export: ## Build prepared-export/ from manifest.json + @python3 scripts/prepare-export.py + +fixture: ## Build tests/fixtures/mini-export from your Slack export + @python3 scripts/build-test-fixture.py + +test: test-unit test-e2e ## Run 100+ pytest + Playwright tests + +test-unit: fixture ## Pytest (export, cherry-pick, API) + @test -d .venv || python3 -m venv .venv + @.venv/bin/pip install -q -r requirements-dev.txt + @.venv/bin/python -m pytest tests/ -v --ignore=tests/e2e --cov --cov-report=term-missing:skip-covered + +test-cov: test-unit ## Alias with coverage report + +test-e2e: fixture ## Playwright UI tests + @npm install --no-save 2>/dev/null || npm install + @npx playwright install chromium + @SLACK_IMPORT_PORT=18765 npm run test:e2e + +test-e2e-headed: fixture ## Playwright with visible browser + @npm install --no-save 2>/dev/null || npm install + @npx playwright install chromium + @SLACK_IMPORT_PORT=18765 npx playwright test --headed + +test-e2e-ui: fixture ## Playwright interactive UI runner + @npm install --no-save 2>/dev/null || npm install + @npx playwright install chromium + @SLACK_IMPORT_PORT=18765 npx playwright test --ui diff --git a/README.md b/README.md index a3f4c17..c4610b7 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ Selections are saved to `manifest.json` (gitignored). | `make review` | Start the web UI on port 8765 | | `make hydrate` | Copy export + download attachments via embedded `xoxe` URLs | | `make preset-skips` | Mark preset channels as skip in `manifest.json` | +| `make prepare-export` | Write `prepared-export/` (filtered Slack shape for mmetl) | ## Environment @@ -58,8 +59,8 @@ Edit `presets/levkin-skips.json` (or copy it) for workspace-specific channels to ## Mattermost import (after review) -1. Build a filtered export from `manifest.json` (prepare-export — planned). -2. [mmetl](https://github.com/mattermost/mmetl) `transform slack` +1. `make prepare-export` — writes `prepared-export/` from `manifest.json` (pytest-covered; not yet run through mmetl/mmctl). +2. [mmetl](https://github.com/mattermost/mmetl) `transform slack` on `prepared-export/` 3. [mmctl](https://docs.mattermost.com/administration-guide/manage/mmctl-command-line-tool.html) `import` Docs: [Migrate from Slack](https://docs.mattermost.com/administration-guide/onboard/migrate-from-slack.html) diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 7c39d33..7eca7c7 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -2,7 +2,8 @@ **Repo:** https://git.levkin.ca/ilia/slack-sieve (public) **Clone:** `git clone git@git.levkin.ca:ilia/slack-sieve.git` -**Last updated:** 2026-05-29 +**Vikunja:** [todo.levkin.ca → Homelab → slack-sieve](https://todo.levkin.ca) (`SLK`) +**Last updated:** 2026-06-03 --- @@ -17,7 +18,7 @@ Official Slack export (JSON) → make hydrate # __uploads/ via xoxe URLs in export → make preset-skips # optional noise-channel skips → make review # manifest.json (gitignored) - → prepare-export # TODO — filtered Slack-shaped folder/zip + → make prepare-export # prepared-export/ (filtered Slack shape) → mmetl transform slack → mmctl import ``` @@ -46,6 +47,9 @@ make review # http://127.0.0.1:8765 make hydrate # re-download attachments if needed make preset-skips # apply presets/levkin-skips.json (safe to re-run; keeps your channel decisions) +make cherry-pick # bulk data/files picks on priority channels (optional) +make prepare-export # after review — filtered export for mmetl +make test # pytest + Playwright ``` --- @@ -119,16 +123,21 @@ Copy and edit for another workspace. --- -## TODO (next implementer) +## Open tasks (source of truth) -1. **`scripts/prepare-export.py`** — read `manifest.json`, emit filtered Slack export dir/zip (`__uploads/` + selected JSON days, thread parents included). -2. **Pilot import** — one small channel through `mmetl` → `mmctl` on Mattermost VM; verify threads, files, users. -3. **User mapping** — optional `fetch-emails` or Slack ID → Mattermost username map for `mmetl`. -4. **Makefile** `make prepare-export` + doc section in README. +Tracked in **Vikunja → Homelab → slack-sieve**. Update here when scope changes. + +| P | Task | Owner | Status | +|---|------|-------|--------| +| **P1** | **Channel review in UI** — `make review`, finish 14 undecided + 3 partial ([order](#suggested-review-order)); save manifest | @you | ⏳ **next** | +| **P1** | Pilot import: one channel via `make prepare-export` → `mmetl` → `mmctl` on MM VM `10.0.10.237` | @agent | ⏳ blocked on review | +| **P2** | User mapping: Slack ID → Mattermost username for `mmetl` | @agent | backlog | +| **P3** | Re-hydrate 13 files that returned HTTP 401 (expired export token) | @you | optional | +| — | `scripts/prepare-export.py` + `make prepare-export` | @agent | ✅ done | ### Mattermost / homelab -- SSO: Authentik — see ansible `docs/guides/mattermost-authentik-gitlab-oauth.md` +- SSO: [authentik-apps.md#mattermost](https://git.levkin.ca/ilia/ansible/src/branch/master/docs/guides/authentik-apps.md#mattermost) (ansible) - Import docs: https://docs.mattermost.com/administration-guide/onboard/migrate-from-slack.html --- @@ -143,6 +152,10 @@ slack-sieve/ scripts/ hydrate-export.sh preset-skips.py + auto-cherry-pick.py + prepare-export.py + build-test-fixture.py + tests/ # pytest + Playwright (mini-export fixture) presets/ levkin-skips.json manifest.json # gitignored — your work in progress diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..17029e3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,76 @@ +{ + "name": "slack-sieve", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "slack-sieve", + "devDependencies": { + "@playwright/test": "^1.49.0" + } + }, + "node_modules/@playwright/test": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.60.0.tgz", + "integrity": "sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.60.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/playwright": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", + "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.60.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", + "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..5324685 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "slack-sieve", + "private": true, + "scripts": { + "test:e2e": "playwright test", + "test:e2e:headed": "playwright test --headed", + "test:e2e:ui": "playwright test --ui" + }, + "devDependencies": { + "@playwright/test": "^1.49.0" + } +} diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..7f053ee --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,36 @@ +import { defineConfig } from "@playwright/test"; +import path from "path"; + +const repo = __dirname; +const port = process.env.SLACK_IMPORT_PORT || "18765"; + +export default defineConfig({ + testDir: "tests/e2e", + timeout: 30_000, + retries: process.env.CI ? 1 : 0, + use: { + baseURL: `http://127.0.0.1:${port}`, + trace: "on-first-retry", + }, + webServer: { + command: [ + "python3", + "server.py", + "--export", + path.join(repo, "tests/fixtures/mini-export"), + "--manifest", + path.join(repo, "tests/fixtures/test-manifest.json"), + "--host", + "127.0.0.1", + "--port", + port, + ].join(" "), + url: `http://127.0.0.1:${port}/api/health`, + reuseExistingServer: !process.env.CI, + env: { + ...process.env, + SLACK_IMPORT_QUIET: "1", + SLACK_REVIEW_URL: `http://127.0.0.1:${port}`, + }, + }, +}); diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..7722475 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,2 @@ +pytest>=8.0 +pytest-cov>=4.0 diff --git a/scripts/auto-cherry-pick.py b/scripts/auto-cherry-pick.py new file mode 100644 index 0000000..f4b4128 --- /dev/null +++ b/scripts/auto-cherry-pick.py @@ -0,0 +1,439 @@ +#!/usr/bin/env python3 +"""Bulk cherry-pick data-rich messages (files, facts) — not conversation.""" + +from __future__ import annotations + +import json +import re +import sys +from collections import defaultdict +from datetime import datetime, timezone +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parents[1] +MANIFEST_PATH = REPO_ROOT / "manifest.json" +DEFAULT_EXPORT = Path.home() / "Downloads/Levkin Slack export enriched" + +SKIP_SUBTYPES = { + "channel_join", + "channel_leave", + "channel_topic", + "channel_purpose", + "channel_name", + "channel_archive", + "channel_unarchive", + "group_join", + "group_leave", +} + +RETURN_CHANNELS = {"29wilson", "520steeles"} + +NOISE_TEXT = re.compile( + r"^(ok|okay|thanks|thx|ty|lol|lmao|\+1|done|yes|no|yep|nope|sure|cool|nice|got it|" + r"will do|sounds good|perfect|great|👍|👌)\.?!?$", + re.IGNORECASE, +) + +# Concrete facts — not decision/planning chatter that merely mentions a topic word. +DATA_URL = re.compile(r"https?://|www\.", re.IGNORECASE) +DATA_EMAIL = re.compile(r"\b[\w.+-]+@[\w.-]+\.[a-z]{2,}\b", re.IGNORECASE) +DATA_PHONE = re.compile( + r"(?:\+?1[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b|\b\d{3}[-.\s]\d{3}[-.\s]\d{4}\b" +) +DATA_MONEY = re.compile( + r"\$\s*[\d,]+(?:\.\d{2})?|\b[\d,]+\s*(?:cad|usd|dollars?)\b", re.IGNORECASE +) +DATA_DATE = re.compile( + r"\b(?:\d{1,2}[/-]\d{1,2}[/-]\d{2,4}|" + r"(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[a-z]*\s+\d{1,2}(?:,?\s+\d{4})?)\b", + re.IGNORECASE, +) +DATA_ADDRESS = re.compile( + r"\b\d{1,5}\s+\w+(?:\s+\w+){0,3}\s+" + r"(?:st|street|ave|avenue|rd|road|dr|drive|blvd|way|crt|court|lane|ln|unit|apt|#)\b", + re.IGNORECASE, +) +DATA_ACCOUNT = re.compile( + r"\b(?:account|policy|invoice|receipt|confirmation|booking|reference|" + r"transit|etransfer|sin|passport)\s*#?\s*[:#]?\s*[\w-]{4,}\b", + re.IGNORECASE, +) + +CHAT_PATTERNS = re.compile( + r"\b(?:should we|what do you think|let me know|any thoughts|sounds good|" + r"i think we|we could|maybe we|let's\b|can you\b|do you want|" + r"worth it|decided to|going to\b|planning to|wondering if)\b", + re.IGNORECASE, +) + +NAME_LIST_TOPIC = re.compile( + r"\b(?:baby\s+names?|girl\s+names?|boy\s+names?|name\s+list|names?\s+we\s+like|" + r"favorite\s+names?|shortlist|hebrew\s+name|yiddish\s+name|middle\s+name)\b", + re.IGNORECASE, +) + +INFORMATIVE_FILE = re.compile( + r"invoice|receipt|lease|statement|bill|contract|insurance|tax|form|report|" + r"prescription|diagnosis|lab|result|scan|document|agreement|deed|mortgage|" + r"hoa|permit|inspection|warranty|quote|estimate|spreadsheet|\.pdf|\.doc|\.xls", + re.IGNORECASE, +) + +CASUAL_IMAGE = re.compile( + r"^image\.|screenshot|slack-img|photo|img_\d|snap|slack-image|mvimg", + re.IGNORECASE, +) + +PROPERTY_CHANNELS = { + "284richmond", + "45ritson", + "122harmony", + "6keefer", + "153niagara", + "banking", + "realestate", + "airbnb", + "york", + "viewings", +} + +KIDS_CHANNELS = { + "zoey", + "izik", + "parenting", + "moishe", + "baby", + "after-school-activities", +} + +FAMILY_CHANNELS = {"levkin", "medical", "purchase"} + +AUTO_CHANNELS = PROPERTY_CHANNELS | KIDS_CHANNELS | FAMILY_CHANNELS + +IMAGE_EXTS = {"png", "jpg", "jpeg", "gif", "webp", "bmp", "svg", "heic"} + + +def draft_group_key(name: str) -> str: + n = name.lower().strip() + n = re.sub(r"^draft[\s_\-]+", "", n) + n = re.sub(r"[\s_\-]*(final|v\d+|rev\d*|\(\d+\)|copy)", "", n) + n = re.sub(r"\.[a-z0-9]{1,5}$", "", n) + n = re.sub(r"\s+", " ", n).strip() + return n or name.lower() + + +def is_image(file: dict) -> bool: + mt = (file.get("mimetype") or "").lower() + if mt.startswith("image/"): + return True + name = (file.get("name") or "").lower() + ext = name.rsplit(".", 1)[-1] if "." in name else "" + return ext in IMAGE_EXTS + + +def is_doc(file: dict) -> bool: + name = (file.get("name") or "").lower() + ext = name.rsplit(".", 1)[-1] if "." in name else "" + return ext in {"pdf", "doc", "docx", "xls", "xlsx", "csv", "ppt", "pptx"} + + +def is_draft_file(file: dict) -> bool: + return "draft" in (file.get("name") or "").lower() + + +_DATA_PATTERNS = ( + DATA_URL, + DATA_EMAIL, + DATA_PHONE, + DATA_MONEY, + DATA_DATE, + DATA_ADDRESS, + DATA_ACCOUNT, +) + + +def data_signal_count(text: str) -> int: + return sum(1 for p in _DATA_PATTERNS if p.search(text)) + + +def has_data_signals(text: str) -> bool: + return data_signal_count(text) > 0 + + +def text_is_factual(text: str) -> bool: + """Require hard facts, not a lone link in chat.""" + if not text or not text.strip(): + return False + if looks_conversational(text): + return False + n = data_signal_count(text) + if n >= 2: + return True + if DATA_PHONE.search(text) or DATA_MONEY.search(text) or DATA_EMAIL.search(text): + return True + if DATA_ADDRESS.search(text) and DATA_DATE.search(text): + return True + return False + + +def looks_conversational(text: str) -> bool: + if not text or NOISE_TEXT.match(text.strip()): + return True + if CHAT_PATTERNS.search(text): + return True + if text.count("?") >= 2 and len(text) < 500: + return True + # Short back-and-forth without hard facts. + if len(text) < 80 and not has_data_signals(text): + return True + return False + + +def is_name_list_message(text: str) -> bool: + if not text or not text.strip(): + return False + if NAME_LIST_TOPIC.search(text): + return True + lines = [ln.strip() for ln in text.splitlines() if ln.strip()] + if len(lines) >= 4: + name_lines = sum( + 1 + for ln in lines + if re.match(r"^[\s•\-\d.]*[A-Z][a-z]{2,}(?:\s+[A-Z][a-z]{2,})?\s*$", ln) + ) + if name_lines >= 3: + return True + return False + + +def informative_filename(name: str) -> bool: + return bool(INFORMATIVE_FILE.search(name or "")) + + +def informative_image(file: dict, text: str) -> bool: + name = file.get("name") or "" + if CASUAL_IMAGE.search(name): + return text_is_factual(text) + if informative_filename(name): + return True + return text_is_factual(text) + + +def build_latest_draft_winners(export, channel: str) -> tuple[set[str], dict[str, set[str]]]: + groups: dict[str, list[tuple[float, str, str]]] = defaultdict(list) + for msg in export.iter_channel_messages(channel): + for f in msg.get("files") or []: + name = f.get("name") or "" + if not is_draft_file(f): + continue + try: + ts = float(str(msg.get("ts", "0")).split(".")[0]) + except (TypeError, ValueError): + ts = 0.0 + fid = f.get("id") or name + groups[draft_group_key(name)].append((ts, msg["id"], fid)) + + msg_ids: set[str] = set() + files_by_msg: dict[str, set[str]] = defaultdict(set) + for items in groups.values(): + _ts, msg_id, fid = max(items, key=lambda x: x[0]) + msg_ids.add(msg_id) + files_by_msg[msg_id].add(fid) + return msg_ids, files_by_msg + + +def should_import( + msg: dict, + channel: str, + *, + latest_draft_msgs: set[str], +) -> bool: + subtype = msg.get("subtype") + text = (msg.get("text") or "").strip() + files = msg.get("files") or [] + msg_id = msg["id"] + + if subtype in SKIP_SUBTYPES and not files: + return False + if msg.get("is_bot") and not files: + return False + + # --- Attachments (primary signal) --- + if files: + if msg_id in latest_draft_msgs: + return True + for f in files: + if is_draft_file(f): + continue + if is_doc(f): + return True + if informative_filename(f.get("name") or ""): + return True + if is_image(f) and informative_image(f, text): + return True + return False + + # --- Text without files: facts only, not chat --- + if channel in KIDS_CHANNELS and is_name_list_message(text): + return True + + return text_is_factual(text) + + +def msg_selection( + msg: dict, + *, + latest_draft_files: set[str] | None = None, +) -> dict: + text = (msg.get("text") or "").strip() + files: dict[str, bool] = {} + for f in msg.get("files") or []: + fid = f.get("id") or f.get("name") + if not fid: + continue + if is_draft_file(f): + if latest_draft_files and fid in latest_draft_files: + files[fid] = True + continue + if is_doc(f) or informative_filename(f.get("name") or ""): + files[fid] = True + elif is_image(f) and informative_image(f, text): + files[fid] = True + return { + "action": "import", + "checked": True, + "merge_target": "", + "notes": "auto-cherry-pick", + "files": files, + } + + +def channel_entry_skip(notes: str) -> dict: + return { + "import": False, + "status": "skip", + "reviewed": True, + "import_mode": "all", + "notes": notes, + "mattermost_channel": "", + "mattermost_team": "", + "messages": {}, + } + + +def channel_shell() -> dict: + return { + "import": True, + "status": "partial", + "reviewed": True, + "import_mode": "pick", + "notes": "auto-cherry-pick — data/files only", + "mattermost_channel": "", + "mattermost_team": "", + "messages": {}, + } + + +def reset_all_picks(manifest: dict) -> None: + channels = manifest.setdefault("channels", {}) + for name, entry in channels.items(): + if not isinstance(entry, dict): + continue + entry["messages"] = {} + if name in RETURN_CHANNELS: + channels[name] = channel_entry_skip( + "Returned — not importing (29wilson / 520steeles)" + ) + continue + if entry.get("status") == "skip": + continue + entry["import"] = False + entry["status"] = "undecided" + entry["reviewed"] = False + entry["import_mode"] = "all" + + +def main() -> int: + dry_run = "--dry-run" in sys.argv + reset_only = "--reset" in sys.argv + export_path = DEFAULT_EXPORT + for arg in sys.argv[1:]: + if not arg.startswith("-") and Path(arg).expanduser().is_dir(): + export_path = Path(arg).expanduser().resolve() + + sys.path.insert(0, str(REPO_ROOT)) + from slack_export import SlackExport + + export = SlackExport(export_path) + manifest: dict = {"channels": {}, "users": {}} + if MANIFEST_PATH.is_file(): + manifest = json.loads(MANIFEST_PATH.read_text(encoding="utf-8")) + + reset_all_picks(manifest) + print("Cleared picks — data/files only mode.") + for name in sorted(RETURN_CHANNELS): + print(f" #{name} → skip") + + if reset_only: + if not dry_run: + manifest["updated_at"] = datetime.now(tz=timezone.utc).isoformat() + MANIFEST_PATH.write_text( + json.dumps(manifest, indent=2, ensure_ascii=False) + "\n", + encoding="utf-8", + ) + return 0 + + channels = manifest.setdefault("channels", {}) + stats: dict[str, int] = {} + + for ch_name in sorted(AUTO_CHANNELS): + if ch_name in RETURN_CHANNELS: + continue + folder = export.channel_folder(ch_name) + if not folder: + continue + entry = channels.setdefault(ch_name, channel_shell()) + entry["messages"] = {} + if entry.get("status") == "import" and entry.get("import_mode", "all") != "pick": + print(f"#{ch_name}: whole-channel import — left unchanged") + continue + entry["import"] = True + entry["status"] = "partial" + entry["reviewed"] = True + entry["import_mode"] = "pick" + + latest_draft_msgs, draft_files_by_msg = build_latest_draft_winners(export, ch_name) + messages = entry.setdefault("messages", {}) + picked = 0 + for msg in export.iter_channel_messages(ch_name): + if not should_import(msg, ch_name, latest_draft_msgs=latest_draft_msgs): + continue + messages[msg["id"]] = msg_selection( + msg, latest_draft_files=draft_files_by_msg.get(msg["id"]) + ) + picked += 1 + stats[ch_name] = picked + print(f"#{ch_name}: {picked} msgs") + + total = sum(stats.values()) + print(f"\nTotal: {total} messages (data/files only)") + + if dry_run: + print("(dry-run — manifest not written)") + return 0 + + manifest["updated_at"] = datetime.now(tz=timezone.utc).isoformat() + note = manifest.get("global_notes") or "" + stamp = "auto-cherry-pick v3 — data/files only, no conversation" + if stamp not in note: + manifest["global_notes"] = (note + "\n" + stamp).strip() + MANIFEST_PATH.write_text( + json.dumps(manifest, indent=2, ensure_ascii=False) + "\n", + encoding="utf-8", + ) + print(f"Wrote {MANIFEST_PATH}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/build-test-fixture.py b/scripts/build-test-fixture.py new file mode 100644 index 0000000..d5ccdb8 --- /dev/null +++ b/scripts/build-test-fixture.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +"""Copy a small slice of the real Slack export into tests/fixtures/mini-export.""" + +from __future__ import annotations + +import json +import shutil +import sys +from pathlib import Path + +REPO = Path(__file__).resolve().parents[1] +DEFAULT_SRC = Path.home() / "Downloads/Levkin Slack export enriched" +DST = REPO / "tests" / "fixtures" / "mini-export" +CHANNELS = ("medical", "zoey", "153niagara") +MAX_DAY_FILES = 4 + + +def main() -> int: + src = Path(sys.argv[1]).expanduser() if len(sys.argv) > 1 else DEFAULT_SRC + if not src.is_dir(): + print(f"Export not found: {src}", file=sys.stderr) + return 1 + + if DST.exists(): + shutil.rmtree(DST) + DST.mkdir(parents=True) + + channels = json.loads((src / "channels.json").read_text(encoding="utf-8")) + users = json.loads((src / "users.json").read_text(encoding="utf-8")) + kept = [c for c in channels if c.get("name") in CHANNELS] + (DST / "channels.json").write_text( + json.dumps(kept, indent=2, ensure_ascii=False) + "\n", encoding="utf-8" + ) + (DST / "users.json").write_text( + json.dumps(users[:25], indent=2, ensure_ascii=False) + "\n", encoding="utf-8" + ) + + total_msgs = 0 + for name in CHANNELS: + sdir = src / name + ddir = DST / name + if not sdir.is_dir(): + print(f" skip missing channel #{name}", file=sys.stderr) + continue + ddir.mkdir() + for jf in sorted(sdir.glob("*.json"))[:MAX_DAY_FILES]: + shutil.copy2(jf, ddir / jf.name) + data = json.loads(jf.read_text(encoding="utf-8")) + if isinstance(data, list): + total_msgs += len(data) + + print(f"Wrote {DST}") + print(f" channels: {', '.join('#' + c['name'] for c in kept)}") + print(f" ~{total_msgs} messages (cap {MAX_DAY_FILES} day files per channel)") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/prepare-export.py b/scripts/prepare-export.py new file mode 100644 index 0000000..39dc78d --- /dev/null +++ b/scripts/prepare-export.py @@ -0,0 +1,223 @@ +#!/usr/bin/env python3 +"""Build a filtered Slack-shaped export from manifest.json for mmetl/mmctl.""" + +from __future__ import annotations + +import json +import shutil +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parents[1] +MANIFEST_PATH = REPO_ROOT / "manifest.json" +DEFAULT_EXPORT = Path.home() / "Downloads/Levkin Slack export enriched" +DEFAULT_OUT = REPO_ROOT / "prepared-export" + + +def message_key(channel: str, ts: str | float) -> str: + return f"{channel}:{ts}" + + +def channel_included(entry: dict) -> bool: + status = entry.get("status") + if status == "skip": + return False + if status == "import" and entry.get("import_mode", "all") != "pick": + return True + if status in ("import", "partial"): + picks = entry.get("messages") or {} + return any( + (sel.get("action") in ("import", "merge") or sel.get("checked")) + for sel in picks.values() + if isinstance(sel, dict) + ) + return False + + +def message_included(entry: dict, key: str) -> bool: + status = entry.get("status") + if status == "skip": + return False + if status == "import" and entry.get("import_mode", "all") != "pick": + return True + picks = entry.get("messages") or {} + sel = picks.get(key) + if not sel: + return False + if sel.get("action") == "skip": + return False + return sel.get("action") in ("import", "merge") or bool(sel.get("checked")) + + +def filter_files_on_message(entry: dict, key: str, raw: dict) -> dict: + """Return a copy of the Slack message with only manifest-selected files.""" + picks = entry.get("messages") or {} + sel = picks.get(key) or {} + file_flags = sel.get("files") if isinstance(sel.get("files"), dict) else {} + files = raw.get("files") + if not files: + return raw + out = dict(raw) + kept = [] + for f in files: + if not isinstance(f, dict): + continue + fid = f.get("id") or f.get("name") + if not fid: + continue + if file_flags and file_flags.get(fid) is False: + continue + kept.append(f) + if not kept: + out.pop("files", None) + else: + out["files"] = kept + return out + + +def prepare_export( + export_root: Path, + manifest: dict, + out_root: Path, + *, + export_mod=None, +) -> dict[str, int]: + """ + Write filtered export to out_root. Returns per-channel message counts. + """ + sys.path.insert(0, str(REPO_ROOT)) + from slack_export import SlackExport, load_json + + export = export_mod or SlackExport(export_root) + out_root = out_root.resolve() + if out_root.exists(): + shutil.rmtree(out_root) + out_root.mkdir(parents=True) + + channels_meta = load_json(export.paths.channels_json) + if not isinstance(channels_meta, list): + channels_meta = [] + + manifest_channels = manifest.get("channels") or {} + included_names: set[str] = set() + stats: dict[str, int] = {} + + for ch in channels_meta: + name = ch.get("name") + if not name: + continue + entry = manifest_channels.get(name) or {} + if not channel_included(entry): + continue + included_names.add(name) + + # channels.json subset + filtered_meta = [c for c in channels_meta if c.get("name") in included_names] + (out_root / "channels.json").write_text( + json.dumps(filtered_meta, indent=2, ensure_ascii=False) + "\n", + encoding="utf-8", + ) + + # users.json — copy whole (mmetl needs user mapping) + users_src = export.paths.users_json + if users_src.is_file(): + shutil.copy2(users_src, out_root / "users.json") + + uploads_out = out_root / "__uploads" + uploads_src = export.paths.root / "__uploads" + + for name in sorted(included_names): + entry = manifest_channels[name] + ch_out = out_root / name + ch_out.mkdir(parents=True) + count = 0 + for date in export.list_channel_date_files(name): + raw_list = export.read_messages_file(name, date) + if not isinstance(raw_list, list): + continue + kept: list[dict] = [] + for raw in raw_list: + if not isinstance(raw, dict): + continue + ts = raw.get("ts") + if ts is None: + continue + key = message_key(name, ts) + if not message_included(entry, key): + continue + msg = filter_files_on_message(entry, key, raw) + kept.append(msg) + count += 1 + for f in msg.get("files") or []: + if not isinstance(f, dict): + continue + fid = f.get("id") + fname = f.get("name") + if fid and fname and uploads_src.is_dir(): + src = uploads_src / fid / fname + if src.is_file(): + dest = uploads_out / fid / fname + dest.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(src, dest) + if kept: + (ch_out / f"{date}.json").write_text( + json.dumps(kept, indent=2, ensure_ascii=False) + "\n", + encoding="utf-8", + ) + stats[name] = count + + summary = { + "channels": len(stats), + "messages": sum(stats.values()), + "per_channel": stats, + } + (out_root / "prepare-export-summary.json").write_text( + json.dumps(summary, indent=2) + "\n", + encoding="utf-8", + ) + return stats + + +def main() -> int: + export_path = DEFAULT_EXPORT + out_path = DEFAULT_OUT + manifest_path = MANIFEST_PATH + + args = sys.argv[1:] + i = 0 + while i < len(args): + if args[i] == "--export" and i + 1 < len(args): + export_path = Path(args[i + 1]).expanduser() + i += 2 + elif args[i] == "--out" and i + 1 < len(args): + out_path = Path(args[i + 1]).expanduser() + i += 2 + elif args[i] == "--manifest" and i + 1 < len(args): + manifest_path = Path(args[i + 1]).expanduser() + i += 2 + elif not args[i].startswith("-"): + export_path = Path(args[i]).expanduser() + i += 1 + else: + i += 1 + + export_path = export_path.resolve() + if not export_path.is_dir(): + print(f"Export not found: {export_path}", file=sys.stderr) + return 1 + if not manifest_path.is_file(): + print(f"Manifest not found: {manifest_path}", file=sys.stderr) + return 1 + + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + stats = prepare_export(export_path, manifest, out_path.resolve()) + total = sum(stats.values()) + print(f"Wrote {out_path}") + print(f" {len(stats)} channels, {total} messages") + for name, n in sorted(stats.items()): + print(f" #{name}: {n}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/server.py b/server.py index ed75d3c..58b6984 100755 --- a/server.py +++ b/server.py @@ -315,6 +315,16 @@ class ReviewHandler(BaseHTTPRequestHandler): limit = min(int((qs.get("limit") or ["80"])[0]), 200) return self._send_json(self.export.search_global(query, limit=limit)) + if path == "/api/search-files": + query = (qs.get("q") or [""])[0] + file_type = (qs.get("type") or ["all"])[0] + limit = min(int((qs.get("limit") or ["80"])[0]), 200) + return self._send_json( + self.export.search_files_global( + query, file_type=file_type, limit=limit + ) + ) + if path.startswith("/api/channels/") and path.endswith("/search"): channel_name = path.split("/")[3] query = (qs.get("q") or [""])[0] @@ -386,6 +396,9 @@ class ReviewHandler(BaseHTTPRequestHandler): saved_messages = entry.get("messages") or entry.get("message_selections") if not isinstance(saved_messages, dict): saved_messages = {} + prev = current["channels"].get(name) or {} + prev_messages = prev.get("messages") if isinstance(prev.get("messages"), dict) else {} + merged_messages = {**prev_messages, **saved_messages} current["channels"][name] = { "import": status in ("import", "partial"), "status": status, @@ -395,7 +408,7 @@ class ReviewHandler(BaseHTTPRequestHandler): "notes": entry.get("notes") or "", "mattermost_channel": entry.get("mattermost_channel") or "", "mattermost_team": entry.get("mattermost_team") or "", - "messages": saved_messages, + "messages": merged_messages, } if isinstance(body.get("users"), dict): @@ -424,9 +437,19 @@ def main() -> int: ) parser.add_argument("--host", default="127.0.0.1") parser.add_argument("--port", type=int, default=8765) + parser.add_argument( + "--manifest", + default=os.environ.get("SLACK_MANIFEST_PATH"), + help="Path to manifest.json (default: repo manifest.json)", + ) args = parser.parse_args() paths = resolve_paths(args.export) + manifest_path = ( + Path(args.manifest).expanduser().resolve() + if args.manifest + else paths.manifest_json + ) try: export = SlackExport(paths.root) except FileNotFoundError as exc: @@ -440,13 +463,13 @@ def main() -> int: handler_cls = type( "BoundReviewHandler", (ReviewHandler,), - {"export": export, "manifest_path": paths.manifest_json}, + {"export": export, "manifest_path": manifest_path}, ) server = ThreadingHTTPServer((args.host, args.port), handler_cls) print(f"Slack import review UI: http://{args.host}:{args.port}") print(f"Export: {paths.root}") - print(f"Manifest: {paths.manifest_json}") + print(f"Manifest: {manifest_path}") try: server.serve_forever() except KeyboardInterrupt: diff --git a/slack_export.py b/slack_export.py index f8d1c17..7102477 100644 --- a/slack_export.py +++ b/slack_export.py @@ -169,6 +169,7 @@ class SlackExport: def channel_dirs(self) -> list[Path]: skip = { + "__uploads", "channels.json", "users.json", "canvases.json", @@ -373,6 +374,108 @@ class SlackExport: "users": users, } + @staticmethod + def classify_file(file: dict[str, Any]) -> str: + """Rough file bucket for search/filter UI.""" + mt = (file.get("mimetype") or "").lower() + name = (file.get("name") or "").lower() + ext = name.rsplit(".", 1)[-1] if "." in name else "" + + if mt.startswith("image/") or ext in { + "png", + "jpg", + "jpeg", + "gif", + "webp", + "bmp", + "svg", + "heic", + }: + return "image" + if ext == "pdf" or mt == "application/pdf": + return "pdf" + if ext in {"doc", "docx"} or "word" in mt: + return "doc" + if ext in {"xls", "xlsx", "csv"} or "spreadsheet" in mt or "excel" in mt: + return "spreadsheet" + if ext in {"ppt", "pptx"}: + return "slides" + if ext in {"zip", "rar", "7z", "gz"}: + return "archive" + if ext in {"mp4", "mov", "webm", "avi"} or mt.startswith("video/"): + return "video" + if ext in {"mp3", "m4a", "wav"} or mt.startswith("audio/"): + return "audio" + if ext in {"txt", "md", "log", "json"} or mt.startswith("text/"): + return "text" + return "other" + + def message_file_kinds(self, msg: dict[str, Any]) -> set[str]: + return {self.classify_file(f) for f in msg.get("files") or []} + + def search_files_global( + self, + query: str = "", + *, + file_type: str = "all", + limit: int = 80, + ) -> dict[str, Any]: + """Find messages with attachments across all channels.""" + q = query.strip() + pattern = re.compile(re.escape(q), re.IGNORECASE) if q else None + type_filter = (file_type or "all").strip().lower() + hits: list[dict[str, Any]] = [] + + for folder in self.channel_dirs(): + if len(hits) >= limit: + break + channel_name = folder.name + for date in self.list_channel_date_files(channel_name): + if len(hits) >= limit: + break + for raw in self.read_messages_file(channel_name, date): + normalized = self.normalize_message(raw, channel_name, date) + files = normalized.get("files") or [] + if not files: + continue + kinds = self.message_file_kinds(normalized) + if type_filter != "all" and type_filter not in kinds: + continue + if pattern: + hay = " ".join( + [ + normalized.get("text") or "", + normalized.get("user_name") or "", + channel_name, + " ".join(f.get("name") or "" for f in files), + ] + ) + if not pattern.search(hay): + continue + matching = files + if type_filter != "all": + matching = [ + f + for f in files + if self.classify_file(f) == type_filter + ] + hits.append( + { + **normalized, + "matching_files": matching, + "file_kinds": sorted(kinds), + } + ) + if len(hits) >= limit: + break + + return { + "query": q, + "file_type": type_filter, + "hits": hits, + "total": len(hits), + } + def search_channels(self, query: str) -> list[dict[str, Any]]: q = query.strip().lower() summary = self.build_summary()["channels"] diff --git a/static/app.css b/static/app.css index 7769626..9422859 100644 --- a/static/app.css +++ b/static/app.css @@ -12,11 +12,65 @@ --skip-bg: rgba(224, 108, 117, 0.12); --undecided: #f0b429; --highlight: rgba(91, 141, 239, 0.35); + --scrollbar-track: #1a2030; + --scrollbar-thumb: #5a6a88; + --scrollbar-thumb-hover: #7a8aab; font-family: "SF Pro Text", "Segoe UI", system-ui, sans-serif; } * { box-sizing: border-box; } +/* Scrollbars — visible on dark panels (Firefox + WebKit) */ +.list, +.messages, +.search-results, +.preview-doc-scroll, +.panel.right, +.messages-wrap { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); +} + +.list::-webkit-scrollbar, +.messages::-webkit-scrollbar, +.search-results::-webkit-scrollbar, +.preview-doc-scroll::-webkit-scrollbar, +.panel.right::-webkit-scrollbar, +.messages-wrap::-webkit-scrollbar { + width: 11px; + height: 11px; +} + +.list::-webkit-scrollbar-track, +.messages::-webkit-scrollbar-track, +.search-results::-webkit-scrollbar-track, +.preview-doc-scroll::-webkit-scrollbar-track, +.panel.right::-webkit-scrollbar-track, +.messages-wrap::-webkit-scrollbar-track { + background: var(--scrollbar-track); + border-radius: 6px; +} + +.list::-webkit-scrollbar-thumb, +.messages::-webkit-scrollbar-thumb, +.search-results::-webkit-scrollbar-thumb, +.preview-doc-scroll::-webkit-scrollbar-thumb, +.panel.right::-webkit-scrollbar-thumb, +.messages-wrap::-webkit-scrollbar-thumb { + background: var(--scrollbar-thumb); + border-radius: 6px; + border: 2px solid var(--scrollbar-track); +} + +.list::-webkit-scrollbar-thumb:hover, +.messages::-webkit-scrollbar-thumb:hover, +.search-results::-webkit-scrollbar-thumb:hover, +.preview-doc-scroll::-webkit-scrollbar-thumb:hover, +.panel.right::-webkit-scrollbar-thumb:hover, +.messages-wrap::-webkit-scrollbar-thumb:hover { + background: var(--scrollbar-thumb-hover); +} + body { margin: 0; background: var(--bg); @@ -62,8 +116,25 @@ header.topbar { max-width: 480px; } -.global-search-wrap input { - width: 100%; +.global-search-row { + display: flex; + gap: 0.35rem; + align-items: center; +} + +.global-search-row select { + background: var(--bg); + border: 1px solid var(--border); + border-radius: 8px; + color: var(--text); + padding: 0.4rem 0.35rem; + font-size: 0.78rem; + max-width: 5.5rem; +} + +.global-search-row input { + flex: 1; + min-width: 0; background: var(--bg); border: 1px solid var(--border); border-radius: 8px; @@ -72,6 +143,34 @@ header.topbar { font-size: 0.9rem; } +.message-filters select { + background: var(--bg); + border: 1px solid var(--border); + border-radius: 6px; + color: var(--text); + padding: 0.3rem 0.4rem; + font-size: 0.78rem; +} + +.btn-mini { + background: var(--panel-2); + border: 1px solid var(--border); + border-radius: 6px; + color: var(--text); + font-size: 0.72rem; + padding: 0.28rem 0.45rem; + cursor: pointer; +} + +.btn-mini:hover { + border-color: var(--accent); +} + +.btn-mini.active { + border-color: var(--import); + background: var(--import-bg); +} + .search-results { position: absolute; top: calc(100% + 4px); diff --git a/static/app.js b/static/app.js index 1315d67..31b6998 100644 --- a/static/app.js +++ b/static/app.js @@ -33,6 +33,8 @@ const state = { const els = { stats: document.getElementById("stats"), globalSearch: document.getElementById("global-search"), + globalSearchMode: document.getElementById("global-search-mode"), + globalFileType: document.getElementById("global-file-type"), globalSearchResults: document.getElementById("global-search-results"), sidebarSearch: document.getElementById("sidebar-search"), filterStatus: document.getElementById("filter-status"), @@ -43,6 +45,9 @@ const els = { channelMeta: document.getElementById("channel-meta"), importModePick: document.getElementById("import-mode-pick"), messageSearch: document.getElementById("message-search"), + filterAttachmentType: document.getElementById("filter-attachment-type"), + btnSelectImages: document.getElementById("btn-select-images"), + btnSelectFiles: document.getElementById("btn-select-files"), filterHideBots: document.getElementById("filter-hide-bots"), filterHideSystem: document.getElementById("filter-hide-system"), filterOnlySelected: document.getElementById("filter-only-selected"), @@ -115,6 +120,22 @@ function isImageFile(file) { return ["png", "jpg", "jpeg", "gif", "webp", "bmp", "svg", "heic"].includes(ext); } +function fileKind(file) { + const mt = (file.mimetype || "").toLowerCase(); + const name = (file.name || "").toLowerCase(); + const ext = name.includes(".") ? name.split(".").pop() : ""; + if (isImageFile(file)) return "image"; + if (ext === "pdf" || mt === "application/pdf") return "pdf"; + if (["doc", "docx"].includes(ext) || mt.includes("word")) return "doc"; + if (["xls", "xlsx", "csv"].includes(ext) || mt.includes("spreadsheet") || mt.includes("excel")) + return "spreadsheet"; + return "other"; +} + +function messageKinds(msg) { + return new Set((msg.files || []).map(fileKind)); +} + function fileExtLabel(name) { const ext = (name || "").split(".").pop()?.toUpperCase() || ""; if (!ext || ext.length > 6) return "FILE"; @@ -383,20 +404,45 @@ function userEntry(id) { return state.userManifest[id]; } +function channelUsesCherryPick(ch) { + return ch.import_mode === "pick" || ch.status === "partial"; +} + function effectiveMsgAction(channelName, msg) { const ch = channelEntry(channelName); const sel = ch.messages[msg.id]; const explicit = sel?.action; - if (explicit && explicit !== "inherit") return explicit; + if (explicit === "import" || explicit === "merge" || explicit === "skip") { + return explicit; + } - if (ch.import_mode === "pick") { - return sel?.import === true || sel?.checked ? "import" : "skip"; + if (channelUsesCherryPick(ch)) { + return "skip"; } if (ch.status === "import") return "import"; if (ch.status === "skip") return "skip"; return "skip"; } +function clearMsgSelection(channelName, msgId) { + const ch = channelEntry(channelName); + if (ch.messages?.[msgId]) { + delete ch.messages[msgId]; + } +} + +function setMsgImport(channelName, msg, on) { + if (!on) { + clearMsgSelection(channelName, msg.id); + return; + } + ensureCherryPick(); + const sel = msgEntry(channelName, msg.id); + sel.action = "import"; + sel.checked = true; + sel.merge_target = ""; +} + function isMsgSelected(channelName, msg) { const action = effectiveMsgAction(channelName, msg); return action === "import" || action === "merge"; @@ -423,6 +469,22 @@ function reviewedCount() { return state.channels.filter((c) => channelEntry(c.name).reviewed).length; } +function channelPickCount(name) { + const msgs = channelEntry(name).messages || {}; + return Object.values(msgs).filter( + (m) => m.action === "import" || m.action === "merge" + ).length; +} + +function channelHasPicks(name) { + const entry = channelEntry(name); + return ( + entry.status === "partial" || + entry.import_mode === "pick" || + channelPickCount(name) > 0 + ); +} + function visibleChannelList() { const q = els.sidebarSearch.value.trim().toLowerCase(); const statusFilter = els.filterStatus.value; @@ -432,7 +494,9 @@ function visibleChannelList() { const entry = channelEntry(ch.name); const status = entry.status === "partial" ? "partial" : entry.status; if (hideArchived && ch.is_archived) return false; - if (statusFilter !== "all" && status !== statusFilter) return false; + if (statusFilter === "partial") { + if (!channelHasPicks(ch.name)) return false; + } else if (statusFilter !== "all" && status !== statusFilter) return false; if (!q) return true; return ( ch.name.toLowerCase().includes(q) || @@ -499,8 +563,13 @@ function renderSidebar() { btn.type = "button"; btn.className = "list-item" + (state.selectedChannel === ch.name ? " active" : ""); + const picks = channelPickCount(ch.name); const mode = - entry.import_mode === "pick" ? " · cherry-pick" : ""; + entry.import_mode === "pick" || picks > 0 + ? picks > 0 + ? ` · ${formatNumber(picks)} picked` + : " · cherry-pick" + : ""; btn.innerHTML = `
@@ -608,13 +677,19 @@ function ensureCherryPick() { function setMessageAction(msg, action, { advance = false } = {}) { if (!state.selectedChannel || !msg) return; - ensureCherryPick(); - const sel = msgEntry(state.selectedChannel, msg.id); - sel.action = action; - sel.checked = action === "import" || action === "merge"; - if (action !== "merge") sel.merge_target = ""; + if (action === "import" || action === "merge") { + ensureCherryPick(); + const sel = msgEntry(state.selectedChannel, msg.id); + sel.action = action; + sel.checked = true; + if (action !== "merge") sel.merge_target = ""; + } else { + clearMsgSelection(state.selectedChannel, msg.id); + } renderAllMessages(); + renderSidebar(); + updateTriageBar(); scheduleAutosave(); if (advance) { @@ -632,8 +707,7 @@ function toggleFocusedImport() { const msg = state.allMessages.find((m) => m.id === state.focusMessageId); if (!msg || !state.selectedChannel) return; const sel = msgEntry(state.selectedChannel, msg.id); - const currentlyOn = - sel.action === "import" || sel.action === "merge" || sel.checked; + const currentlyOn = isMsgSelected(state.selectedChannel, msg); setMessageAction(msg, currentlyOn ? "skip" : "import", { advance: false }); } @@ -716,6 +790,15 @@ function messagePassesFilters(msg) { if (els.filterOnlySelected.checked && state.selectedChannel) { if (!isMsgSelected(state.selectedChannel, msg)) return false; } + const att = els.filterAttachmentType?.value || "all"; + if (att !== "all") { + const kinds = messageKinds(msg); + if (att === "any") { + if (!msg.files?.length) return false; + } else if (!kinds.has(att)) { + return false; + } + } return true; } @@ -723,7 +806,7 @@ function messageRowHtml(msg, q) { const ch = state.selectedChannel; const action = effectiveMsgAction(ch, msg); const sel = msgEntry(ch, msg.id); - const checked = action === "import" || action === "merge" || sel.checked; + const checked = action === "import" || action === "merge"; const classes = ["message"]; if (msg.is_thread_reply) classes.push("thread-reply"); @@ -796,6 +879,7 @@ function renderAllMessages() { els.filterCount.textContent = `${shown} / ${state.allMessages.length} shown`; renderSelectionSummary(); updateMessageNavStatus(); + updateBulkSelectButtons(); if (state.focusMessageId) { const row = els.messages.querySelector( @@ -808,20 +892,21 @@ function renderAllMessages() { function openMessageDetail(msg) { state.selectedMessageId = msg.id; const ch = state.selectedChannel; - const sel = msgEntry(ch, msg.id); + const saved = channelEntry(ch).messages[msg.id]; + const isOn = isMsgSelected(ch, msg); els.messageDetail.classList.remove("hidden"); els.msgPreview.textContent = `${msg.user_name}: ${(msg.text || "[no text]").slice(0, 200)}`; els.msgAction.value = - sel.action && sel.action !== "inherit" - ? sel.action - : isMsgSelected(ch, msg) + saved?.action && saved.action !== "inherit" + ? saved.action + : isOn ? "import" : "inherit"; - els.msgMergeTarget.value = sel.merge_target || ""; + els.msgMergeTarget.value = saved?.merge_target || ""; els.msgMergeTarget.classList.toggle("hidden", els.msgAction.value !== "merge"); - els.msgNotes.value = sel.notes || ""; + els.msgNotes.value = saved?.notes || ""; if (msg.is_thread_parent || msg.thread_reply_count > 0) { els.btnThreadAll.classList.remove("hidden"); @@ -846,7 +931,7 @@ function openMessageDetail(msg) { els.fileToggles.innerHTML = ""; for (const f of msg.files) { const fid = f.id || f.name; - const on = sel.files[fid] !== false; + const on = isOn && saved?.files?.[fid] !== false; const url = fileUploadUrl(f); const row = document.createElement("div"); row.className = "file-toggle-row"; @@ -876,10 +961,14 @@ function applyThreadImport(rootMsg, action) { String(msg.ts) === rootTs || String(msg.thread_root_ts) === rootTs ) { - const sel = msgEntry(ch, msg.id); - sel.action = action; - sel.checked = action === "import"; - if (action !== "merge") sel.merge_target = ""; + if (action === "import" || action === "merge") { + const sel = msgEntry(ch, msg.id); + sel.action = action; + sel.checked = true; + if (action !== "merge") sel.merge_target = ""; + } else { + clearMsgSelection(ch, msg.id); + } } } if (channelEntry(ch).import_mode !== "pick") { @@ -893,25 +982,28 @@ function applyThreadImport(rootMsg, action) { function applyMessageDetailFromForm() { if (!state.selectedChannel || !state.selectedMessageId) return; - const sel = msgEntry(state.selectedChannel, state.selectedMessageId); - sel.action = els.msgAction.value; - sel.merge_target = - els.msgAction.value === "merge" ? els.msgMergeTarget.value.trim() : ""; - sel.notes = els.msgNotes.value; - sel.checked = sel.action === "import" || sel.action === "merge"; + const action = els.msgAction.value; + const msg = state.allMessages.find((m) => m.id === state.selectedMessageId); + if (!msg) return; - els.fileToggles.querySelectorAll("[data-file-id]").forEach((inp) => { - sel.files[inp.dataset.fileId] = inp.checked; - }); - - const ch = channelEntry(state.selectedChannel); - if (sel.action !== "inherit") { - ch.import_mode = "pick"; - ch.status = "partial"; - ch.reviewed = true; - els.importModePick.checked = true; + if (action === "skip" || action === "inherit") { + clearMsgSelection(state.selectedChannel, state.selectedMessageId); + } else { + ensureCherryPick(); + const sel = msgEntry(state.selectedChannel, state.selectedMessageId); + sel.action = action; + sel.checked = action === "import" || action === "merge"; + sel.merge_target = action === "merge" ? els.msgMergeTarget.value.trim() : ""; + sel.notes = els.msgNotes.value; + els.fileToggles.querySelectorAll("[data-file-id]").forEach((inp) => { + if (!sel.files) sel.files = {}; + sel.files[inp.dataset.fileId] = inp.checked; + }); } + renderAllMessages(); + renderSidebar(); + updateTriageBar(); scheduleAutosave(); } @@ -1038,60 +1130,166 @@ function skipChannel() { persistNotes(); } +function syncGlobalSearchModeUi() { + const filesMode = els.globalSearchMode.value === "files"; + els.globalFileType.classList.toggle("hidden", !filesMode); + els.globalSearch.placeholder = filesMode + ? "Search attachments in all channels… (optional keywords)" + : "Search channels & messages… (press /)"; +} + +async function jumpToSearchHit(ch, msgId) { + els.globalSearchResults.classList.add("hidden"); + els.globalSearch.value = ""; + await selectChannel(ch); + if (msgId) { + const msg = state.allMessages.find((m) => m.id === msgId); + if (msg) { + requestAnimationFrame(() => { + focusMessage(msg.id); + openMessageDetail(msg); + document + .querySelector( + `[data-id="${msgId.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"]` + ) + ?.scrollIntoView({ block: "center" }); + }); + } + } +} + async function runGlobalSearch(query) { - if (!query.trim()) { + const filesMode = els.globalSearchMode.value === "files"; + if (!filesMode && !query.trim()) { els.globalSearchResults.classList.add("hidden"); return; } - const data = await api(`/api/search?q=${encodeURIComponent(query)}&limit=60`); const parts = []; - if (data.channels?.length) { - parts.push('

Channels

'); - for (const ch of data.channels.slice(0, 12)) { - parts.push( - `` - ); + + if (filesMode) { + const ft = els.globalFileType.value || "all"; + const data = await api( + `/api/search-files?q=${encodeURIComponent(query)}&type=${encodeURIComponent(ft)}&limit=60` + ); + if (data.hits?.length) { + const label = + ft === "all" ? "Attachments" : `${ft} files`; + parts.push(`

${escapeHtml(label)}

`); + for (const m of data.hits.slice(0, 25)) { + const names = (m.matching_files || m.files || []) + .map((f) => f.name) + .filter(Boolean) + .slice(0, 2) + .join(", "); + parts.push( + `` + ); + } + parts.push("
"); } - parts.push("
"); - } - if (data.messages?.length) { - parts.push('

Messages

'); - for (const m of data.messages.slice(0, 20)) { - parts.push( - `` - ); + } else { + const data = await api(`/api/search?q=${encodeURIComponent(query)}&limit=60`); + if (data.channels?.length) { + parts.push('

Channels

'); + for (const ch of data.channels.slice(0, 12)) { + parts.push( + `` + ); + } + parts.push("
"); + } + if (data.messages?.length) { + parts.push('

Messages

'); + for (const m of data.messages.slice(0, 20)) { + parts.push( + `` + ); + } + parts.push("
"); } - parts.push("
"); } + els.globalSearchResults.innerHTML = parts.join("") || '
No results
'; els.globalSearchResults.classList.remove("hidden"); els.globalSearchResults.querySelectorAll(".search-hit").forEach((btn) => { - btn.addEventListener("click", async () => { - const ch = btn.dataset.channel; - els.globalSearchResults.classList.add("hidden"); - els.globalSearch.value = ""; - await selectChannel(ch); - const msgId = btn.dataset.msg; - if (msgId) { - const msg = state.allMessages.find((m) => m.id === msgId); - if (msg) { - requestAnimationFrame(() => { - openMessageDetail(msg); - document.querySelector(`[data-id="${msgId}"]`)?.scrollIntoView({ - block: "center", - }); - }); - } - } - }); + btn.addEventListener("click", () => jumpToSearchHit(btn.dataset.channel, btn.dataset.msg)); }); } +function visibleFileMessages(imagesOnly) { + return visibleMessages().filter((msg) => { + const files = msg.files || []; + if (!files.length) return false; + if (imagesOnly && !files.some(isImageFile)) return false; + return true; + }); +} + +function selectVisibleFileMessages({ imagesOnly = false } = {}) { + if (!state.selectedChannel) return; + ensureCherryPick(); + const targets = visibleFileMessages(imagesOnly); + const allSelected = + targets.length > 0 && + targets.every((msg) => isMsgSelected(state.selectedChannel, msg)); + let n = 0; + for (const msg of targets) { + const sel = msgEntry(state.selectedChannel, msg.id); + if (allSelected) { + clearMsgSelection(state.selectedChannel, msg.id); + } else { + setMsgImport(state.selectedChannel, msg, true); + const sel = msgEntry(state.selectedChannel, msg.id); + for (const f of msg.files || []) { + const fid = f.id || f.name; + if (!fid) continue; + if (imagesOnly && !isImageFile(f)) continue; + sel.files[fid] = true; + } + } + n += 1; + } + renderAllMessages(); + renderSidebar(); + updateTriageBar(); + scheduleAutosave(); + const label = imagesOnly ? "image" : "file"; + const verb = allSelected ? "Cleared" : "Selected"; + els.saveStatus.textContent = `${verb} ${n} ${label} message(s) in view`; + updateBulkSelectButtons(); + setTimeout(() => { + els.saveStatus.textContent = ""; + }, 2500); +} + +function updateBulkSelectButtons() { + if (!els.btnSelectImages || !els.btnSelectFiles) return; + const imgTargets = visibleFileMessages(true); + const fileTargets = visibleFileMessages(false); + const imgAll = + imgTargets.length > 0 && + imgTargets.every((m) => isMsgSelected(state.selectedChannel, m)); + const fileAll = + fileTargets.length > 0 && + fileTargets.every((m) => isMsgSelected(state.selectedChannel, m)); + els.btnSelectImages.textContent = imgAll ? "Clear images in view" : "Select images in view"; + els.btnSelectFiles.textContent = fileAll ? "Clear files in view" : "Select files in view"; + els.btnSelectImages.classList.toggle("active", imgAll); + els.btnSelectFiles.classList.toggle("active", fileAll); +} + +function selectVisibleImageMessages() { + selectVisibleFileMessages({ imagesOnly: true }); +} + function scheduleAutosave() { clearTimeout(state.saveTimer); state.saveTimer = setTimeout(() => saveManifest(true), 600); @@ -1131,11 +1329,15 @@ async function loadChannels() { e.import = !!ch.import; e.status = ch.status || (ch.import ? "import" : "undecided"); e.reviewed = !!ch.reviewed || ["import", "skip", "partial"].includes(e.status); - e.import_mode = ch.import_mode || "all"; + e.import_mode = + ch.import_mode === "pick" || ch.status === "partial" ? "pick" : ch.import_mode || "all"; + if (ch.status === "partial" && e.import_mode !== "pick") { + e.import_mode = "pick"; + } e.notes = ch.notes || ""; e.mattermost_channel = ch.mattermost_channel || ""; e.mattermost_team = ch.mattermost_team || ""; - if (ch.message_selections) e.messages = ch.message_selections; + // Message picks come from loadManifest() only — avoid clobbering on parallel load. } } @@ -1149,6 +1351,7 @@ async function loadManifest() { function onMessageListClick(e) { if (!state.selectedChannel) return; + if (e.target.closest(".msg-check")) return; const previewBtn = e.target.closest( ".image-preview, .file-doc-preview, .file-open-link[data-preview-file-id], .file-open-link[data-preview-url]" @@ -1165,27 +1368,6 @@ function onMessageListClick(e) { return; } - const check = e.target.closest("[data-msg-check]"); - if (check) { - e.stopPropagation(); - const row = check.closest(".message"); - const msg = state.allMessages.find((m) => m.id === row?.dataset.id); - if (!msg) return; - const sel = msgEntry(state.selectedChannel, msg.id); - if (check.checked) { - sel.action = "import"; - sel.checked = true; - } else { - sel.action = "skip"; - sel.checked = false; - } - ensureCherryPick(); - renderAllMessages(); - scheduleAutosave(); - focusMessage(msg.id, { scroll: false }); - return; - } - const row = e.target.closest(".message"); if (!row) return; const msg = state.allMessages.find((m) => m.id === row.dataset.id); @@ -1212,6 +1394,7 @@ function bindEvents() { [ els.messageSearch, + els.filterAttachmentType, els.filterHideBots, els.filterHideSystem, els.filterOnlySelected, @@ -1220,6 +1403,22 @@ function bindEvents() { el.addEventListener("change", renderAllMessages); }); + els.btnSelectImages?.addEventListener("click", selectVisibleImageMessages); + els.btnSelectFiles?.addEventListener("click", () => selectVisibleFileMessages()); + els.globalSearchMode.addEventListener("change", () => { + syncGlobalSearchModeUi(); + const q = els.globalSearch.value; + if (els.globalSearchMode.value === "files" || q.trim()) { + runGlobalSearch(q); + } else { + els.globalSearchResults.classList.add("hidden"); + } + }); + els.globalFileType.addEventListener("change", () => { + if (els.globalSearchMode.value === "files") runGlobalSearch(els.globalSearch.value); + }); + syncGlobalSearchModeUi(); + els.importModePick.addEventListener("change", () => { if (!state.selectedChannel) return; const entry = channelEntry(state.selectedChannel); @@ -1244,6 +1443,24 @@ function bindEvents() { els.btnMsgPrev.addEventListener("click", goPrevMessage); els.messages.addEventListener("click", onMessageListClick); + els.messages.addEventListener("change", (e) => { + const input = e.target.closest("input[data-msg-check]"); + if (!input || !state.selectedChannel) return; + e.stopPropagation(); + const row = input.closest(".message"); + const msg = state.allMessages.find((m) => m.id === row?.dataset.id); + if (!msg) return; + setMsgImport(state.selectedChannel, msg, input.checked); + renderAllMessages(); + renderSidebar(); + updateTriageBar(); + scheduleAutosave(); + if (state.selectedMessageId === msg.id) { + openMessageDetail(msg); + } else { + focusMessage(msg.id, { scroll: false }); + } + }); els.msgAction.addEventListener("change", () => { els.msgMergeTarget.classList.toggle("hidden", els.msgAction.value !== "merge"); @@ -1266,7 +1483,7 @@ function bindEvents() { els.globalSearch.addEventListener("input", () => { clearTimeout(state.globalSearchTimer); const q = els.globalSearch.value; - if (!q.trim()) { + if (!q.trim() && els.globalSearchMode.value !== "files") { els.globalSearchResults.classList.add("hidden"); return; } @@ -1358,7 +1575,13 @@ async function init() { bindEvents(); try { const summary = await api("/api/summary"); - await Promise.all([loadManifest(), loadChannels(), api("/api/users").then((d) => { state.users = d.users; })]); + await loadManifest(); + await Promise.all([ + loadChannels(), + api("/api/users").then((d) => { + state.users = d.users; + }), + ]); renderStats(summary); renderSidebar(); renderSelectionSummary(); diff --git a/static/index.html b/static/index.html index 1c122ac..3d8ebec 100644 --- a/static/index.html +++ b/static/index.html @@ -12,12 +12,29 @@

Slack import review

- +
+ + + +
@@ -33,7 +50,7 @@ - + @@ -73,6 +90,16 @@
+ + + diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..1033f31 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,69 @@ +# Tests + +## Fixture (seeded from your export) + +`tests/fixtures/mini-export/` is a small slice of the real Levkin export: + +- `#medical`, `#zoey`, `#153niagara` (first 4 day-files each, ~54 messages) +- Regenerate after export changes: + +```bash +make fixture +# or +python3 scripts/build-test-fixture.py "/path/to/export" +``` + +## Python (unit + API) + +```bash +make test-unit +``` + +Covers: + +- `slack_export.py` — parse, search, file types +- `scripts/auto-cherry-pick.py` — drafts, data-only rules, return channels +- `server.py` — HTTP API against mini-export + +Uses `.venv` automatically. + +## Playwright (UI) + +```bash +make test-e2e +``` + +Covers: + +- Channel list, filters (**All** / **Has picks**) +- Cherry-pick checkbox on/off +- Detail panel **Skip** +- **Only selected** filter +- Global **Files** search + +Runs server on port **18765** with `tests/fixtures/test-manifest.json`. + +## All + +```bash +make test +``` + +## Coverage + +```bash +make test-unit # includes --cov report +``` + +Current targets (~**98%** Python, **11** Playwright tests): + +| Module | Coverage | Notes | +|--------|----------|-------| +| `slack_export.py` | ~98% | canvases index, HTTP 401, search limits | +| `server.py` | ~98% | logging when not quiet, empty DOCX body | +| `scripts/auto-cherry-pick.py` | via `test_auto_cherry_pick_main.py` | full `main()` on fixture | +| `static/app.js` | Playwright e2e | bulk select, text search, save | + +**100** pytest cases + **11** e2e. Manifest is copied per session and reset before each API test so POST cases do not leak state. + +Server runs **in-process** during pytest; Playwright uses port **18765**. diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..d0b80c5 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,138 @@ +"""Pytest fixtures — mini-export seeded from real Levkin Slack data.""" + +from __future__ import annotations + +import importlib.util +import json +import shutil +import socket +import sys +import time +import urllib.error +import urllib.request +from pathlib import Path + +import pytest + +REPO_ROOT = Path(__file__).resolve().parents[1] +FIXTURE_EXPORT = REPO_ROOT / "tests" / "fixtures" / "mini-export" +TEST_MANIFEST = REPO_ROOT / "tests" / "fixtures" / "test-manifest.json" + + +def _load_cherry_pick_module(): + path = REPO_ROOT / "scripts" / "auto-cherry-pick.py" + spec = importlib.util.spec_from_file_location("auto_cherry_pick", path) + mod = importlib.util.module_from_spec(spec) + assert spec.loader + spec.loader.exec_module(mod) + return mod + + +@pytest.fixture(scope="session") +def cherry_pick(): + return _load_cherry_pick_module() + + +@pytest.fixture(scope="session") +def fixture_export_path() -> Path: + assert FIXTURE_EXPORT.is_dir(), ( + f"Run: python3 scripts/build-test-fixture.py ({FIXTURE_EXPORT})" + ) + return FIXTURE_EXPORT + + +@pytest.fixture +def export(fixture_export_path): + sys.path.insert(0, str(REPO_ROOT)) + from slack_export import SlackExport + + return SlackExport(fixture_export_path) + + +@pytest.fixture +def empty_manifest(fixture_export_path, tmp_path): + data = { + "version": 1, + "export_path": str(fixture_export_path), + "updated_at": None, + "global_notes": "", + "channels": {}, + "users": {}, + } + path = tmp_path / "manifest.json" + path.write_text(json.dumps(data, indent=2) + "\n", encoding="utf-8") + return path, data + + +def _free_port() -> int: + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(("127.0.0.1", 0)) + return s.getsockname()[1] + + +def _wait_health(url: str, timeout: float = 8.0) -> None: + deadline = time.time() + timeout + while time.time() < deadline: + try: + with urllib.request.urlopen(url, timeout=1) as resp: + if resp.status == 200: + return + except (urllib.error.URLError, TimeoutError): + time.sleep(0.15) + raise RuntimeError(f"Server did not start: {url}") + + +@pytest.fixture(scope="session") +def review_server(tmp_path_factory): + """Start review server in-process (for coverage) with isolated manifest copy.""" + import os + import threading + from http.server import ThreadingHTTPServer + + sys.path.insert(0, str(REPO_ROOT)) + from server import ReviewHandler + from slack_export import SlackExport + + port = _free_port() + manifest = tmp_path_factory.mktemp("manifest") / "manifest.json" + shutil.copy(TEST_MANIFEST, manifest) + export = SlackExport(FIXTURE_EXPORT) + handler_cls = type( + "BoundReviewHandler", + (ReviewHandler,), + {"export": export, "manifest_path": manifest}, + ) + os.environ["SLACK_IMPORT_QUIET"] = "1" + httpd = ThreadingHTTPServer(("127.0.0.1", port), handler_cls) + thread = threading.Thread(target=httpd.serve_forever, daemon=True) + thread.start() + base = f"http://127.0.0.1:{port}" + try: + _wait_health(f"{base}/api/health") + yield {"base": base, "port": port, "httpd": httpd, "manifest_path": manifest} + finally: + httpd.shutdown() + + +@pytest.fixture +def api(review_server): + # Reset manifest so POST tests cannot leak state across cases. + shutil.copy(TEST_MANIFEST, review_server["manifest_path"]) + base = review_server["base"] + + def get(path: str) -> dict: + with urllib.request.urlopen(f"{base}{path}", timeout=5) as resp: + return json.loads(resp.read().decode()) + + def post(path: str, body: dict) -> dict: + data = json.dumps(body).encode("utf-8") + req = urllib.request.Request( + f"{base}{path}", + data=data, + headers={"Content-Type": "application/json"}, + method="POST", + ) + with urllib.request.urlopen(req, timeout=5) as resp: + return json.loads(resp.read().decode()) + + return {"get": get, "post": post, "base": base} diff --git a/tests/e2e/review-ui.spec.ts b/tests/e2e/review-ui.spec.ts new file mode 100644 index 0000000..94e40dc --- /dev/null +++ b/tests/e2e/review-ui.spec.ts @@ -0,0 +1,139 @@ +import { test, expect } from "@playwright/test"; + +const BASE = process.env.SLACK_REVIEW_URL || "http://127.0.0.1:18765"; + +async function waitForAppReady(page: import("@playwright/test").Page) { + await page.goto(BASE); + await expect(page.locator("#channel-title")).not.toHaveText("Select a channel", { + timeout: 15_000, + }); +} + +async function showAllChannels(page: import("@playwright/test").Page) { + await page.locator("#filter-status").selectOption("all"); + await expect(page.locator("#sidebar-list .list-item").first()).toBeVisible(); +} + +async function openChannel(page: import("@playwright/test").Page, name: string) { + await showAllChannels(page); + const btn = page.locator("#sidebar-list button").filter({ hasText: name }); + await btn.first().click(); +} + +test.describe("Review UI", () => { + test.beforeAll(async ({ request }) => { + const res = await request.get(`${BASE}/api/health`); + expect(res.ok()).toBeTruthy(); + }); + + test("loads channel list and stats", async ({ page }) => { + await waitForAppReady(page); + await expect(page.locator("h1")).toHaveText("Slack import review"); + await expect(page.locator("#stats")).not.toBeEmpty(); + await expect(page.locator("#sidebar-list .list-item").first()).toBeVisible({ + timeout: 10_000, + }); + }); + + test("opens medical channel and shows messages", async ({ page }) => { + await waitForAppReady(page); + await openChannel(page, "medical"); + await expect(page.locator("#channel-title")).toHaveText("#medical"); + await expect(page.locator(".message").first()).toBeVisible({ timeout: 10_000 }); + }); + + test("cherry-pick checkbox toggles on and off", async ({ page }) => { + await waitForAppReady(page); + await openChannel(page, "medical"); + await page.waitForSelector(".message", { timeout: 10_000 }); + + const row = page.locator(".message").first(); + const checkbox = row.locator("input[data-msg-check]"); + await checkbox.check(); + await expect(row).toHaveClass(/sel-import/); + + await checkbox.uncheck(); + await expect(row).not.toHaveClass(/sel-import/); + }); + + test("detail panel skip clears selection", async ({ page }) => { + await waitForAppReady(page); + await openChannel(page, "medical"); + await page.waitForSelector(".message", { timeout: 10_000 }); + + const row = page.locator(".message").first(); + await row.click(); + await expect(page.locator("#message-detail")).toBeVisible(); + await page.locator("#msg-action").selectOption("import"); + await expect(row).toHaveClass(/sel-import/); + + await page.locator("#msg-action").selectOption("skip"); + await expect(row).not.toHaveClass(/sel-import/); + }); + + test("filter only selected hides unchecked", async ({ page }) => { + await waitForAppReady(page); + await openChannel(page, "zoey"); + await page.waitForSelector(".message", { timeout: 10_000 }); + + const before = await page.locator(".message").count(); + const checkbox = page.locator(".message").first().locator("input[data-msg-check]"); + await checkbox.check(); + await page.locator("#filter-only-selected").check(); + const after = await page.locator(".message").count(); + expect(after).toBeLessThanOrEqual(before); + expect(after).toBeGreaterThanOrEqual(1); + }); + + test("global file search mode returns hits", async ({ page }) => { + await waitForAppReady(page); + await page.locator("#global-search-mode").selectOption("files"); + await page.locator("#global-file-type").selectOption("image"); + await page.waitForTimeout(400); + const results = page.locator("#global-search-results .search-hit"); + const count = await results.count(); + expect(count).toBeGreaterThanOrEqual(0); + }); + + test("sidebar Has picks filter", async ({ page }) => { + await waitForAppReady(page); + await page.locator("#filter-status").selectOption("partial"); + const items = page.locator("#sidebar-list .list-item"); + await expect(items.first()).toBeVisible(); + const count = await items.count(); + expect(count).toBeGreaterThanOrEqual(1); + }); + + test("import mode pick checkbox enables cherry-pick", async ({ page }) => { + await waitForAppReady(page); + await openChannel(page, "medical"); + await page.locator("#import-mode-pick").check(); + await expect(page.locator("#import-mode-pick")).toBeChecked(); + }); + + test("save button shows confirmation", async ({ page }) => { + await waitForAppReady(page); + await page.locator("#btn-save").click(); + await expect(page.locator("#save-status")).toContainText("Saved", { timeout: 3000 }); + }); + + test("global text search finds channel", async ({ page }) => { + await waitForAppReady(page); + await page.locator("#global-search-mode").selectOption("text"); + await page.locator("#global-search").fill("niagara"); + await page.waitForTimeout(400); + await expect(page.locator("#global-search-results .search-hit").first()).toBeVisible(); + }); + + test("select files in view toggles", async ({ page }) => { + await waitForAppReady(page); + await openChannel(page, "153niagara"); + await page.waitForSelector(".message", { timeout: 10_000 }); + await page.locator("#filter-attachment-type").selectOption("any"); + const btn = page.locator("#btn-select-files"); + await btn.click(); + await expect(btn).toContainText("Clear", { timeout: 3000 }); + await btn.click(); + await expect(btn).toContainText("Select", { timeout: 3000 }); + }); +}); diff --git a/tests/fixtures/mini-export/153niagara/2016-10-05.json b/tests/fixtures/mini-export/153niagara/2016-10-05.json new file mode 100644 index 0000000..cbb003a --- /dev/null +++ b/tests/fixtures/mini-export/153niagara/2016-10-05.json @@ -0,0 +1,17 @@ +[ + { + "subtype": "channel_join", + "user": "U2HHNN1HQ", + "text": "<@U2HHNN1HQ> has joined the channel", + "type": "message", + "ts": "1475689651.000002" + }, + { + "subtype": "channel_join", + "user": "U2J30FCLW", + "text": "<@U2J30FCLW> has joined the channel", + "inviter": "U2HHNN1HQ", + "type": "message", + "ts": "1475689652.000003" + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/153niagara/2016-10-11.json b/tests/fixtures/mini-export/153niagara/2016-10-11.json new file mode 100644 index 0000000..0cb7f73 --- /dev/null +++ b/tests/fixtures/mini-export/153niagara/2016-10-11.json @@ -0,0 +1,198 @@ +[ + { + "text": "<@U2HHNN1HQ|jedi_jew> shared a file: ", + "files": [ + { + "id": "F049MQBLJBF", + "created": 1476210524, + "timestamp": 1476210524, + "mimetype": "application\/vnd.slack-docs", + "filetype": "quip", + "pretty_type": "Canvas", + "user": "U2HHNN1HQ", + "user_team": "T2HHNN1FU", + "editable": true, + "size": 1039, + "mode": "quip", + "is_external": false, + "external_type": "", + "is_public": true, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "name": "Proof_read", + "title": "Proof read", + "is_modified_by_ai": false, + "url_private": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049MQBLJBF\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "url_private_download": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049MQBLJBF\/download\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "permalink": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049MQBLJBF", + "permalink_public": "https:\/\/slack-files.com\/T2HHNN1FU-F049MQBLJBF-8ae09c2c9a", + "url_static_preview": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049MQBLJBF\/mobile", + "quip_thread_id": "EYc9AAYAZZK", + "updated": 1476210573, + "update_notification": null, + "canvas_readtime": 0.84945804897631, + "is_starred": false, + "skipped_shares": true, + "is_restricted_sharing_enabled": false, + "has_rich_preview": false, + "file_access": "visible", + "access": "owner", + "org_or_workspace_access": "read", + "canvas_creator_id": "U2HHNN1HQ", + "team_pref_version_history_enabled": true, + "canvas_printing_enabled": true, + "is_ai_suggested": false + } + ], + "upload": false, + "user": "U2HHNN1HQ", + "display_as_bot": false, + "blocks": [ + { + "type": "rich_text", + "block_id": "2ktK", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "user", + "user_id": "U2HHNN1HQ" + }, + { + "type": "text", + "text": " shared a file: " + }, + { + "type": "link", + "url": "https:\/\/levkine.slack.com\/files\/jedi_jew\/F2N37HDQA\/Proof_read", + "text": "Proof read" + } + ] + } + ] + } + ], + "type": "message", + "ts": "1476210563.000002" + }, + { + "subtype": "file_comment", + "text": "<@U2HHNN1HQ> commented on <@U2HHNN1HQ>’s file : You can proof read in the post", + "comment": { + "id": "Fc2N2M6J5A", + "created": 1476210563, + "timestamp": 1476210563, + "user": "U2HHNN1HQ", + "is_intro": false, + "comment": "You can proof read in the post" + }, + "is_intro": false, + "file": { + "id": "F049MQBLJBF", + "created": 1476210524, + "timestamp": 1476210524, + "mimetype": "application\/vnd.slack-docs", + "filetype": "quip", + "pretty_type": "Canvas", + "user": "U2HHNN1HQ", + "user_team": "T2HHNN1FU", + "editable": true, + "size": 1039, + "mode": "quip", + "is_external": false, + "external_type": "", + "is_public": true, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "name": "Proof_read", + "title": "Proof read", + "is_modified_by_ai": false, + "url_private": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049MQBLJBF\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "url_private_download": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049MQBLJBF\/download\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "permalink": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049MQBLJBF", + "permalink_public": "https:\/\/slack-files.com\/T2HHNN1FU-F049MQBLJBF-8ae09c2c9a", + "url_static_preview": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049MQBLJBF\/mobile", + "quip_thread_id": "EYc9AAYAZZK", + "updated": 1476210573, + "update_notification": null, + "canvas_readtime": 0.84945804897631, + "is_starred": false, + "skipped_shares": true, + "is_restricted_sharing_enabled": false, + "has_rich_preview": false, + "file_access": "visible", + "access": "owner", + "org_or_workspace_access": "read", + "canvas_creator_id": "U2HHNN1HQ", + "team_pref_version_history_enabled": true, + "canvas_printing_enabled": true, + "is_ai_suggested": false + }, + "files": [ + { + "id": "F049MQBLJBF", + "created": 1476210524, + "timestamp": 1476210524, + "mimetype": "application\/vnd.slack-docs", + "filetype": "quip", + "pretty_type": "Canvas", + "user": "U2HHNN1HQ", + "user_team": "T2HHNN1FU", + "editable": true, + "size": 1039, + "mode": "quip", + "is_external": false, + "external_type": "", + "is_public": true, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "name": "Proof_read", + "title": "Proof read", + "is_modified_by_ai": false, + "url_private": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049MQBLJBF\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "url_private_download": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049MQBLJBF\/download\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "permalink": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049MQBLJBF", + "permalink_public": "https:\/\/slack-files.com\/T2HHNN1FU-F049MQBLJBF-8ae09c2c9a", + "url_static_preview": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049MQBLJBF\/mobile", + "quip_thread_id": "EYc9AAYAZZK", + "updated": 1476210573, + "update_notification": null, + "canvas_readtime": 0.84945804897631, + "is_starred": false, + "skipped_shares": true, + "is_restricted_sharing_enabled": false, + "has_rich_preview": false, + "file_access": "visible", + "access": "owner", + "org_or_workspace_access": "read", + "canvas_creator_id": "U2HHNN1HQ", + "team_pref_version_history_enabled": true, + "canvas_printing_enabled": true, + "is_ai_suggested": false + } + ], + "team": "T00", + "blocks": [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "<@U2HHNN1HQ> commented on <@U2HHNN1HQ>’s file : You can proof read in the post" + } + ] + } + ] + } + ], + "type": "message", + "ts": "1476210563.000003" + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/153niagara/2016-10-18.json b/tests/fixtures/mini-export/153niagara/2016-10-18.json new file mode 100644 index 0000000..598ce01 --- /dev/null +++ b/tests/fixtures/mini-export/153niagara/2016-10-18.json @@ -0,0 +1,309 @@ +[ + { + "text": "<@U2J30FCLW|ira_feeds> shared a file: ", + "files": [ + { + "id": "F049QLYJZSN", + "created": 1476833849, + "timestamp": 1476833849, + "mimetype": "application\/vnd.slack-docs", + "filetype": "quip", + "pretty_type": "Canvas", + "user": "U2J30FCLW", + "user_team": "T2HHNN1FU", + "editable": true, + "size": 483, + "mode": "quip", + "is_external": false, + "external_type": "", + "is_public": true, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "name": "draft_-_hot_plate", + "title": "draft - hot plate", + "is_modified_by_ai": false, + "url_private": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049QLYJZSN\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "url_private_download": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049QLYJZSN\/download\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "permalink": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049QLYJZSN", + "permalink_public": "https:\/\/slack-files.com\/T2HHNN1FU-F049QLYJZSN-1ded605162", + "url_static_preview": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049QLYJZSN\/mobile", + "quip_thread_id": "QeY9AAYD2SZ", + "updated": 1476833915, + "update_notification": null, + "canvas_readtime": 0.40626254516259, + "is_starred": false, + "skipped_shares": true, + "is_restricted_sharing_enabled": false, + "has_rich_preview": false, + "file_access": "visible", + "access": "write", + "org_or_workspace_access": "write", + "canvas_creator_id": "U2J30FCLW", + "team_pref_version_history_enabled": true, + "canvas_printing_enabled": true, + "is_ai_suggested": false + } + ], + "upload": false, + "user": "U2J30FCLW", + "display_as_bot": false, + "blocks": [ + { + "type": "rich_text", + "block_id": "NzVx", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "user", + "user_id": "U2J30FCLW" + }, + { + "type": "text", + "text": " shared a file: " + }, + { + "type": "link", + "url": "https:\/\/levkine.slack.com\/files\/ira_feeds\/F2R3Y6L9L\/draft_-_hot_plate", + "text": "draft - hot plate" + } + ] + } + ] + } + ], + "type": "message", + "ts": "1476833882.000005" + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1476833895.000006", + "text": "boom chikadee", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "93iAJ", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "boom chikadee" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1476833908.000007", + "text": "i dont have their emails on me, do you want to send it out?", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "H8ho", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "i dont have their emails on me, do you want to send it out?" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1476834078.000008", + "text": "sure", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "SbFFK", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "sure" + } + ] + } + ] + } + ] + }, + { + "subtype": "file_comment", + "text": "<@U2HHNN1HQ> commented on <@U2J30FCLW>’s file : perfect", + "comment": { + "id": "Fc2R4FEFRQ", + "created": 1476834088, + "timestamp": 1476834088, + "user": "U2HHNN1HQ", + "is_intro": false, + "comment": "perfect" + }, + "is_intro": false, + "file": { + "id": "F049QLYJZSN", + "created": 1476833849, + "timestamp": 1476833849, + "mimetype": "application\/vnd.slack-docs", + "filetype": "quip", + "pretty_type": "Canvas", + "user": "U2J30FCLW", + "user_team": "T2HHNN1FU", + "editable": true, + "size": 483, + "mode": "quip", + "is_external": false, + "external_type": "", + "is_public": true, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "name": "draft_-_hot_plate", + "title": "draft - hot plate", + "is_modified_by_ai": false, + "url_private": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049QLYJZSN\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "url_private_download": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049QLYJZSN\/download\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "permalink": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049QLYJZSN", + "permalink_public": "https:\/\/slack-files.com\/T2HHNN1FU-F049QLYJZSN-1ded605162", + "url_static_preview": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049QLYJZSN\/mobile", + "quip_thread_id": "QeY9AAYD2SZ", + "updated": 1476833915, + "update_notification": null, + "canvas_readtime": 0.40626254516259, + "is_starred": false, + "skipped_shares": true, + "is_restricted_sharing_enabled": false, + "has_rich_preview": false, + "file_access": "visible", + "access": "write", + "org_or_workspace_access": "write", + "canvas_creator_id": "U2J30FCLW", + "team_pref_version_history_enabled": true, + "canvas_printing_enabled": true, + "is_ai_suggested": false + }, + "files": [ + { + "id": "F049QLYJZSN", + "created": 1476833849, + "timestamp": 1476833849, + "mimetype": "application\/vnd.slack-docs", + "filetype": "quip", + "pretty_type": "Canvas", + "user": "U2J30FCLW", + "user_team": "T2HHNN1FU", + "editable": true, + "size": 483, + "mode": "quip", + "is_external": false, + "external_type": "", + "is_public": true, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "name": "draft_-_hot_plate", + "title": "draft - hot plate", + "is_modified_by_ai": false, + "url_private": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049QLYJZSN\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "url_private_download": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F049QLYJZSN\/download\/canvas?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "permalink": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049QLYJZSN", + "permalink_public": "https:\/\/slack-files.com\/T2HHNN1FU-F049QLYJZSN-1ded605162", + "url_static_preview": "https:\/\/levkine.slack.com\/docs\/T2HHNN1FU\/F049QLYJZSN\/mobile", + "quip_thread_id": "QeY9AAYD2SZ", + "updated": 1476833915, + "update_notification": null, + "canvas_readtime": 0.40626254516259, + "is_starred": false, + "skipped_shares": true, + "is_restricted_sharing_enabled": false, + "has_rich_preview": false, + "file_access": "visible", + "access": "write", + "org_or_workspace_access": "write", + "canvas_creator_id": "U2J30FCLW", + "team_pref_version_history_enabled": true, + "canvas_printing_enabled": true, + "is_ai_suggested": false + } + ], + "team": "T00", + "blocks": [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "<@U2HHNN1HQ> commented on <@U2J30FCLW>’s file : perfect" + } + ] + } + ] + } + ], + "type": "message", + "ts": "1476834088.000009" + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/153niagara/2016-10-24.json b/tests/fixtures/mini-export/153niagara/2016-10-24.json new file mode 100644 index 0000000..9363f8c --- /dev/null +++ b/tests/fixtures/mini-export/153niagara/2016-10-24.json @@ -0,0 +1,298 @@ +[ + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1477341477.000002", + "text": "someone from easyhome just came by for kerry", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "KaUr\/", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "someone from easyhome just came by for kerry" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1477341924.000003", + "text": "and?", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "cbcz", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "and?" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1477342010.000004", + "text": "he didnt say anything. i mentioned she has aliases, thought maybe if we give them to easyhome, they can track her down and it might be easier for us to collect on what she owes", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "31r", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "he didnt say anything. i mentioned she has aliases, thought maybe if we give them to easyhome, they can track her down and it might be easier for us to collect on what she owes" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1477342047.000005", + "text": "i emailed the collection agency today", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "uUcSc", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "i emailed the collection agency today" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1477342051.000006", + "text": "did they ask about the bed?", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "KyL8", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "did they ask about the bed?" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1477342059.000007", + "text": "nope, and i didnt say anything", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "Z+r2R", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "nope, and i didnt say anything" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1477342065.000008", + "text": "good", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "kRTUp", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "good" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1477342068.000009", + "text": "i really want to keep it", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "F2F9", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "i really want to keep it" + } + ] + } + ] + } + ] + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/__uploads/F011NH76RUP/IMG_20200418_090219.jpg b/tests/fixtures/mini-export/__uploads/F011NH76RUP/IMG_20200418_090219.jpg new file mode 100644 index 0000000000000000000000000000000000000000..006c3a3b6c09ccc4aedf4b7ece5e50fad77414e7 GIT binary patch literal 391180 zcmb@u2|SeT_c(mdj4^h~nstyRWGVYPC=w!NYhjQiS&~Fq#;%P)rR-ExJQ=i!GTMwh zmXc5@J&jVSG(6Rmc+Wkj=`n{J-S?za{Z+3*Hk1g(l$_6AhgMvfCgm5yB0}q2WMo_y`(~-soWu zWhx-78S+~=@VD^3n5Y;i!$8XiMMb0GXArgw-?bO*3k4Koq2LJ54e<7XpFFY$@jx6A zI|%>(3cu(XS%n~`ef?Vm13WyHiAj1Ps?Dp*l z!m2?KVP6Ch??VuQ%?pVBs{3m${+F>5p^iL^GZOxVAiI!YgorpH5l9fC3!xQ=K4O3v z&pk!#5ivm_5g`FF5n++Vi^RlbG-YL^q+|?K)f6<%S6W$`tu!?ut=Y1Uw90$6iK%<| zdT;;0kR2h`uDj!-w#97;4hcdV!7N(5SVmGtPgYhh$j;O*=>Hn#=*S{I!9Gzs4x@r# z7h!OVFmrbhIUphig#`k@d}47tcwPcznusA-EQSZm1q=>LfXqe8xWxvx>jT7h^Q5Tc zNmQ$1{-Z0jQ$XVhB80;LPPj#g4f2DI zXkjQ6GMWcW$9*BB`8Q4sq1&ra=3@v#36$aEMU*M{e^L-m5g3mU35JHy5gs&wWFUmt zi_uB?7$M}J#(vfLCxouzOfFAnVlml)kRg)^)Ao*761oP`mZROOyr0i z2=I~7s4|7~#>!9vp>-7f-+>Q7c=WjmC>>A$iog>k4k!B0gVQVEL4p(@pgUJEL4<;k zp>bd_yhH&E1v!au(1BE5bqFGM3Y(y%I}$J^PRD5T2tq>y(e`1c z=HU)*fdVjcItfGPrVIU30GUsL$$)9V2xp_C;w7S}^Ah6d3&RI?-~bVZjzEMHCj(u% z$$$w2a46XTG||UD09+o3p=3fF3*(>wSD;zI9Y8}e+8iQ7ArsNG{{a{w9%xfch=k+t zG@8#r97FogqI_gxCN#?zK%xjx0CA!UJh{Lf0A+q2fi2SY#enO?=;%86h5kZuKyrc8 z5I%&g%vqsC1jrGHasw|BEr^Ex1tgUIKw&_TOL3F|(T*@ekOjO)LICLn^WQrzdmuD&v1pXrnc%VTpGWMJxAIOOXNpuHbJ!{?AXC5~3KL zLkN^FVHUW{{#PyN7ZLi!NYK~soQSR%Aj2JQc`0QIELD(A^Kq2>C;=ou5Cr9~CQ;q@ zFF<)#XFd(G?{N8^(~NR98O=bsn}`Pf0Wnlr;K`^yMFE60H^7Nyg0cdNaYhCSXphhu z21dvSYaN5MQ#i#yvWcz=lyRSrAjoP2*@y~zZc}JF9jHzcLWuLsz?nK!G@^j#Jh_j5 z)-FWn#}6TW&I0c$d>xP321t#$KT<)6tErq)b zIN}s$6%@{IdH-7wmHr&^1An25gS%uYC@JQH#NVr;t9LU;B`I`!RJLA}SC@PzwA5d=+RA9x{B}PzlIg{Ae1AD4_oT z5ddK>#yp6@Kda|I+Ek{HfLA$kGZV;$&eH;6|Dzn&uHeH6t>&-;y7>ML6f#H~XbUA~ zCMOf+v)`!t?+QRml*n8Y)CZP0DknfRa#ZE-h5wUTfV!xH!tyR~Aj%oAg+MhALXtvmQPA4(z*1nzOAt;61kz|VWNkr}bNB$VzGMcN zX$aj*3NgS_;Dy8ZOjKZe5IS-Qv4{B-;PlFiw!sB-E5Tt`l->TX0p$YJct@?Z|E)4g zGC&w4O7_2t5D_udD*$}X#X@3U9r1AF{ye!bqYbVc9)1r|65k6<|hoWmjirQENi1?!Y!5d+twI|t6L40r`K5MVseAL*Y8 z=pZ;7MlN4gKn4(;GeRPS=K(b{NL*yx(WOXP$bcz=(s$?!aZrOm1XNUU0HyvvN{5BV``6Khy^7d=OyL7suB5<1(PDKch zh6OfR-F}82n&^#+z)r-5TsuH%5nTC9j`FZ$`{t}`!a6#Tfpg|2-C{sSi=b*$1hGXS z@0tmIYX&@dw&wgf5i1!h9IR#*N&@jTwEjCZO ztN;?QEP;;j=`5rJVK{qglrDI(0fD%XA!Ltk+yJsT1B3vVf?#rRRxQNPY*=#$YNlW) zbtolJGz0kTVZw=s6rC~v^QUr zY#JoT6WUp2`+6smZ5nOI6V5@Eo=vkIQ`uIc$E-I-CCuKP`XRR8MvJ8c8T(&t`b*S) zOq4pxzIXYK!W^Q)QqnR_+MV!@jca2nG2-8ER)(7Rb5`#=-{>*E7_pZyq0to90aNSb zfT?VY#}%{o+YcEC(Q0x!BdlI| z){$oMHH#57hvZE_Gh3hDj=w$iL#d}V%wGg zh9XUGCI_JX@5`Jz%%KYC zgvf`Ntw568ne_FXe5Rf<^u;a9)Ki&5h^JfPB2AMSFrPGwt0<;^_HVv$3z)N@-T59` zQ_;>wpYKklru~B+V4A@c8F|_I*Bqi8uLS5S6yJ{T0AiKK|NhuFByxaIE|k+{u*D_%^Pr2LU_>XYzjXu$RZ9oGbDAo{T!EdZgfJnrJxOfV#e zmmdWxG$4ag+8!XmGvoum30`c2j|7%RlM%Q@2LlOKo(?Z3O6SVhKtvN=kCYUS(EYdf z4c6=efL`M)eld=YMCA>t_;?m}F0kE|q;OaHLJbf&2v?Sa(et|uUnuZDY$1;BT*&3T z1)u{ifB;4<6NrE}8v!APMbpJLpjHOA1Ux}FQvQjclA9xTIKEKSLCwkIN?d5}4!0!K znHQ%-1gQXn9!*B283y$&fbS4h2V6kARsTdK`fHm5hx=-2T$8U3W9j2D6H;RoI^rZ zo~3^%c64NDoIk$rXUUgOc_S(PtWj(K5aZV=Ytm}QzUY-36$lEFBUwTC<(tf|^1fc* z&&uiw(JGh_zet~8CmtRv3z7YR^kvk)!&VY=lh{c8}_!g?RmpJ{&E z^x3D@%t;Fy#yyA2!*^aA>5*fT^U7@BA25B!k~<05HO$QREFbY%W=IGcOtOEI*pwUh z^#|^cumgnp3Fb2mqJ>l&js2v%Wb^P^@?JegVnaQnLqnW;>||PV7|8aS5{uH@17fi@ z3{jR<$$>j>cG*5@Q_Ucw1G{sUX~Jg#s$I&^g{JH5lExV7G*8zXwG~sIXr965@jWpY;KfGcMP0490Zvqn`dyvfg+z+R%wG5 zdxZa#?;`9&rFRx{^x1unrQVTjQATpX#9z@;@3v%HlrwFVXWg1oIzo}gg>)Q16Rz~g%!0;+RU7bC5I4lyzOZaW)z-Lm_y7kQHJ=8%)Exif8Z z$Zlq2lEdr4KvB=6tv4N@pBBrEbMJMMRmJwdpTZ=CGc|{o5RYdU4!`^(R4r4<;$z>TuS#P-@a&{s;V|c#)SLV4 zM8lK(8{6*tx#3<%UY8xr-*__Z#T>FcUX(Rh&<=LVS{U-tq*cwkRvl;?t5@|uQ67>u z>(ZJwQ}{+j8%k;qp*<4VZgWTrtQNIF)1``E*?t``kT^k>e|{TdZ!GaEbYMSoHla+E z4GV4NL?Q9Oi!nX4c)X=3>qVYk*YVa-+i5|TcitS5pNmP_)<$Yue$hwC7WA_c^Hl+T z4zVzbv0;rw6K>3|g;^D!n6&vbG?^j&x{a6!Y7=yN!W_cB*sR2^XMjB7C|E%2hEHpxN0{RhGf*zlWe7H=0#>9)ZzXX2ZTu>zIvZ z5$aib%B?J$9{-=W{fi38`+p2lpXV-1+8H@(KZh83&!k#yZNH(oX=Y$c?#uvF)NQ|T zNAc{ogjASGQRir3#?&0r<>%10JYL|_GpmmB*)0i2lQt%#ya2mEn{}F*Jf=sC{U~TU z$n0Pw=eMTEMktho0X>qLjtqrZsc5h!$^)kAmA86HMRSL(T79c0xs>o{Ys!Ow?Mf@a z(q!>|kqTnftFpbRMzkh9umJKfpvPwpgIaeMRNXH;E{HWDK1a85(Tby*I;HK+7?Nw{ zN0Po2Q(Ln_y#w`S%H1s@j;g}J!NCNQb!2aL>n#scr!js4efkNi0X&P#7z}`ZFQx(nQ=xPiFLZH7v zRc4}z07UpL?0Yy)JFpVSL{Q5xA_Q^a9vu4cL8k&cAOW^_Bn~ksfl!arC>Kwz9~5*x zKH&yiYcN0TzQEn$)qY`8Y7AYBnAu{QkeJBC4rkoDMhOjyc)a8bvPb3CZC?6^koB zz@KCxD5Xg<(X!n~t!3)tS`tQe>|9do*7*^qfT##!|oqbEL$W~Uny^VL2=EuIAiNQR8l)(F5WvNGW1nEG&q0c zJNDy*?m^d_W@HcJQ8BY5R@!#sSU>NF;Jh7Pi(-vbjXxLKE>WlT`?-4^t<-Q9&i}z^ zUiZlq=Q^a;{hVjyAkU_Pu)L4Q^J&6QCUJX`><=)@?Ivt%7(*H@vrfitxGg@ZU&BX} zm$shT&FF7jz4=k#rmGrW&WY|s;gyMdw(Hf2vg9-c#t3oXmMzR*&iI}vJU!=P&EK-t;? zx4h=(I=1iUkdm3KImF%hM7);U6%+Mz@47ZC>-+v?tz|03u^Bg>vQ(@F*t7TASp1W{ z{5wrD1ze+s(q2G*?i_MXS7&nL2+PEzJKO5h)BsCxYT#v=D1-e>B z?PukdlwCR&#ai^Z@C5O@+tgrw;p>{=sbtH+yn4pTw71f)>p=q=#ar)AS_S&_lwmT)~?YuvsI6EM9;7XsqDdmH{NgB0Izp4ph%QfT`rig_GGd_(=j*QJ<-PUqkk7Y zPGIEX=8*FTV5H})cb$ID7E8#U9GrEOKR$;%T0D{V^m*ETR$LeK5k~cA3yh^qeDbs3 zZ+V>k9<*)!?5I^Z!$cK`-LfNW>SY+4XywW8b_yr*!gE4 zy09%J<3QDcNat)Qxy~eXi}~B;4$VVhUQL1Ao(I&|G#|vucz{L&A>V@ZO7;vZ|2rpMfa1;+mqd+l825rIvMN$2RMj(y5 zsU?F(MfZdYpv<|TL7tC-#wDV6Hs&|QeCTxpL;~#%RnG8U*i}P-j|jU!86*a!1!C)h zClk6H)eQNUW)4?mMBH<3xqvOlVybY|1ox8@%eH4qGtH0*vvFRr7Nu1`N0$%iE0LC- zClD<#x@!eA#Tj+W-I1GV%3CQDnwS--P2<*?JOpIYH8mD*pciCcu{6}D=E9s!!v z14GZDW<(@YV;onh>*&Rg^nF`J!#wv;=p&lk>LwH_%{j1 zv>!*DB+{j+GJc3_AC4g^jPJwx@M13_y6GcnB8aQOSOx7p6`!)=+%k8591lxK#evU- z5HDgYq}kx-IOHKfU3M75r%C3a*(asbSU5Xs|7GgVp~c6K$O>!}%Tzuip;L!r%%%|4 zQ(8S%>t8yK(N<0*>i9j;+%MQu9Y6gF%FmLzdCFmT{RU?M6k2+_VJ7iDGyw72lmp6C*rj zs6Qsy`eLT~2v}s7=M!0PsuyyC5J<+(Ay4iNHh2fbAs@41GKT1Kw990HWjqQ7d-JA6 z1rgo$Zvw5A?i)T&Bt%O%Z^Zlfn&j}7Qihs*mF&hb*9BQL;TWy3@v1tV9x}u zGv~Yp1FqL1-c<(_#tz7}WA;)SH+617Y*zgpka!U@iIg6VUfPNc#>GtjP|~z>rEXZ; zz^D@^6pr)YD)&({%Xm*&>7N~vXlJdBRmd=|$KH>z!4_0xg)eT>3fAS1q)QBJzs1sx z5*4y_$|%_TL+}hndT@2bq?^6nvX2+rof-8!UaMrE^SjtZu46;d`FW){S=7%8(G`*68S(sMp7XhXnaR*dFbv~?{3%? z^7L7!D`>Mcm~O0K5bKT>NeDHjgSCAQ`C^#M1hIO(XVL5CMO$Btb?VRxUw5TXb>3bk z@N=8(vo_ZajxH+D;^wYcZu~Z3ky^m6(ZX`{>zUyl0)en3v~}0zWt2k+I`TEa+*ln|x>8 zp3E#Pxc$7pR_e#Z>I0wWkj@Z2eErOkgpwhq|Y)#-0o z@cNE-zurvhhpNIi9i6N>#Blb|rm3yjx##>#r9fjfuo7xP0gil^o%ti;gI=KM1^<(+ z$6-@cuG^;T=aYO&t$177JL$0wP=EIiPq5==x6K@%-StT?Me=VY*arowWQQ#H(U zvk5cV*5xzl9)o^vh5qbi&EY%!`S0{fJ1-<9MCLORC zq&~}4PG&-ZFRPQw<(Q)0(RkG^|57Ej#j1a1{!gKtdlF5)nPC(HG<4T<%1ZIEn|}WHf@F9P?_= zALW2c5j|92IHe?@1)#{U9S|CY12P{_q^LiWj~7EmuuL)p;eZJCMc~y$PcETD$cD38 znj{4e{~$yrVluL!94{QfArwL&1UZ1B%cEa`?$s#lzVp71!#d68OZt5Z-1@Dvdy$R-xhvK@$RLRhui*kag{CSkiM+_(37> zR2ak zt2dft@>Lp}(7#+zV@Zf&#hIzaXLM6)1^BkGq!a{+!l`eF@{O6P-<4KPW1b^h)2`BS z(h0}yD$)cSMg$`WJ_5Qa7EDiSl~zWdkG|j(y;wS^mQR&YZmK|dM==xdl4?PCQ;vR4 zJwW3r6;WZljmFT6@Bct9HDl^`xwxikiYv;*NMYKIr720IeYT;NhdL-C(OCohS{sG& z&iDs*krk=6qErSV(2M{e9Odm_yftQn08MOCa(vy2h!Zv>`9#Vie=?%gxsl&ppi#MnJc*si z>J0bCMqTP#T%HkB6ZCYA>?po>Nc(5%VZHF+W3D)_LzQa&B*`^S$~XC4zho=C=<}Yo zc3fA~nqqm~Zf9Y`;1_+B@{%K=?t!V|(-|?wYdbgkIR>3MNS0Su3Sw@Yakn28J3e`j zRECStYdk{}oYkUl#lHMTc!})_ope7v^svFu5c$+#w41?}^O@vXW|Y||GKbhFR8(XH ztqJ-rkQY6^kLf#3h|`F5v_FH1V-#0JT)g`QnOJH6p6Z2pIw?u*P5FWpH<(vc{J`|J ztk$X6!PA*=v_+i~blklhL?10HC}FXvB_)m#A@o;!MWqGZEQnI!R*i|38g{KC7bYTu z%DqCq7kCOVlPu&89_$=)ULCSc=4t2hH9wR z&q{dxrG;?eT_f?k4{X0qGhx$~e|QcVVxN2Ge0bT;%f(_GO{)Q%nvAN|PhMNssMarS zeDQ_&{W$wU!kYT2pk$V{_sqeItW7iL;{&zd1+gE%PFR)6PG+42_hU1AsnUjd2V=S3 zY|P9RrJr{DeCqay#F3^ofd2Jeq6e7vpjdB%6`|ef44dQz zs?{H$SUddLlIYl|>yD?q|76>&=rP0m7V9xH{z6%?dh}VY2{=ZRU$2Jq74UjWk6i!{ zXvbmP^;+1Dz`6z7aJsg|SA;6#$-4m-e6^d<_&gUNG}u7jl`*t=wXG2eNQC7y!tBXrO)Bm>Ye zQt0I))GNt#1M;CqaCcB`iU?upwnONJD=~dR)N_b>^56}MlcT9*C}2@lx!+<|&tX$h3;}o4V8i(H-Bl8s$(q_m?t0G75Be@8^6b9P8=>>D zEbmAq_2T{@XWsWNYBgIiy*gs-_PWyr#uVwsS7QA~OZEG4YBk$#SeACJE98w%aTLs1 z?bhDGHzOot4a#W_L~RQq|C$+v?*5%_x@oa zap@=K-d_S5_Wh!{eM>Z@F8#6olHpG|$909s?i)H$_We6P?N7=+QATahry!TGnEr#=$ z=0uUY%hkh|VrT^8XZ&|2_WNag#@rk2xLoSCCQFn=rayQ)^h&@-vt#);fe^d?o9q3h zkTK_SVt>>5w?V1$R$@V4c-v%|);0mY(cjcqF$q2^OTsEv%BZESx%C}qau3rcWAv@_ zTT8{tr!P{@v`kz%w{b`y|EIWD_eMFx{f5U=x;^{$4PUx+uDiWnP3#2kp(B0+Z-)Kl z_yl3=ao2-f3Q4qE=ZDrWZ()YAkwQ`m(^j}u z&}5wFGq|n42*OSrNBe|pJ%F@G`?a%f-nyk^OQ#UX8G3cXh=Dd?JZu76?kl-IG)TyE zqkCPfvy5lV7S(G#1cyW8f|*CB3WC4=d@Ot^uvB4pzY|Y2%|f1XH+WpAciij{G*V_lm< zoVtI`IZ@SD;VrhGJ;~F-X9`J|3UIyqJ@!)e>$ShL|NNll+xhABuM%AO-*z<(6~59Q z?bz^naE<8l+mQk5dWOdb9WASlQ$y@tdV9V2;u+Jd{#{^;N@3pmGpYe%RRV^Md*6<~ zSl!mKTHY;(XQ0%hZ&GvCB5sGs*7|8@SJemp+2e)Z3MLn|_dPs)epYp>;7nLppZrLc zg2Ljyd>;powA`VM8q6hYrG1RPg+~!A?CKs2Oq#FQA3rK|QY|8{@nPdlX&=&_%2rt` zXoF1YM7MS(tB^8^Pc}oQL<}^5iNdC zucc(BKm98$<)$3sQ`yQQ(gcEhBrj(Q_qjiJxRF6dbk?%T3fu7U@r-_!h7YY}G&}Y^ z&SO_bYMs`xqR|tdhkTbmsi<|kB3ux2jTYT;1+P9cs&kCBbc&JYXs%}YO)|b47pU^J zO_^n*9?v`wO&nwX#U5wn6JWFC!gAhjIn!~!PUFAxwE~+GOaL&$NThbLc!RvHfujO-I)TZ zuhA-2xwDl^n>*Ko?X>oUn{sDs<;Sxnd}!*#H82-8Pki3@gJAJ8U;7#Ab=YPEw$Ik4 zc8`5Cjb5J#eR?y8!tx7eSA+9>r$xN%Kz>5DbzV|}e=s;1TANgTro3# z6%MfnUvs<;%buMFj#Fo!R@wfoG^Q~$IOfKHJJ z$MrvJ&5gF~ol-5SDjWkxxLnq?(K%#Uyq3*z=^=$H86g^MZS=@DWjG*2YbKkm)T@LV zJUy2O^Jco>a+kINdQN?qAv@$-$Vl6db6@#f?iT9uCO)H7=3P6G=LxRvXJF~n3Gix5 zrjWD|1&R*^dyCGC?(lhpNGsCeTL$=Uz_yR;>_vCzU~nL0ZB77vaBLFv`sTt7A=DrO zn~A#}=jAxTeS8owZ!(F4q8s)d_C#>U?Q1{1~7z0C-Rb$hlH~&L@2!JhKPYkKcBdG z9L8N(IhKDkaT_nCtYe%In2;4f-(X8RS#V{MU6B2bLnj(7`JYI#HS2`Z|M+eQ{Z||#1nUV z9iRM;hk_LC?IMXjstr*=7iff1)8Iqq@uTA<(Wdr9ubfkTl{wf&XF~hrpHR)t%9j>p zSvF&Xlx$5m>8d%;5~Frr2(e9in)sj4Qd$!$W zs#fdE9g*_rcfE2}k|%*u|g zy|3Y*xbAXI4!%avG8CtY*4 z{d&LNS{cI&d>uPiT{={J+9uCeapt%NB*J-XL{(8J<+!a=MHlb7eBjbX)&gDg2JNo7Nqjl^gG0XP9^02bZ>C z_1X4rE7eB>j!R$VIa{iUECsyUndvU3WWnr|x$+c0Uo?lTF*vedT< z4=B#A?x#Bk9)_Abgt;9_%C+C@>U$(+4k<)}CSRqQh59>IT$&6qT}r_AUkMkMtCQ8# zHop|$N#2tnb>y;PXu!6=W3@(adtq}GqpBymzQiWED3nB>4aF?avI!hJM#XuS-SHHl zN$8Q;3gWRhD0j)XD+KXN`^xOvXfowL(_EvMexUfXraje{U$Mp#NPYT41&dxxT6?|rW(a~++?aCb%S^n-_^MMsyumES*g(bSyz zhrCUGGx62HK#!1h{MJ~j;KIy3V>VSe-B$aChtHlXJz#nAO4$LBr3x=GZ*9eEiE5YMu6Ep2$ov+lH${PhCog2bSnnS-qv%UxFw zcb!*@Q;AN@yT;49Ep(!ND@!s=ub|dJ+J%|6Zr#lKr{A7!JNMz?L(lfw2OZc4aVC*G zj`EjSTMP##w`5gkNGlkPM)$AoNHtPhv;N3SiOz5RqrDq8SQef=pLil`IZyQaB=a`M z(~>)SH@K{SecNf7r^2TF)|oFo%wtaAW!gIYRs`5|I9+zEer#&?cVLEm-c0a=3p0@p z-yOH8oLfJ(Gs!4sci4_=H$^KR^}AXs?i&k@UC%VV6n3`eMxkbi`V&FKbUaA2cf;ok zy$*{uyI)@HoGPlc!SzgFA}tuHn(Mx!@A_vBNWZ%E#L7xx>A0x1|G_P) z!u}nhTa|1-t2gE(CgR;NN>-YtjoR#$Z7jps7PF;od6K1~bmsN0}zH^1t~-n^#3Jk~)r9=WL9z;7{bO^I1E z)RaU)4s0IXh^t*1*>^xd8)F+s2se_tND1(fPRf!_oW$70X%)ZZuaQ2sNY%y6HiIH< zDVX;~e`z>Qgk+Af#^?o$6zuzn^@$Zl%0Dv%PHs(O4EEu82mBibSLte|(ga_SugPA) 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�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%0D2_3?t{M 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� ziCG1>=IJ12yyg`tpamvhICGTYf3cr3(mVKlGdW};Xok26v9|dzeSkW&CCDn~IMJEh zh}vtGI7+C&jkp~iGtl`k8~D8^c*=yuA29Au#TktJ*B_L{PLvnDV1%N74+} zLYmd?DWNv>*K~fO-xY;9kXTOrEk%Q>Qv1eQ%lzwt7$_xPwP z#d`xy3Rt>5ZBzLuAC(v$(a$FJ(8OWDt*YBoy3u2MTtmkx1K3z3JbxtByX@o*T>Ol+ zL$Vc@l($@kacf@71t% zhC@93`$?de+1&WMwlU{em$IT?p)V{f`#+9fBm2ADaa3tZhrMXboy8Z4 zMW)s3(p(VQJ5T-YHV5X1Y|?GZ!12m&X~$*^~efKj;ZZS2Ip|gd1DAGD!01a)kgFkr@ z=qnQ%qncOe#I?QEklHAp=EPnFx3IUllLHj_fzt^|pAB$6p!V+C6&Y<$9kWOg{E}hN zAV_h%9Wz*#rlvQ7xQkO1=GJ+AN9hNnEYzO5FTR7He3KbT!>P=JDG^XTmDO$uB$KXa z=X1TVYk^7img8)oDNo)`M;!Eu?zo?A7P?gXsT-v#RQNouv|~d?UN7`{P|&Us4>t2s zGGtq1cxhC7N5Q2NqGc_TBkQ5?5zSuwQc?Qz;*r4<6Excu$Ye=ve}z_gM-yox=`SOl z9LKn7hYt^sjY*X`u-ns2-O)!kVl8Z)y0<2XCo)wFt>Q#D0m)lZ(msN(HeB=7aU?HP z1<5Y(E`FwDniy`Z>Bh!i1m*BBx3X0q*&Bw3!T=mE0DukmR4+?nxQ-G-ubLv$XpU7? zLU$B+Zt7}yppuaZ7bh2XuXUW#JDNFZI-eE$ry6Mgamx_)W z6Ebr5UC|}I^fJhMokgm2#nsLBX#=E}W}qd57U0Rt>C{t0bnhyg=(A|xd^$~soS zl-(dA2ZA?1o;aH=BMY>JZqMZhNCyG7TuErkE|^gSvI@565_05T@dFSXU#Yj;$fBV& zEkIY6;`j(1iCeRkAi5i7L;M&v$bLAq28{Hd24X!aN@73d7%-H&Db<3S00VORS$HHf zCfYOkGUVchhsV3zgpMFjd&nf7uz#{S%L$iyE?F-V@z_^WLUyKWNIS%ON%w40Ok0c2 z0Lt>MCDA^uPccSJu#Zi3l}%=+&3;Ak5(zWP^DLcnD?xmb5$wR zC(r|f=5C>?+P4A6ZWM+zH))G zt<#h1^8@EL7&GQO|NmyMDq~%LQ9EwEGB46ho4x+0)@Gw_&zeD3fl-HF%jNY{HUGWC zGEpar(vQ5|m$`naW?@L>Zu0i4N4wmXm8%IfyJhnsj2B(QMljxko0@FEKfLVz1|t`n zAHJUQ*8LXK+I=>B{Cb>SJ2c%NlVteGQrQ8{xvu!&Ix3q^-hD@|vnf4 zqdm={_fIa;9vmz_;q`33@2XXe-?jkJQL}+_%%J{&SIkX>>$BJwF^P=b7dT$5TwoK| zd81Jk0jK)j$=&uYh1?iCLkV`2QwBOv2 z&9!_7U8&CaxY$Gr{e5Wp2uU7t&FeM%PUW%3|8 zdfgQ8&60Km!=-)__OEJ2LVT+%OBJ;q!Qbh<4rmo9F$C<9DDy4x?q3MF5m6RKR@&yW~Surq#4ezj28jfca^@^jT|LwWg z&}{EI+Q6&2Zc{7QGM7Ubw5?rwYr*yo}Z_^Jglpal%b8|q&+*d8jUOVk+ym0 z+Y}?H7!p93-~tlA5;uUV0L;er+o3!kt{ysau$p3MC@%FoP}|jr+_y(u>OWrF8TWyC z{bkopqicWc4Q#gX{hRwV!}^55+}$`Yf$Hd)rOQ9Boj-x>5+xkgt$ghO-h865G!^#n zu0ca}#4@t=agz1v%D?KbSHGjDbi~w_|98MC|2pqc4)>VB0|Tw)bK{fZCl8KQW-W76 z{)X&p#iq{@LIUA^J~t*>;!CxGhWmZVNcJWX|Cv=v z`Dax*j6I6G##g$-dAmWzeE$i+FuHM*L2fT-o3e*aEF2&|!X@ON=DwThH%l*p8yI(^ zyoY41FA50RI=Mx31vD#a#?>Rhl!&0~mvH4<)D)+#Y>xqQ7ZfI-=DrsX^UC`j5pJ%L z#b3pUT{9kbN3U!T%|U!cV6J0f06W5?qo@P8 zhyp^ez?r2(`NnHPSC>!~j1o+;)Fr##a{h=${PBQUeVY-i)B=$$MQA$yE{8Y+>x$jJPPHEiWXGYo0)%!912y7MPA!p4v5 znmD9KQ0{1SMX0+Ea-UjMT-|;tJ-kXP?#N+Y#@^V2(w|Nj{ReOmrCEk`$UbBWvwi9Od?XI?sm`(Sv||}4t?75S2P`PlyNd$0xg`%K zhK&gKyHJ>(J(%mDJil&0+z2jqF^q*{3CW}*Wmi2=GlQ~g4Qd**XVSz;s*r)HO}@s3 zwll$c!2FTcY&W-{)3*<+MHy80>WLE%lW%a8`U* zU}SwtME3HzZ!oHUS5c%K>aUyW-r*KF?PinqTwef&ZWZ)A*5h!96~Wu+14@EwHJ}Bx z(4#hjp#7;V2-vo6>zRmWqX+%=s07OiWtVR=H!aHFL6`yoIrfieuS)|>2KNA)9|W0G zzV#C(YgTZ4CKZPPWoQXxi@Yk<6%0!R3`>idN7yjan>?keFoT`$OQ;~9 z*O#V5x0n_NS8a=F9&J_F3TH+e)o{AG(29*fAvF{|jL#S=YE*iA-kH%QsNGCpm6?;u z^6eS5>8W_iOU$>ujz_-9UeoJVm@{bIRj=e)$co*)V_&ShH!0`eh4tv&7XIGp4*y3| ze*Y=)qL1(TQ6%=hZgO#WwspEwJW}1=JmU+Ra8$>w7xy?}=!fmHBeLay!KC=O;Q@}r z-`3PpSe0bq-XABF-Yn=(#m%JRMz1DuhlVgt`)D?-7fh?=pDK%akkIwf8%@8b%{#V# z|Jqi0+Qj|U>vbLNT?w*wE(wW;jrRU!Wo{-=TWU>pblKx3z+jK&zhVDbu#8Evag_Yo zO7V_dw`8#jpQ0Qe>r(Ws_)IB-sT$W7Xz_%&!_g`*I!^Pt>-D{N9RABD4oZ11N%cI6 zkIhK9dbInfQQRS*yXK)f@2(;B{kfgF3Lme+Q&a>Y7xeo>!>|`n8ATVsuJnt=Q;$@2 zJr3)-a!JYo)n3CDN^9_fr``%Z?XAD`Xn z2V^NTJ$1$a&1r1XVw86Tz8mXZO)PK&Z7*AjPhKW9CfPrtP=mvy2cJ49i;$3tq#Ofg znsJD+g2rqf&A<<+C*s%SnIHJ*e%Ah?5w5bE#GY;+4}|^?xNDteVAK$^!Ibv5sH=dx zOvZo%6>&Yhn7fK|Lu<$`ZfZL+La>cu@3k4XbQscneO`CsEi!1S&?3MV^1c|(X`=~) z>99HhxENpV-coj@fkwF{mXdw-Z5(eeaoS*uKMp_y!ZxRzM?JM9a#p?!qokuXg7Kzgvb-GOOLwj3z^vj zQ`4k%1phWFjzY1O`$Cu@=$UA*)>G>t?%ZVafMDT)fg12M`V?dBuKUI|uh1Q4=J758 z2ifP>5yuCE1C>tjUDB^?fEyu^)qMl9Qb~=iWKo`s3eb{R@FxEzwRUGJbbYULomO?* zdB4H~zdBq$}O0u@*l*af=+1Qgo-Ov0%BDTF^@MWNI#{Z`0>#9gj!pFsiefZkS zhYFS5aISVvdWnpWgW9F@jwI0Fx>JfZ$+A9N^QWTp2e;=@LE@{ZE_Lx%#%74xi|_Cr|qD zIiIeY`-MB)vW1pU-#B^IA?c^(>9N1g?*EtBS8}bztM)G~iPsQjpfRDubmx$ok284Y zM!io>PvGIDOKTEB=K|uzbkf$gmuivymZp;{WnZvEkmhe*ZIft+#iRgvL(kXmaNPS9 z#xb`c{fUc#Ie7&dnd;*0>OA4&kOIvL%}YSt17Z2s?Y~^+36T-qj|QCU?zDs@__9YBl*0lTZpCMLhR_W zLJi_B0nX|X3!t|NVJljDaW;}{`8nT;81v)I+xm$4=L)>yMmmh4%^mMtYobg47e5RE-5 zja^I{l7uuAhHf>I8r*8Sahq-`$?ZzZ{hgmbJdbDo9M3u5@8|P=zg~Ox=P@0`s2oSV zSFYKF4BTwTXt8+U^U8=Z!1yupD5n{gl#zNy0Lc)`pXY1=q0yB00S|$c*69c8b~Qx& z^P8K&PCY+m;rL>C@vi8|HC9MpudMbBcy{HDOTrc1mmVX@q)SOK% zAD!E~DSMGXzqgmuvPK{Yz#v@ktWG~<^q}<13^5=*z+cs05>_r|qiZZK=c!jYx;`_g z^D_*#&nsmUzcAOZ-B}@e1~SGiHBKrT@o75-X2DcFa+GTuba~Lf!po16h}*4SRO#tJ zt+_*T_7XH8;@s!vYSvMn0nYL6k0z=sO=~G)`PSxKB=gdU69K#(SFaY8x6^5WGaQb8 z6*I_f6SbP$qJ~8uN)CASJodoJ8rkJ|*Ey+jTgPDfWkQS(5HTVfYAKL+)^az%Y#1RQ z=%mTz&AbRbY$T9+(CbmPq4lt~4k|9vUbnWZF2mKs4(fjDp66ugNQO4}T`#sj$Qz$dc$H09>&L(uo97uY#{ra)Y}&HUpM}`P^p?PU_sMe`!YOkG zB`TqMjlFrKa*n7*KJze^EHuC;QN9t48R4nNlxf*~rLrZ!VU zqwkpSI7(=gd?|x=>xyv(6pG-QEkd&**Cm4o2mNR+#~-SmI{VjCmteDn1`lPQ8+zzy ztxCUi4OXWk74&4+l~MVMW;%obj(xMrN1|78YtJF{4LkJl!}3!ntnixx%EdR2!OwH^ zpBKH{NwWj96_pFB8t$TPbb5{*J;mi?m_xZnt4J&Ry)z$PsGcfw=KlvwZ{jxYPEUjD zr|g4Sqq3X1h|$Ld4M_?4^L6F)*{~2H>8-u76MV>M-`|>AIb3wPn1f!;VDPO^XP%)#2#{7%e32w zBWw3DUVnMjWEDTi;E~t(NaWcX>i8F@V-a#f{c%icw%gI_%xki5M3Rl%-m=6}U1JW0 z0i9w=AoMb&zF$9$Y_?^oI^4g57N$UQze!KY0Q#MDLGS%9B0x4%#o-K9`hsyZ5BLvo zT4ug}63rw?1Xup~uIwD7Z9YAy{UM)j%Vitg7hzta&#dkJ2fu=>DA-t+`vj#}AeS16 zo`E$+fNJ5Ng**pfmxd4dTFGa3u%ll(kAu6m4e+XxwqnPev4^HL@Kg3AUG6(0a! z{tzq4fsOh5UQ6K8fXq3DN5{I6fyZ-XDim@=r$B*j@j<}**p&)BCz1r$4OHSihr#OF zP34OzOSpd_(DHDGe&QLmfdw_xq*-Q9a~BgyiW| z{4*#0@z}MR8{Bu$$H|IBIiv${a#B2*{F&KNhw9(3!Nch(!}8Z@+T&h!D5*D0se#Yj z4DK-xn0a%Hq|3HS+WVbTTiv-ue&tj1iaU3B`PN+CQ;( zO^kFtK0~Vs*PadDvsikq{O(P)u14IoKPSw~EQ>eXlu{IJ$c@2ylw7Uq8??0JNv?OU z7d_kmL5r*Wj$)&Ma%;3KrD(G3+uPu!yK_065a4ZSQ-N4)PH@Ou%7v(dShvjgA4YL`7pz7-6voC-B{xa*ZQg82sp2s(? zb-z_7H=;6F(XPBd2*DlURv%q!l>97^pI}8fJ?t>sxC6EQy(oV&sYrC|)~WQ@Fwzb6 z;9;oQfw%mH(-WQ0ism&`8dP_c?y=Y!#*v>1+-GLm1pyR}oEy?(CM;+qrZ!c=iH;S5X(pguuB6R2Aathr zksV|&N=Wk2u*RCKy^Y~WQgaVV`kGhz1sHHX=Jyq7Yfns$e1iw`tiuMo$dpXgkYjZ= zU`UABH#|Vdo<_Dr0#-u$=Q_I(aRn1kfn(4#HxRQz^ljYb1a!_v@t3~p)R=Rz(Pg8= z`)hdzm2miYsbMaL15;Z-lhsG+}BowY_|MWRPbwrB{8VG@D(vk4H^4~kmWL{y3w_Ovw3|4Osc4jF*LapDWUr~cl6a5PAiHPD~1vZ@4+9Lgl zW`R!8J0Zh7@1V+MHkKr%<;)7O7~yF2UyU9l8UfeiZk>;P{Tty3H}M1mYdO|9j--xO zxO+{r(BAF!PJ^$SM~?~o*KT?j)Nc5>`UlwvHD349)R|7DEuxUSv5$TOR%`04P(>r) zaEsgIuM6TxdFB~W-a+maPTU~LG<7LN`{HWFTHr-+4147EF2_ui?Fy|nRO=0FiZPax zAcLp#`DCTl?~(#odw8?*{uT6h-S!+AQO&liaU$b6)APde7$f4Yq*#cUvU{(t4Z`Ai ztk+CHArDzzQ7rNq7}i&{C@WRhnk@8xD?aSfA-AJtLND!5TUaK#<=nr%|AIkYai6$s z#;v@#HUGFlM4jYPq*u0E`ij10b zXyP5DEs!3cJ9m?Zt*iT5Ok*XG3aI*KARY(w`*2;cry(FdZVmiytk z$#W{0Eu9DL$$=)hzQn0-Lcr;(MZb(VMq8el1E*5qXaW57{Nk#bCZ=x5%1GL*1Rp*@ z6;CQU1=k`3wY4W_37{plf1+Q8C@V57R+Ip18sxA~kgn=~ep#EE^msAHpC%A_qXTDiFq~}8iAC328T)y z=>F}m=f3(fNwFxx?@(XmLq*{;Q)D;ZvYC+ZLd(`B;HLWs;Kcvn^)M@LdA7m{tU zFP!s0#dF$`o_a3g=cHmK)2v$ES>lda<`oxQp6QY+ns8eWN*on(;=H^?sfs-5Z0EU} z*ZCbj7y|CEOWrz!jzfg#@DGYJN;9o`9Clkjt?os`AiA^Cf>t_lF-~CWOOgxhoKZoK zQ5Q%quC-ZXP=-F-VOYbmTD}$@g350(tdvvfZ|KK|WQ8wUuP2V#t&6D)@J=QCHouu* zXkryEe#};@BjGd4TE+X1i1o}nHhXF)@E>6@^_Y!vMRR7CyW7R2MX7X>IwiGJqvQ)8GJ7;f#46iYHxLij0Tm#D_2Bf6!c%Z6+Cgl= zc+FcLkP4p1rkVA!{YSi5N)c!2Ovj0id)(g~y}^!WJM8~5+#8?e@<8PbM-`~gw7)69 zhJ50s^AF@eSM-{XR}F8(KzK84cGn-lvrol^MQE%jQ(X}3+Y%{rPLfs^B!H5C`9MhZ|AnYj_ zkfYwQ`VUCh-?$NvZnV)**`ccB{$Z}nBlKabXT$SO$Y$V~RLi-6hfG&B-!)fpy7o_i z8>G#pQ!wy!^l%-Qbr^od+aQ*?w-oO9#MwvDGmgrAseG>8cDX?+b|FeC=Ru{ftM_)7HgrPmR3j(p_?@UGV*nE!Vk zcl#pmRf}I}FRoo+vVxFyKH66T1(xUtJ~BhZ>`Fy3*;G0Ghv)k&5NrNzxNo~)$oK(g z>5v`HnOmx4aiyvhz3Z$TNhO>yYS4`BKfzHI8bP*T+1d$5BXN=@nbgAqoJT?D9Kt=l zEz%jfM57q<&n^ISr+RqFnT6HllarqTVD$MHh~E2%>`a@8GEr`b*ncq5qJ7-hm@h`r z2wmIh7##-|(kXVO;h9vA(i<@?*Ni-+k$oLk`piXQ+_c*~rsZKVdB$jU>S^Fpc$ zoK-l<)e2=vbF)^gS@^!C=CZp~%W<=%>|GT2(s#@t&E}wE^C_x?Ld!)V?La7|kLN4F z$sq*ZJHt^%PdOHgtDT~#{|7u5EPMr)kIV+gy?(=;XTj)C!iEXzhOqraljFgawkv?y z6^k%#OP{N+)S3R0hc(wXsR?~Qv9|K6zz0FhM!!n_03yyZNNOZ*<{v(G=2n2-8P3gY z!pWLOob_KN!?9Y>@~tVb#02Qk8ad;-jy$MDQA@;u2sILe_^{<%)8SYQOlYNqhy8uSLqBNTjlKWN2eZU%3W=$+0z+Wq#*rd;; z3)u3Rzy>+v0uZsTBSc4|&(IODtFpWVxeX^4$e1e{qTIM97^WC6j;z@YNR9HZ^DJY4 z5ebnMZU9{VOa=OZ-k*{vgi_G%2w)liSimNf!_L&_I;=`zF>=`#@lNCH(V=DtH0RRxg5T)^e)A~q~Ufdc<*vaMLH zcMM1V*8pz({3r=?ILirE;|_D@>`3xVN|D*3g~Ua~hjLSw9UY&vv_~6Yq>qwzK-{@` zU8y$)q!I1il?R~(_jY|Zy_FI1x&37atpANW3E2=IYILRRnU$U^tq?uFXQQ^~@wsgq zHH!F$a}Qr@l;Um71o6vQWyedyM;@IuDd*3W!~+0I(mRG8YjtV6(q`q{i5;ZLtAxhH z5C3likY+TUEvrnKNoAo5b~tXP*^EM9hyS4yRcsBHwSl;XBu0yp8u5Z_o4*$E0w2F{#LX;<09?9`w|D=l$M~A zNy679K01o_*j6iaU8&Cujt+_Ty}vc%5faGKUPmr7x}ff6hG>kj{a&*M1I4WM^?P*T7@6R$B%UZ*k2^7hm<-pF*xyM4*~t+Hi9jX>o~ zaYnT6yXd!1J4Votc}-EnZRpQDwZ1U5e{8BWf6d22YV6%Hj1Z}n+6qr9x4sUJnDWRt zqAzX(?Poa8Ju*Vwx;FrpDgSl9SRk&{+2oW5^Amk@OL~Gn3jrIkUtEx!)tqUb4ZPPJ z^<5szSB2&!rqI(!e;#&z$`GC9e55M!{$t3*AzbI~`VOt5l|6}=JJ`3I=835> zT>nJdc5YDO5y)CjA*AuTz}aP%V@t>a{X_JvwfjvlFP=l$s^|mYUiob?!k=rr;#ZIDD{H6w;6Bx1qoi7{MmpLKQ{|~uIVPQ1D;8tiD0dbN zCyCnhI{ghXj9-^PJf>P^EJZm+V538xQDw~&vm(kesVYg?qlh-MpBqw7&WoDOj}J@ewcUujDUiza?=1^*WBhR@#@R+qGVWTL|oNTS_{5_t5UI zDf006UN*RXH?r zkEqo9QjJZHfu4n3Fm1XPH+8B;G<#sBH7PmrpvJ28YS+F8Rnnc^UJC=qkABVnZH1EU zvxsjv*ZH>Uqy==#hS|OsokF0!knviZ&%mGOjPu=WS-!*_Rm5AiTh?M)TogaLO;k2QedA9hx|jL1aDqxaH~B( z{0r@pVYJZ%x6bG=jn)k^HOFTmWi2zdXK=Q(Q_-4UY^9b6(3;h*Ot$J9G6r{)&2s;? z?qqgn3sa4thZDb>s}I{ODE#e8VOe!_J-(5&B$|D<4lwU?QC!tyf()bxRRoNR#q_0f zkMf`t6=-Y<2{fBoXs_uzO~HB`*D66Im`#_=DT!ar_EMS|0m!4g+gWr3@B3pl0rmww++f4^YD6ZgrbU0ljt@G_<`lwa03YV- zT6l-XAA(W8@@kbV$qb_TngUWt8&oYBGo1qknLvZ%X=-MH0Qr}wszCM%aJ6|;A7o2~ z>h^RHPpRU+p+uPHP$%^YlnQA%-{V$i=KX*;FfRnot?~F%6B)l8D~v4}B$$G8V{6DLg4nkJK=^g-D(}>ek^tUx}8Gmx^SaD$~+97*~Lw ze9Hwcwo&w$pO~s|xHAv)59?;3KHz^AQ-ci@dK>Tl2V4ljHrs{#d%`IR#xRCNVumo+ zSp^LT3pe$Lk?s{6t^*u7Qpei)DuW)xb#jx(Eq)Z!XgV(az&qJ6p>mts8hUWnxc}T5 z5n9-*)k^&0J#^PVDpgD~Y=c}A#h5gH(8JlB$?$?u0VxqhP zE3cF9f%|_HF3a=*@KjKrXU8JY!5~>|Z*hS39q53PP&PfUly{8rR{?^j!{mrC8wEph z`%dtHE8D8Cz$vQLrnJZwgW%*yB)P+(d@j)VEAN^luzy=Vl=9WBQV(goGE)nBLxfq z#L=@nsbUH|HUXnCZd-(0fa?sJsFu_?pkZX9e7pf6R0&b7qz0GrH_?I&3W*V9=Kc&A znDzcWsUWezqv2I?ybe9F$?es~`0gYkbdx)oC4pd=o{Vb~bv-k9Mf;lGk&4-|-0|q_ zp0fQREAI;OZ9dE=cq`uP-1GnEUYWrZ-hBUTsX~#gIDoCk*qnXQs>iZERFU1+^d87y+U}hx0QCz@d1Q03*{fvQpJ^iK&x~mmlO09TV3+>B=P!? zK~jlpO^XPdT5`*^%R*Vv&2&$K&(utfJ@`N?Zq}&c%Gvr3F=d)**!ZHMhF;Q^OE9G@ z&Pp{(`2&7)o%G;l$^Ca}NbcHpRh^`znkiQ)g1kkg!Fr9G z+_oM;csAYkgnMXT6qNmr;ZvX%ShE1=RGutjId`C=KBLz6r+`z&%$@JERAZPN<|iCP zGv{&w7me1CQeP?qwMk8;`aR-u2X|2~lS=!~me)Rx<`0E}e;oIY+Qh*DKJ_Y({>u)o zC%!5-0!!5+1GGrT|A0w@JR$jE#n@eXe;@Ov{EsEjYfU3IJ4#HXhFiI#kg)FsK&8Kf{H}3{r1$`pAK(Uu<#bL90xI=V@Sc>&k6x^^H zc624lCk7rSQF^B?5OyZEv27KIO}cHrf7-+@-6Ov=cw#VV7uDqO;QY^1w| zwuX2t(4}A4yUv?ev{(f+(q4%Vy!ypGY3OyR%rD!jRVOG#K5n1?<+)?^)lJ4T2fJFE zX`6eiXMTTMDz_ajP~Csx!Agq%cdM7z7V;JXd8&8SjDsqoF4SLR+Qj!nRN5b?3Y$t_ zxW`kK35-zuJNe0t^FIn+DxYaNVSe{~e?>{M(ZSty?O&reI$);pv#^GhS_4H(rax|R zrs$KwjJwJPQ^{lf{>sdYIm?S1$m;Fp2<+o2u5mf8(Ca-!OW_ESlIX@z=QC_fjTOsiO@TjwiBa`?qTtZ>K zb&s%f#x#XveIhWFF@N=3XEg>@OeHZ%WH$P|0Fl)lA|HFx>283WEAO|R? zbmDxUR5?Refq#HivMYyv0)8N0*n)?T_o8`RnXa5OKOD35o>BTk9W#Sn)-8YyZ0Q&0 zVXBccnDGqhS1l*NwAVp{_>zcAjUNTGM@Kg<85}45m`zB zT@Qr6Gy98V5j!LnD0;5+?9yy0fU>Z z=6o0-*fc+*y5y;s)DvqVzw*qrm^V*QWyIwGTXO2Q7Qpq8>5ItwH7mx85Gu=2;e59; z%+l0W$s*8#=`X|Jech3~pC)X4CzN|m_5ko_^@n2Tw=5QX;p1Nc zhoPO>n0&*y2#&&&OxklaWepa50iigsj3K}=GqAP_PGd!P`8{f1(H&Oo?{Vq34-8|OIT$7w1DbhxoUF?0TN7vY zE=aXd37b+0%%JfXX(R{VK$mX$pP=Cqrw3E&N^nxXC&oi$Oo!;SuhuRw%xSq8w`ou4 z!c?U1)mIz$^z6ztCnR5N`Zo4F)@Amj;#Yq{&=K!;gSbol#hsC~3I4n<29XgqBHm`_|Fn!t|f8wk53vg`HTyw~TwrT&=Z={Mf5`Lk>ev2!2 zf4|U&Y#R1R4i~opEZ{A(a~UYBd0hB;%O*5cCnk}#il+9=op5F!L|Q6u?q51Iuzwlh zFE#i;U_Y=9C$hRM8oM(2sYq@1LE2!Pr*w}%(YMiZ>;C4#G3xPur`(=dnIGeINhSs) z>27N6+rdY}cCbc?)Tw~jJ*GOnS;p^AO_ z+MQG6h7l>`177N(06|qE)kK?pBJZvvA1_CO0zgOZp)Cv`Ez-4u1rLM~@4W)VTCN0R z>nriXKN`#jdwhuKh3m8ym#L&7#cE*8Y(YpS#*(o*Ge6{8vowwOz`JSNBO z&21idwIpM1 z%>j~}ys-Np-eI~|Oe-zlH&Ifv-+AAG!iEQ)e3ky2eB0LSB(rm?xabfEkJbc9{2O=4 zkgn%RM&yJDMykJdBd)l@@y-L7dDD+@KMHLqdTHVc0{@(|<0y$a{+7$hdQT=@aY}*L zL)XcQs-T{&>Um0k7R$ILWPaQb8j8tAT^lq(8%QtUzx60!hbLruota>~%%*hrcq|#@ z0=Uo+T-W*84zm1Sr-$3DyUj09+H75;bq87h>*Vc0fvxw+S`p$Z_6g=cKoCgAN$0JT zRq5VsIu($!Y`ia$CB2VHilenz+y^rauP*1FSUDji+#91F+;dL4hnf0K-d>1nIjS){ zU73~J3nb=L4ZYP0LH9J<$eoNWvdKZ2ucU^d8vM>TL5(CicvQSjyb<$V*lf}B9{_1} z_cLove7=jP3ibJ6f86Oi$gc6cIpb4l`5GkZ-;Eu8qQ!RtYqFP9irdh5-B}m+zgOb(HI^VDt(L|5PK2R z9k8Q(W7aQ=BQIf13|yJ(S@A0!5MXgM1JgJ1H)Aa(T5AKi<##r*Z#DdqUUzTf9uE3$ zg^Tr}g8@?I^){o0yn-X|j(iD4j0~j62P6b+nR)Wc_HUGy>7)|--+?VB<(vH2dxFlj zR+O`D@RVBJLmQ3HP?PRx+P`Bfd~~tSidMGn*2q<~h8G@Js)6Kxbj$ylY_R^W_Iv9| z_Wgg9yR9$1H>_GsLLW7BoA+r|Ot#&;yJ!?}_V^m^_=#edPwD$#dem?{d$SM=*fEa- z>%nA;kE2z0>m1uIN4hk60scw7p1G&?l%1TT!RdsZKo3uL<&EY@4(YauY7fS^+4Bc< zk@ge+qHio~#`N@!GXkl>8&Bk)BaUo*UP<%Xq(1poJY^#jDQh<;OK$|2PXfza z{|%dU#Z4r4OEbG0;D{(@{uRD(_0LP|L-Pj&YC);%ASZ2>W2)FO8_khiI_-OPvEz^0 zTXU!>tFM8vf~THKez>7N2ZNB$Z>AaUCF;`_cutFtdvq z7&Ga3dXny?3>)v$EjV4`^rGi$0l-#ss#j64dKMSssQnVW9=jS$m5LJNeeq7=OF-e+ z4GLo2g>AGYGe*S+^8_Y2068)A1T*Os*?h|7i$OP)M0Eg74tqVP2X=U^DEIb@Bl3%x zC;7G;kjXdBk$Kbyu|ecI!09b417EA9+Zjcv#i2DhwE105E6u{Vf8kpS$#-7tlRDMn zx@ut*MNKe7mrO(~Y=KbYBQZX10}GI4jQf_^U-fyXKtTk{y=mPsT=-icLeZ)D*qW&% zqB?2amb6WJ(JjO!%3gbp==qCJ%`62I2F&;c}g!Ei$Ibs#KDpI18W@to|iA?fYY4Vx6Dg!R*8RlLBm$s^Tr1~Gyu z4j&;w*kQ*M!-0BEXjUd7G)VbyZzDcih!qATEvk7kj*UBsT9h_*iYz8Z*09MlX6&l@ zQJ}HojtuMiS3u#g(iEsUwZxXC#XpCUdn_+4Y>(5Mx`W&0ip5y%G* zII-&+xqdD$1O}v=SeAr*Y%`c#{6amLXr3q5lxDH!A@qR$yez4o*Y8`sEU<)<~47x zn7F;C?kwf;DLBkU5q&xpd3g5JX~fVU?lq_O#Xi||o{t3HF3|$BEYsXC4Rz z-V4#{#_^)McRyftBkfy`nX?PQ%Mz)!W*vst>=?FbhIbk@m8qqe@_>CefY`ywffr6& zyQah(=KME~Y_9FR!a8SB^yuNB3_aMc+THV&_D4ClS%i{~?qDHYp)K?cqK1r~)6GC= zUn_qd%oJj?M4G$PiDJ=$x)5T&(LE>*uuKdu7RW#W>b1a@bYXOodXf3s#ng)ZP->PA zR_6G+cRO>J+NK&)ZLc#+2!>3?a)IIy3=|4Rkacsxo!CFhl*<%g03oL0Z@67O2@ z+(_-*d!y2>(Jg?xsdiQPZvN>;_V95VvyKUS_hgM0rQ(a&%d$@;KiXUEf7q(=c>bx4 z+SN7o@Vx4Usraj4Of(%e;N6m_EoRn|psQ+#|5Hq3UhCcEBM5=x)aJc6HeV&)pwovW zqMyU33EZl$A@xO44V<<{U)vLpc#7M7PKqc+^mG^ZHFQamL{$c;L0uR!POF7c;Jl~G zJP`)1R7yT`f8-cC;N{vU8~3Mk5v@^+#a2OcmXi)r-wKqaF1Zd!)*zz?pDOz*SYcfj z?+0M~OKMs&%o51Gp&Hs1CF}+dZHy@cd%#9XYg#Q-cSR*V$<;T=6H_@qzzHj1$6WPw zqj-=$tKwAaIU46*Z|by*J_=;^Ltj=~MN_A&?X4XZ_sdU6M1~LaC+HruSA5stMLRt) z6s}v`nGid#@rGr!iit9R9ey#XVF5jC)@h9Iw^c9tLG}XrtrkFQ zAAVV4T^G`x93-9v1~#*$qOnk0wU&B=J?P<3hvHvr{)egk4!03d=kli318Cgezh=Gv zn^>e96rwB}4N0YG79lvj<4XkEXD*8E!oj{Im87*(=gl(`+pZG$?sn#j6I*bZE7YKz1DJuE4g>61F)+Iy25oncx#+ zgqf%@r#?ns2o*{+xvq$-FEDQ1-(ZFq4%Ji3l(+_9RD;u#qB4wHLo;Ena0ExqB$RYBVk8Z6n8jiaPj7^W)b9J(veo zMyN)7Ts_*0j?;4(e?iBr7%tGS56D2W?G@|r$LD2KrQDv}^x?{KHinf>K9X;qUH->0 z1PIQY+L6`FhOFKoqbB2M^Fa||2&I!JqeBM{IB`&Xb0JL|ezBgoNYb9x{d!v|6cL{8 zKg(U>=????>qh%-E|I%)HuVS1{{wcgDL^<<)W(>inO)sWH>e*J1bLlH1#Q#)-AYwp za}A@hC^Q*8WyRyxovpeNhE}G>y$Ou*EDs}rhWfZ&a_WeJ_2~@fOkW$dnkxY=w-E<5 z1gkTKLd>BJ!CLT&kI*Y&3$52Nvc zB7URp$(YA54qY6b2_ANIrq}l6ub{Y;zD<{MHY6;EI||-$5fhbN4fAKHuqD zaA!Q}8zMd?!pySH3?jkSF@x+CmnxQ(#=6s`}w1D6s08TYLEV^mxS?gzH{)Hp9H~F3e(;1_HT_5j8VMCU9arHKWwZ z04?5HhOb=@NlXEQWJ^i(wev`iKf4V0Mk>hOseP~(6?>g-OW?idWguG4xT2vRv_C$D z_pt$?^i?13S>TRtYp)SjPvPheeuk2|%?_ygmZe|nZ3t)Sdvi!C6z$OiHrHrgMX1tG z{46lLkynSRJmx|yYr(CwJkbkemWCIk5ZoJd#*>(bEB#7vAx5T%8c#o`KT2t!Y3X`` zuJR(DW!>4aZCY3PT+`W|QvR;tjz+KhBX?=NcOxBzeX4s(F4dxs&!P^)0=>dP=w3Y1 zZNwu5h#w#xKUAV-hSL01PxCccGv*onPi3PBnA(dXzoUL>{B3xHGK{CJOM)?c;lWwHGmT>WYDTlpuq%hQM+2tnH z)t}T~u!T51WweivKC4W6g*u>6k7U7ZPCw^>i9(STIGQWTd`u3)`lx54A!X7^W`l7R zPNI(t@?R;Cgh6PX6f*4@W)#Y#Z0DxH|{@kgmkKS zN*m}7IaY-4o40B&%$cLL=hcyW+{kcKyd(wfwPOi4pY}E?yUQ) zpN(cbnH{Fp>Y?ZXVd0_eEDzq1R@zQn?K`6O`@_fgbeGfqRrx+WTDsV;tg)i?yTl&} z7G4eb3#f+bmGnw^x>RMha-1czyRYMr;1)W=&2270CxOpwD-w~KQCh_xdaX_`@~zG!*4VI!=UTRX>M{T?-eRO z^FS6NgfVbI^F>b(xCVBoZW`U@N!my_W+Rf)9b|KHL13s-0NVz&hAE%~yTbqNalN?Y zEgcB=_R3mRRA2QfBS2DKf|rhP*K1z4%!C>T*0J={1p;(`t<4Rajqu=TY}hK_Sk8j1 zU-HOz{ukq}1XBh%>057|LmI3tObFeH=PhmMh{Wq6DAE`%U?WdP-m7!@w!csya3uYx z53;59NcxZ*172be8yevk1XePKQod^Gi`87Y1f^?vA%nR+7U)ec_&}q6 z5fS9Jkfy?LstEH@?mLa@<9()c?VEdpfxy?#l?(m&lXd=~ zBS`n_f7Zv_Wq2RG;WC0q?Do`H&Z{}OkDQPs%f3Hwl-JZPpTvgDY# zU)#hrF#n)$q|_zj$~Be=`+4PB;^O!jYVFb{Cg43I^{9Pg*ONALC29;id7&-BLfIYv z`?2DP=Jg_W4piA93>0;-r0(*b=oge;2LkXP*HY}#BpB@x(6;pWFrMzP793o4a^)b@ z$-U@u+eYgy-C{#W{p6XL9Dl^W>T%B1UaTYaOhSfHuzLDNgDDf$a53{hQj6w7I=D%L z@p4+VA~dCYcfIyQg~wIrmUQy2OBNwJ###HB7YALjMpK;8LhMq!^HJ3KmQ!GPzuQ@W z`b~zVa4~jG!9QHGW;zQH5ks!4t*I4C)DV#zn$E?a6nrSLdKCO81u?8l6I;@y6(d)u za@r$6>Ht!wC|DdW;4)Y6y%2%{dxs|Q8}f8GfN&mWO9nuD{sWf0R(f5yVpYL?BR7Sp z1vm=yM;D-+%CKz0MN)Sel7sP-bTsK=y zaiHLU$VP(R&&`yt3_?fET&D)MDQHQJLieAU$VvSPHH5Jq?(Q>yDD63Op}7+Bygz!# zL~S-fVhu#_hTiI?@FfGLxgppWW|xCwN3xPw@A81PTtWTM3Xz@!GtfEUIj1DC?V9fu zc`lj4PBVB3#q%G7)PC@u@`W7=jX5rK)`VV6`E}?C*N=^DQa3$RP!WMQ7W0PV7!IJ!Z4iYJHzlJK3T%K6?9*{~MHohvJN~hhNPFMUQ!W zXKdZ6KHZxly$GXq`$b-Zg`a<1$*=_I%eE!`2T)ohZaR)^>!{{aBl0S-wU9FXa<E$*;4_y)1myBG*ZNwuEf`kpy+v|845t#G;y43ayFdB2#xbE2@R zIQ=wmB6i#YJC=x(9=Bxh3HRjV$E@T4XeN-Em={EdH^?i0lQ+mPV^d~mM5w%V^8mFq z-la7`R7vsqcv0GjF!*%2JpL5%hDtg+c<&O)#hi(4{4yhn8_jvm5-SchZn}w`vqJ#SRK!&S{C{G0!=OsT$D{N zTILc^wZ7X9LscS7Ylt!BgDkE|#nZjf0T2eFfQ(2gn1}!BpR_4^d7T7t=t%D<#|-4n zQ0bo~6EeyRG)eEbZaH#4TXT` z`!Y@QiV8p_%_LNO{8R)g<6eG?iVCxOe7=)haaL6+!Ax^3LvO~D3v1)> zcVw>ESQ)g#S(}Ub|0^HAyWCtSlIZk^we5I z{T5?U)$vECeuF19;}hqGIBx`;d6TcGzGxVyp{JoYEf%PFGdlcu$;I-_6GMt#w7;0a zwn5&_!k4~UtlfSDxAP)higv+VYp7s(}^SMU0!fX zlzjT02tAn6+l24B#W3hQNUK70X8TK}rmLMcDbPD&UA_@R$x zn_W5F_A)ht!gYMbIU@gN^1BerduqdoizlkW@3t6g&OG@J-j>><=fya9 zl4<_O{!gN!&%w-FTzPtfVf&2X7TEctvA+kCQa61Y^7<8CRbO>+8YG>k(_|E3rhO?? zig&x{o0`O^sn2+n8W?J`a&f$Zt=n2%Pvx&P9x0^j%g68K+zj90DLNT929k&~`s*|( z2uNX=A~|%%b+Vj%P9FyD)$D%WM^tY;tSgJg_=*C5GQ|y44a8;GBLRyB1_yiB1NjDm zSAAjPF%r_$)RMR)q~pGD?EEHCv&ql~)=?Kxng_a?p!TY4RlC6^1P9^uSR?#52_>Ec zKcV@h%luD3XC;`Hq*srRe2cTyl8 zp1+d9B{WS9VYcyHsk5nnb?u=e*r6UKy^xK(mEN{C*M_%+f17vJgp{zUvW>M|9uM?< z1?Wuhv|?Eyh!mm>+BQcbm0|G;sjB(2^b1wul4J<(B&0xoUCwG9_>PhJ6~00Fl_#O^ zFcYE|2j6)m&u%2%=9rz==8qRd>QPaNJND_3Z@W_m!!O^kGXgI4f+OLD|M0H!k-Wax96BxRE6MmL zLe=*oi^$REy@R_?k*=qULwR;Y{V}K6P8Xdzw5w2|_#d9s-gtw`T+?bqzvTyd-Iktt zC@`Al;iLJ4qbwGIo8aaOz7caPMyTYYa#Gz{XIg%nc)X_7Ayaw>Ab^|UjP69W-2HyT%i^Y z95_;Q>oMG0ksLU~RhrvlrlkeAa)x`Qp_!SQp;=ja3@sJyRH#{GnN)P5qB8T-r~Uc8 z&-c21{Nbf|`Hx(1-}mc&J|B;<{_%PEj{X|=$6he9hi7(0_DX;I9HRd)DehB)snecO z^KGM)@38WhT+=;QQjW@30a-tbs#4ar{hzgjsPLY<`fNz;ThV^QC=Jf``03w2&GJyL zi!wO}t#0QnTW29;8J%)9%2FKJe$QboSS>JHnitD|!jyjc!yx-?#pxc%^#&udwRbz@ z1Ga_Xgc_b{FBF_^sdJRH!9y!1QGnd-)neobz3)ujV z2bfJoD)M4tg}bz$m4k6|I4J-%^n=J?>wgFJ4V%jF5&oJ>t{DCmC&%QT1LIwzM`fTh z3xy(J>{gyP?brCy`zz&zNC(HxxWw=jf7eSSjaa7Nq^J<@)&+&P-9aaT9It04mWe{PrQmSh=)(e zKyv2LbKFpgIbRaO;gea`g*g^{CFyjep>`=%&tVE$?;=>0Kg6l1net`3tmAP;Nz@kb z&H-u7TUG(SD%gSovi?DV1Q-)2yV&$Xr)1 zy&aQ@%+yh(>7m5zxdTh>vNud*AIx6|yzhC~xVO2FMoH-qbfn^Qbh9m4VZ-syXs_Kr z8oqgEy{9Apzl=v(t`EECceH!b@;na=c*!0}M+v+rNquoBT%Tf|v^PNecbfqprOWnK zpT~k5G}6mPSp(V5Ek@(^5A^5PSk&!pgT6oCl8h^Z_tdQzZYLO)Cd4P%)o;)*q+v(Q z(Su+1j;1B+3`H^OVGV>y%%lQWV^4!-n+Yl>@q^Kz4pnGm<6D3%p%1F`LKBs{Q0Y`D zS}3yxs>WCC@T_Pv(y#P4PP{|0U%7|DO0V&W$#?RyC@ht$6}kKJ{AdTYLz{n}l*qo8 z+0&S!0p5jB?Rw2(0|?Yn2dG{}>U2PbC2{9b?CqjvURpQxa>_b;s2uEP^+EF7Z6*>Y z!~^jK+>rBW>9YR)M1K7_-plzq>$FM-AfvdJ)Mju>tMMBboYdOrb$*rN%0|=i$kJP) z^wNA_A`Cw$)>;m);uLFYo0x24Hb~=;s9jEUF`~q|Wd6z*aSyeh{}m2bnlyR*Mo zr{Rk#RH(cQ&Lkq=L`oWW<+T8&^^KtXb19^wKA#%*&~@IAqZZD8+CCukZ9kUrS50UZ zEaGMT)fI&I*oS_GBk=eEg<-^+)P8Pqf(Cc-!>xcclM^9{egR z{nIlC7uK~?E8U`@jK#S+|w`n zRAnu~RHq)zM*MSY&SReMzy@CuzsHyd6YL}TTv+~Pd&`cZHjc{JBm200LPub(;VxpJ!4Yw?BBd7Bg2%gd?UHr>URO zjfTreD|joRyKS_TKGUWCktp$;71r2jQ8Wg1o+qz!L}c%FQi(Ok52ppmVh{Txo{==9 zr^wF~M(I0oGH*-$)A{mhY3AyO=zyUc6#@dR4%5|K`zTua@KOvhj%H@35vJ}lqJL83 zJJ#();*&fC)y&-Fk*+tJix2L@D9CV4Fn>zU`1f2#4=G*rQ6B7~Dt(hv5IEt%0D-*C zXul))eyi*4-~iOx2lgGr)e@ z@z3NXA~f!2?;+M%+0h4JE$^A(_>BntAxl0^|N6-Fga+%%#Y}!j=8!_{$Hc|N2ov~! zEEgt~7C?J*czk++zWc^D0woMXmD=yu$^3Iu?#U)AmZWg7S$|6vA_%8F(R%EPjX>|r z-h+cRx*@Sk~~FB~FIX!}EeoP-lizc0yiVf`tkJ zlW4~TfP@kiCT&7}Tb*SNl}3yyx4=$e_%9}_@nfr&mxv3#k3%5q^8W*3kEuYvAaq)G zsCv;HxO(O!vlAW!Fm=8R2}hjsR!TUjroI_jVPRdVqZyx~jwY}XN>?$e{r#nVyLJrh zBGI=0e%5mK;t+Tvt+A~8{PMNrtBTPlR8ViUCJ>((i(}=VI-{gMHEEvN>Gf&Di?Xt7 zPG#ZKsRMF1t52vKSG?IEZQt9d-mhR>`sOHh#c@g}wuK!IALBK*iT}`vJ;e@h-~Pxv zZgX_E*OI&+9}Fy{bv7QkGF&mDasm+?d;6-IWG?KFK&pBw#?Jo?WdD9On?2v zW$aOg#~7G~W>$9hx@hXuZ~k$0EAkY5Pxt$=*d_iBf?Lm*vJILW=|#%bd5)}2#ms2t zNT2C2ce+od_#h+=hU0x{A4l>n1%93%bh2S+%=ODL*D>7@{LtLgF&jolOxg06Qb=pN z>3}dqQJc5CSv;mZNFbMS1M1gdq7ELSToZz~-Ho5_PAG$Bj0UV24TQKs1b$0S7VD)1 zkx3?#6jOZMQ*a%v)@@^9(~k(z=U4%LTta3SWDwqt@6NLTa!t30aQvD^SX5>B$9bS2kKyZ+XyN`1k1?T!IUT zhUpDLYtIoS)ij;j~?@KUcl=miu;vB@~i!$hd!!r zSy%xjGjwf~NimMQ?~~XFx`>4DyQx$7OL^g3A$@s2C!@)vw#DCv0zvNAta+}TE`jWI z@$0VS241AL8y$1`0*^I8rtDLg9uUWaP@Ka zd_= zY^kKR58{An-}aO$wx12G#U{wkt(gRFlA)VBH(U?}Xm-GQW2wljgBAD$CvT+OFZW&?i$RZ#RwfztLc5gVoxf^w6yG%9}bj<3&=uMHh@(Pw+bDu31?eP2K;Kg{&VvBCtDS69 zZ`0w5Ai;+Xyz}gl1fPcplPvn!rtR;)8~-Y%*$)lsGk5`;i*mPB1wVo2qzucM{{bK7 zx5MM7T%74+sD0ewcam`yMI(F$S2J5{DEkyX_A@J^JL7ToNzFR}n~_Yfz*X1aaISj) zBNxs_I(7xN!?UEWw+;g_i=blfiqa1-yfn#JwiXl8eP>fB+Y!BQTgG5Xnkv( zdq|XIq*EIc8|$yKdG~ySk+MECg7)5ghf^(sPHyGrLdE_=&Ikc2CzQ%?z!RDL4jwm8 zOKEcx0K+YA;zQqn8KFro5$)5oU<@gMy;ZO{FV+k34XDzWa?J!#vs?KO8RTyYI=WW^TW0m5*K$AdUG@whD;h=U))Tg%8yO{n zuAPojasC0zN;HtzqsBbCZLXG4>9+%7l*@OMq+fzgs5}n&$c;sf^nzAf&SbeD4_a9H z{#4yQu~aOQ<;848^)V759{Xuw9v<5KknY~kj1_eyei+gU9L}^Ot9)b*N#LEO^5OxV zzT(trH!e0r5=T>@KC&13B&LhH`zC8ggOUvBxTH&-N&1RC!e0L#-q{zoI*&h`vGZlyp;IEE9DTa-!53@u zi)8VFe=1q`5WE81G1FI)AGo)L0qiiYfA3PTqe7a=Ia1>GFYKp|QpmmS(ob4e8YIzC z_rG>~rJlTsw~MWiCv7`h8T6q)6V8h7MLM4fcvEM(+a>ky=Bmwurn<|`b*IO?ul(cZ zGhF(qb8Bh)z;-8de9A!zcKIcC*+a7uVCVjH{mQ+S{6!-T0hP^5JhZc>x$O|}r)1~f z8vXJwVP_JsD-O-Aza7Q>FTYOTIy>@aNe;-7U@Mk|fp-$a_nbT(ST3vd0*O{fAk)W= zk>-=_zT2$%oix_!SO$!0Vv_eI-Jwdl-bnJ@zJ~#+&}{Y|za2XtR*{d0ap;AUOFhZbhxkQmAn#uf zHywa=@%GOJw4=ILH)R=7II)r_8R_TGhQd_$DY{Bj?KQ$sK!qXD4&jFZEnOsap!MAj zKn$M)=wQq;ABouO!oLJ4%z0ClzhdL~Hz0zca5|)RmUf*hyPGS64=rylQAWg?bWZ0M zv*Gi(C9F6OF3(Y60=m*`ZL&q$FRh!uIAOKVzQNSHU%Vk%b|}|rMpJ0DtAmm&7bGvL zFSHw7!q@WNu86J-N?uS*{q+uCj4j`a_`5HXrJMeqy>Y;2!W16%j<~K+32-DkL4Ru; zuM(G}@8M{QH}%<0MYYcE@$S(bzzUx!+0!ziqwh*;dhVs$Z}=Xkyi)62!g+V zxA~rWi_>Z1@C*vvSHP)-qTC-o+o;x9Rq^L!bPO`Ue6v9FX(`|iX% zbs2)((K~RjZB{)1(qK^kG|C{=g|dW+I2+IiJSV z+IuZ%kicla7H`wIU;1tjDi!MCqzEF4+y)LYcbhS`7KD{)J`WY3hk4MK;Ik2=-*iZo zxT%?&z6}2%KSJRkxaMxtt_5=DH#zrN`R?fVHA8U~WGZaI>`vn6??AUf7y1sC;fP%8pwTi$jkXiujBHmvzUX6HkL1L*XZSeJtFJ#xTXKPzA3iV=CTWswpTpZ- z5gNi?@e?YiS^-3(jQ|=&bbak&NaE;D74r_fjDlmL`}`(2D1JXd(Vik*fb+o zq7lH@`SB0bh9p-XOhF!g1i{`(9Q~p1E5HgmYuiFgR1|A&ez)@WwVzJe2c*J$uWMk1 zQhbxrb!{8qiNWE@fX7w>IsbcymX788(K-oPAVjw=Xzhs&F1c=48edo(PjXaP#^OyB z26cf;5K`+UC;AVxy17Cu-0?h11sWl@>D1d9HyFzefF7n7DBXfGKSC!EynO>$xAhTN7@mf4W1+}t1$6ucl{ackJ6BQjTzm;@?9K=83rSg5^M`?2d#jW+W*{g3W#gTp+hT+)7L z_}4kFe7Q>fjsF3uX1k$&1iVqcmAhAiJH0+f;rv{YTB1 zUjbgjyNvI{5-1J^1}884YPV_M!wRG1ic2#IW5bX4ZY!FE^{3MU>9KPyiC-w;g5WSo zZYTvy(!W{N6TcpYo-KRORHEPC-t*xhf`>8@OtTH6VW=!U7)8zKn-&>(DTyaBFC@lS zE%=?L&lwnVA8~fMJkot#R=m!zu4i3stOvMVSq?6G9GEw*+srp#2*)5Q{o#xIKP~L) zer8GfyyT;pq*JzPQV}IAssRY}=&DoQ=buA*BYbY^=~2Wo{%4&RZ@7CLlZmeUS;6oP z+75f^4E@ZkxwbqSExG?^PxQqcmA>z|Rr^=?ryxn*=+NnoxhufC+F`%Qu6qQh#w%Ko z^{w8~c`c8FGHrfg^>hEp{H6e_P&)Zk(&o#vOuh#SlgjvE$J}2~hk9(3gsJgy5owsRX1L;I7}=~J zYLJ|6nBJ)9(LX@2T!9j>`Zc1>B)nyES&g0_{%)_EW~YLP+3L_^i{i=LAdF-Xcrp@c z3XVqc(DSX!gM;n8tr`t13^UoIS)_%*8ZLuie|=7_m0K-oE_jm&ZZAlQFZ2c*JpEjP zzoU(wqrU_Ce$y_ijIIrxRQ>8^6?vWH0VD@`SY(W_nkA8}g+=8MUohq}^L&H^w5S$?>3D8WAIV7~|O%s0*??Cv(1g}HNuW6Pm zTOz3Hx$=ex?oE$)Mraf2lO(!lV1cGjp{n7PWl0JjVfu5Eba8%9dMSN+ zbk>TjIyzIa&TIg~kbt3eFWh1S;G1yrGWVB^4eXpKm#~mbuW3&oF$>V42Uqme;P!Iq}cJnPEe552Q(vx<6bzM@}ek0n?O-)9}Z zWzpQK`SkFD=|SWcLq3qNZr!2sAJ6(yC>7>#=Syj?9kMo@pa8JgyCK%804 z_ye)#vQ4DfTtIKip81V7vUuJTT2myVOK?2LBDwESPq9&6KrY>kwc_eKTz-P2{~b(b z8w(6rNMj8p$k^=K5iXc0(xMKu-rkVs!Q5Z@L~$kd&@OT*x8Vp^{`YLZl{a@gbH*wg*9!qP&`=xYPZ;%fpC>PYk=!iZ2%YE_KxTRPI-7 zCTtdX_qDIH;no1IFt0;aD8-FCA6GfD%F=reYiK~@Jkb5&?YlF~HL}xz`eEqB(FfTj z3IR6lG`%zQ;G*{a4avnW={@Ao5bN`gd#Z-fl~ARjyku5bupbv%nNd}%1&x)8;8gne zPb#Q|ahHGA-FTw<`H#nOq54avWuk=~t`wws#yR67tdJ2*C2|ZeiElv6z;6B{ygbJE z4sD%?&3p9NbPIST402Ks8Q_th!wC0$a;{Qn`;;d0(F-Xwi1zy_<{B=Ye%eR4^w<&_ zrE`4oc&S0$j)~{>-%R@iS0CYh??h;L=(V;(BUK_YOxjGcU3_|1FdOsG^P(U+_LAPU zy3dXJXGjJM%I`Fr>r4}+Gp1%24hwzEHTM-jHbZGBKjXVKTh{cZmlDW#!i_?;UENL$ zjWe#I0Um*6U}ID7c8CFj536b)?_1Qq##ihgxEGQ5u469HKJ2vzmQW{Or(j_|0jM68 z=ZtK_ueb<4?of~u#8gm$BQY2e2`HaIgDur1qr^djT4-yA*lmc85Xf~>U~l;PG7Hfv zjaQQUg#n3J_PN57g(JXQQ1Exj=-d|@7)Xfhfb`0m;wOOEuM^b=MhC_iC)wkaWA@WX%V`&N-gLgwPH=+KS^Ev~DI3P`xWEhiRVu`v| za+5~ne%~eE<;H`bc!C@X??MmJoA>j_GjECWZ^+Gb3OKDD_aG&I++!Fom~L7VA@fS- z1@G#Q-4N;s_W90m)Kcq5;hT3}DLpGXHM9l22_1mXLFGIOw7x;UIO=R!y%AtGO*sFE z?RvS%M_i{^JmLa!IuS+>7;!S@WFER2>{AdeQ(lC4G4e$kx?cJWIzpm5DK{4=ak-ge zlR2o0gW%$yl_y>{Z0)_P1esSq>yda)cxAREk}GNFN-6_m5UkDF805Z~>@R!zZz4{Px}6?&1sI;k{V8Nfyx zaD?GBo9mk_RBJBY^} z7=|R&>03#p9>PX?t>{tdPu#L|E%;dX%f9;FDC|{dg;5AE%yn7m+7j&T+$hXLp2=b@ z^W?W3&}sd*wF%9Yeh9Ky8hy=!KgD$eiD+c>4W!Ma1zG7E0aTTasWjGEdtOW|SLWXB zj`FzTG6rw`uZ4Ax4ipr4-ltD8hCh4XU1EyH-arOhjdlpA8W;UBhr$n_it}M7S_I95 z?^~%ua;I9C9q#62J&7>#*E?c*BFQWE>%lWy@}g9_SIlcEoK!yoBPkC zxmOQ>WT0jA!N17ie$0QjRpWadB^VPz{caei)HQoL z%#RgfjnE+8u6LX z?I4=Dh^ih;GLEC|Eag-20P;3WrD8#D6GB_Bd{ap;tSGIZ;|u#r;|d^SP#WphNS-P% zZ7vQY^Fb$$Z6fptJ^pzu7l;riVYIEt{iqq$OujV>BF~cJ`f)#uxRj~5BdQgc>Zly6 z3yNW}gz0U*ah4V_VdJ1f7p#c&ITsXbd z*3;@0l9;|jGrMicEitbrCI~?D>sNB3H^#52X_3VmQ9etjH$W zwd;fggb?Z3rcU)elz_c1xbCq7oj8MJU7Jz&y1_y0Np-8+&kuUd)5f+`?wIN?bu8x{ z-K9~8KWa0MDEOfI_p5W_?J0TJqw0tP%F?}HrKNeP3#M4x9@WVU$!iC82Mo(oj(S=y z%S0=c*V_y$KK^5`XHKQKxIK8<6t`&Q-VD7wJS~{M!BrF#Vg3hnuQD)+J`W8q zsyG88n&RR38;jsnYlEHF^R6!Rm`2L(G-!QgG`ZhcVhC-=en++*20x9d+~x}^c@omE zJlNPr9^q#QbzoH)nj9XZyoD!Ry`}r1oMcwQ`c#lWGP0mfd(i7spv0h_Fm+hqv`3R9 z;A(@k_fAXHBi(6Ilkt0c2QFV^sNNygc?8GU7QUQ?3F}I51Ffc*VzH&Yz)FBlaE2^D%Nnew?%L4?!l&MyhrGF6`YTm6O(kH z(-}>9$|Q512oW#tc!x5E6lDFHgoj1DtSXI69Hjf0b{;D=Wj&$PrP$77ehqFK+P zppik%kN87+n+HS)g1<(=(2nb?+V)f2zV)rpHH)i{eU>3x;t=`YVOAS}e#!4DaZ8$X z{7^fg2v+Gwx9om@91}tYku#HczYlk9UPISb(q!M%tY^jShhCz&2F~qYvVxC)h1-l8 z6+mNy&8SFmGgm`@Zq%Ox?HE6OIV9Ii zCEsmL(yprGLq+OY&ZH(uQN_sSrZSE6o0jorB{V*+oOme8)!qhOguz0Jq`4gRui_e&A?F!{X3-fV@<6T@ZziL;} zLxE!Cxw<<{GSKYRbzK~Ux=A_{7qXD=#u00qxr{g^hQYd5@g#1*rWSg_XsaJ)w{0Db zbd)te_g(gjT(b!+=r{LS=w{iw?{edS8tepZjZ<+KlnB5dLOGD6Fq1NIGCI~(5+O(4 zcYHQ|Az!wPw2O8og(=bHf?%>ltq1kDhAcZ{0VeOCm|3bgnOMvm-K?e&323;ft?Sa8bSOgG(3%>>DP`FUf3hYCf%2`NO#ZZ`c zxmBu4HT}UcBR92#>QwQPyAB0;xxot;;$Ek6-#G2=`Z4P++1`%8>xB@@37u$__WwTa zp!v69dY*(FJgz`Fv_9p4o$r}iC}g->{fN2-2g%y zW6;lp+vYN|f-~%V$VMH&H3sl;9+(_G3S^U9Z-iGeN(zOiC!RY4UM>oYmx5>5a?Xp< zQUxAlR92X3gq1lqZ&oi7+3+5osUlIdsAUk>0V5dCRn2W6#8?cn@Z&S+K~T~>_36{_cM_0y^{3;3a$Xi}jZ zhZlxo8y~}b;J5*U8+9KylbY>rB;t%7xoyP5RHaiY|H45LF8T#9y%VFq;n0jG#QvKoX>+5u~NVwT-G&sRN__l z^Po*-;MNiM&6zC(^-o@lHkdopcC@MqWq>!lk#A~l05>Ei&0D5V1)ddUZ*!9-tc>sD z(38wd71=vivQ zh+hag^}n>TEm`zPlsL9j5W2t4)>V#M@HzgfrUjiLOd~-v7@K%?+oCEK&6u|VMWn%o zYO?el7oeHyK+~2C-nrkfu=qaU<~rJH?ScLYo_S$f4GAO)ZG&m@Z)>Szmn#GSk!(b< zqXwcLNDBmwh*lb29_TW@-p~;tN`ku@Do1aZVwQ^GEESgsX@$+!aDO|<`K1`8%AT^( z$Qhl*@6ZOLJyoZ+d3A)LnXZ!ZpRNwQy9Ez{)|9g3ly{;~m zr+dNTadl!O%d=S9lJ)-={eLG00M;|7rv0RGd$47r97s%Zm$N5Tkltl!bLG6`Jt-^O zdE<(vdtIU}%g@?kuSOooS=m;Z6CM!e-3hz_dYz4HgL^asubnTpJx?1xs1$w7Vdt41 z0vbKdw#uG|25%#C9WL*$S!EVOl`Sa|rtVkd-NUkL+P(byQ#SNJ(LH?;@6QI58kQVj zhy9J~SMHH=EKl$jXN?6e!c3d3H9HJ3ZukT2$Q5g{nYr{rO5@nwMwwt(+nb|=H_JlF zn)_K=)_uR}>gVE*jk4A{%y9#Ff~iy1;kR3H`YLxWz*;D%h>iYL&7;?0&3r@E!%j+N2JA01~?Jk#5wJzYs3oH3oH==gXqv)@w)oZb8~$`&^+exwf~Fwvi`e{W*G8#b%dwO4X%NczOqw$m70<5WcB^Y`OW9x-RV&vW%sl%N)8 zy>Bf9*J5-P^v#Xj)UASz@Rn=Q3F5!5Eclpf-;UbxSAw38xp{V9z@8&YHjh2ARab;9 zI4{qqKR|9MU7JY==>?p=w3pXXCz0h=PNu4uEul>Gfsy&f1 z94q@|ii}e6sdY7tp($ zL`ck`q@jnFwF(RlZzZ3l`38PuXP>)u({s^=!hS z)WGjCrMLPC#I|1Ji@l{f)_{3*I)IvfXP#s@{28Ru7va1D-n)_67FmaL6D}Y-ZmQ;i zKxDVC*91EYo1~YsCp-%+85KF9N`T;!uBdqeKd4fgrwsfocguJ|;6g=!8s3=0+t3c9 zN1y7p7AlZo+#(>@)M^o%Fa5nVdG|~wa=j-#`Vn)Rc&;`IIOwd$F&p_S+ zF0~5Hg9<~F9Jk8``7bZ) zjm$^7VLEs}w-Cf-?sDz>3QW>3N7p1w)~;eV0CNs@KbQcMrh@RvZi67^4gFt`fM+B( zk{)N58;^##{tOXes03jL@pAz+hK<}i=ns7VrdEB&et(+kqmX zxdHiR_OpO~W#tHEv>vk5OJ)zAzMOmsZ+J=6E_&?wqgyXU{UNEhs&e*=UKLw;+_HTR z)7E&>yxy`!e`OxI2WGU#U}5l1kGjIb>z*@K;84ho7X~8M`_(TO?96N=$IpSax-55$ zVCYC%;KVD$u93tzW_Qskz6D6CW;ij2glcwx)|$dWHco_ucpk-p!Ih{XIAw9hlrXJ0 zW8_4aTyPoEvF*>n?OP-uZEgy(c6esI{p3Ug7Du)a$_Jyf=9aBs6=Evw!$Zo zz2^z-`GF-L_JGdFW8txYXjqD8lxJNZKO0{sNJoxBIiQ0nWM4dIl!{o9y~&p%$?nGQ z=5&v2d4C1+{iS&A3&1Q@J;L25*9={dhc{r9>q6CsS%Nb_=yO=EFS1p6ts9kyWB1|D z-zO=2SEb%M4fGohAV=YU(tFl$CwEZT*`Bpl0g4f0EszM)p^AY#fVDjHgX2LQ2HJUg zKa2%7@Da>z(Zw2uH7h}83tl`@!NyaLFV4H)v4iwk>pITkyJAU?4p;J?>c2;%&_oB$ zF$8WoH{1dqW2*iXV@!5G?kI$@!Upzpo`MCqlC;(b)gdEwAGjJ9$IpkTVdx+nhfQOoM#w#?KBAq!_>vmLQ7eK{pfGd4%O$0{zjuz3&7Hg2K|9eh?l^$ z1u~5=+U9~WTa5$9oQU&++;g7>fG1eUZ+h4~UmC_H5wV6OJ!@{eWb0d>nN*rb2FruBLWbPaE z)@UX|AK>#F`+X*$60;>$RmD6XS_Ljz1?ksWR#{a^Kc+3)TUHE3C=LZs zEUFGHC3)6aSAtKtn&R9`DAEs2#{OQ)rln%tlR)_*Nt+HX-v5{P`*#&r?hjDLYu|3c zg5;DchMANHn*OS}?KB8MREh?kH@7v84SoFgXYTW(vDL47j{Idw=u>&^=Tm2D{D)fa zf$d+2f{)%!=lnssRmD-#a8R}Lo(pdtQPpm%UVk9-bu+EoqhBFGJ-El?XYwHQG`OFPZf=!L4(m5T>$~RY?1T9K^WZ>3+uaMs zFs+1^;EuO`7|qMcW_vo!+x~2@JbeSRr`<>0uOVVWvKWLvxZBd;J&tAEaf z{zjvRgCxQ&Ix&=nW;JWoe8-YPjr|?<-(Vbp=*PC12#N}TzJ(H{kY%dzhssOu>i{); zr!DCK5tNY~%hlLaST}G@fd;IX0V;=QLr)iy!?u&h0(X&HI8FEU?vkGv)2RHr3+c!-mvCxLHO_!(Y38NH#b?57lKs2b^( zal5&QagO}ZyJ{=tp)~H6RfPL2jv$1{je8%aT?E4G>qGS3W2mU1nr-t~ZgWLGG4M=J zx-&QMWJ12U%?WOH``c&~JAE5rmezkGLdTLT!DxI@6qORFnmH;xd6v#)Tn)li%<@aq z`VG8aQ;+&N{Z1)-*mJKl?*C=h-`GSvH`z`>7sRmG{rxZcG2u(WLp#owly#ch1`)qv zn|eYRoL%ldm`PFdN6w!5g^mcD7CrMlADIU(Hg6hPU5BZjiLNU5SoB$^RX|M3UQmrU z5wYfKBB~Nk_4J|t0SzbeO?9nHlA9RWo+IJ0Cr_QFGExz76Fs(xw!nJU!l7{?rA{uE z`)6*o=EWAHHT&1*JI_uxy*>@it7seu2<@fs`F&e(P*omG>sZH}QsZ^m;iAqsb01m; z#MKNb<`y3tpoR8&4o1053hxDo4^@(v$egX{|*t(4A_F=;JQK6YS;GBNOxi>&1xj9(|P}cj{gA@#z zA|eMbnHWx1P5C}qCK6}%WZ&(62x`iQA<2x=?DsW)ikBk~FFB^Nv`cA4wH6%RT4Y<_ zZGs%Vl5l(7b@mS;(VS{Dv2Ck*T@^$bObj6VGnpAbgbaPF^-tcuLm5mtY9%$EX3*&S zCA4xB7J(geR(E2n@%N2%KQu8);3Q!E!7hU)LI|C^-u)*l$1trueqU`1%(-=)W5j|mTbRara#3uH-}nPBgM zhI;91%iL%1%Ul(nod5(=gs4Khb1@=mbe@?O`8#~F5j`QwCpDR0p@Ar!hp7EuD2t2G z<)EGy{jF1Xbw099b)MhF%0#z&7)vi36V4UeeO?%#QNC*w7-aSG1~TfZ1y8F*+=|H^ zJ}vqQ20W};S`d0dCca~yqvO*sht6b1Uk;)BcX$skq->M(%#f|aznN#^NUHAEzo$2i zk?TaX$q^8W-|VaP4I%dT*@CI@H@~5*73hZ(Kks@RHA0s)qb7Zod9TwDa17l@iM{=6 z_b5xYSJ68<3(-5g7+P4T>R5nZ%GrP9K=2*^RrB55M7UKYT6Osnbh4;KuQGP#LN&s# zd)T)Zg@>21mPs6ea$Sg`F+kK(W{H_N)fLZDf7z!#*$bCz;e2(w`lShXALYbZk8zPN z-Yr7zuCewQC`LHzp;>cV_7DR%UUf)BJc`{4O$>lQg^82EH>`Jv-bKPep-5XXu2xv4ob~I&_*%iV+6sh?9X{?MAh_KD>0djh>pAd9ic^;z8BdGY99z zJZ|qUcfks@vPx&sUpM4#{Hku(r(*9(ILPp+^m0mKKA^v?=A@#W?@_@6I?>_9-2~lQ zhq9$JoLbP*@XtQeAm>|VC3ki1<%7S5_2{3Rv$U>)xkLTq{$1Dq?@;y2i$2T=Z>Dl81%>e;R=2+4Ro#X`D*{#^1P#Y1DeuwdB;Rv2w4CqtLG1}1M5qIk? zmi=OFbOCx7omgZ#e4eVR2oaX;MtB}FnqVG`4UmPUhS z>uMC6p7<~61_&+PATb%Tp(OMNL5D{Cc^By-X2`S&{k=evi|^&@@qeV#UE(zWY=p}? zW)SfnIEH*5Ud?RkZZupA+39sls!0f)WP-#LwhA;P?BQ4c{=V-(@F+Mou&(XG;!nQ$ zZoN|8^HRp9#8B6cdj)M<+j;8ctWI^Km->tTm1KyV_BDcyYAZIxYR$EPwiYd9HXIQz zWgS!wDUco;T2@d_=&&szm1+uaRxi0Pn{(CEFy)@yEJIPF?7^LZk8i(T1*h@1tWUQ& z9Q5q5Xv_&#*G)gd?EH?!H#0}yRjOYsRUEVih1#R_d8tylF4>+OsPxo<$r>3ATbox6dO}1uJ>$+sIEz zABHr4tVN$H+Co0LIbxqMUEk$l1R|{dIcW6z?{iLDf&Z*QpWfKhu!Z@q@;RLtJqDTH zU1t=Pu{hQoBS3++7f6j$84gR@@0vMnta$iHOqtRbgvplshL7Bq5=-;4-*nCUgZ_W( z4M!`xVKqXghafg;3G8#x5F<=nqFtCA*HPvOH&LwvPs4u)*zq`Ya$@b9MEEcCXO|{e03eX?z$oj4ml8 zzg_WJG1NWRn7Zj)v)$9SqE6Itx)^{HzkX1DDRSzOv0E-XYl$I)v0 z6Ib&lW*9zpbg1)wU|px)jCpN&&nxzZl)K91b17>=dF*}{!^xGH(@h~az8pK#z&;%- zue+stH3VtWH7-j3subrpvT61W`9>%uX#G$kkiien^Ex0LxsvP9aaGURHK6;vsOvg< ziquz8=Ogq76Q2A^u>&*`?M8aE1u>zqXJK3@v0^}y+K#sq##Ae({z0egr-?(Hl=Zf3 zHi;yr*o>25(e|Qq|?)L34+1t5pYNHttzk5OE}6g`Dk#6Meh+C z3s6>(R3*1}c!%!Fei{Xr*uzo<<-}|)gghN@7)T&n1vi|$+Cff(NkP&aY%nQ|yPs-O zE)O^)71DBk9_F9Mi6x+iK&)GJ(A`(|eHP)?0PIwf(u>1>LHe12%0sk8xlN1`_ZVZ;6+EjrmrBC(=z}rP_#qj(R#T$B3?FBL*<V!rVb;qQ1PVd{#LZvy<8A1DOqZyO!pjkn3hDs2Nc#X|~rX_2ZOkOa- z%no>4Az@2U11f4Rq=Nx_-3CqFZ5W-XOUPk-k4o87Uyg&{%lOEzAy}}U! zhGC8Xc1zYCALqjQAHYWUsR+CI?!69L2t)w-FVz+JNPUIa{<$ja0qK77$kIinmqO{3 zQdK^^*7e`jtTPd3wI-(>K~`~PE5wX&258#dQ}8ArN1sFSyXOuEi)#Ib+Imlnw0rAu zLWB!wf;OB0;9*OlK%T`glJ0H3+E~AH1ENTUS1CaMA4}&Q)nvLx`!5v;1ZklJ&`=Tx zy@V!+p(KVTMM^-xPz_B15n)E1gx)8C08(^9C?cSSBGN_!iVz$$fMBpjjU(eQ4uc$y z^_=^idoOFTz7_s}KLR}O`|Q1cJMsX(ZOhZJ)IyYNP`(rb-67aP%;>tLOCjj&m;z(h z=?qpGxFcQBPz57;H!SP|m)#T}pP~+Ot0*{^Ffgl^x1KZ9+2=?Ka}(UJR(xNx*y-+u zTjbB|e`QiYds8f4LaHyf&=#zg;30~P|2N|St^YlXz)xL8a{y2SZ}w0?lcK295gMqg z?ww-=l6c$wGn;YvyW!5_Twm47#9aJus4S&nm;GjP)apn;y~7VB2SS{431QR4kMQsN zVaFW|e#2jBa7!;eX?+Z=gxyUz5FdD{hx`XvBTr1%JrEzLKKlntoqZ2k0lhBlg(b`?~|r-h!sz$v9Um-)F!wUGDKjFh2Am9)v`~4v@^w zm7vkjUqK5E*#`;?^L1lY5D6eOMRJj@{Im4R>d-g}V#ZX1MsfPK%~~_~9l+T<8ab&bd4+YViB{``(eI`ibI=x+gKo;X=B7(+@9=IW&Y)5|eXEr0KJ@yko?wMp z)QF`LZ~J<=%U-AptEv`Uitv=sfe;<|Aa%*tD|s~=e#3X0IbUEt7s`0MDt_$P%2Yi- zNp(0BxH7E7xBJD_DB*GHVxeXn$in$>KXhpHvCxRRy)h=TXbJF8i?yqkKde)(%2T`K zS$cmb&LLe0q2mRg`2BJVjg3B$lPm*=j#ed9n5)G454TT7yE^_|FV6u z1b)+d@>TI$&XZWX{?UeA{VVE|#=IqppR|1|`R(ao;2k-pweM!)Ny3S!!t2n{*8@e* z23)dz3S_pp^o!SW_Z!XH`rhP#>rIM}(3^fvlfz8szY&R#381 zzD+f=jCKFW#=8?OtG&WpvAcQe{8Rk%k~ThY61e>uXIPApxy6g%cCl*z<8^K5M*@}# zN!RX*+!aJ0?p$Xaj`jp0PTsZQ%9R`lxMT6?60L*gOKn) zOS3M1v5rKQyUOINcib=Ya{lyw0g&Q`B`g00s$5AXu@}E&0MseXx;;7{N!ve8wC@f6 zJ(A{8iO-BLclvgBra8guel-8x6c5cHdx{S3itMvpK!scBizk7c@xJTond>yMep;NPIv+>t|0EXZ>!t0D#mabwPC{F5O9K;Ilz zwp^869M^BeX`kYKJBS<7ZqE|_sR9!QV!#cVM@&-T7xG1k$0%U>CwBmG6p~uj7R$nO z4CU}G51XR8W8dORBZ?1iseV$7-EsoE@4$q>{O#9X_Komu<362 zsx(_|8L6ze*Sl^YeZp)RE3|e>Iket-0yI$t483VOuCb6~2-qmz^4A~n05*@^C;UV}d67(pqSdtYcknJK0y5+G!@SlI4_kx4JtX?`G} z8|FW)#U%@z)CJ7|UV}&F3cNG~VU>Q`9KB7v=vfnMT2v0puVAVc`hry0R{K`e+jg)9 zrzZgEKu$3Ap)RVMvun5-;Th(f*O-f`v+G$%35L;X!!}l;D>OxQL_oA=7A=-+^vv4? z0})(F1i{^;LrUrBp*;p7_j6>SGyJc?EQ>qW$W4{k@$OqVZTLkCT^2*RnlIFhLzNc-7}erkKzpnwOvbY_ z&upCbLaR1{6g6`LX2%Y^w_|MC94Hf7cb5T+9ifSgAk;9$J_f+^#L)DT&%`RQaj}}8 z2bXA7<^vGU01#sO*oT$|^roo}MLq-Su@v)KU&M`F3zDBO2ew~yNxf%@q;8(kh7AV@ ztaH+Q7Gf1$0qfI|h&qmS^uPr0X{Z-PE6kB-NA%$N6H7?S zKuXi-^o^xechX8?oGRTJHFR`a>)F(xvyHknc&#fKv_A9_mOKI(b5XZ)D1cG_MrM_+TbB}2?-v@gDiyC7 zg@lj1RE#JZ%xFId`Y6dl6$f`H)7(n2<0Wguy4!2P+z%E9xI-fH_haOmH+RUU4o7Fk}If=)(Q)cRkTp* zIcZ>eT&vYa#e})vr8#UfGLmg7X zC}OS|YrqNPsAN*uV&{;iK3dJ$&jp*ZY@C9MBLIp)E6 zmWH(r#A?aEVFykxi+ul6mI(Xzrb%% zHC4-y4}_1bAdirt|FLwGZh!ik7jns~ixXw~fu{6ZbBAZ{CrUt@*(ARAPt2{p7Vtq&VnI)ZFF{NN&SWYyrG!;6g8H=Lh?eWJuq(E%Rk+*S^yHg&>& zoup!gLmeK-&N*DRU-(c~r=#JSz=y$+-Sc}}>(eWEN6zZr3Hu86onz4ZUFy^X9Qj7E z^_g!m9zQQMn{|A4xHCNWtwmn-rip%Qda^L+heSDF6;@((E7U7%XP@Ark&Vbu@pOB+ z6p0AtGi?I;$@Vt7u{U$(Z3=(@Nx!r6$A{3vGuUJN!8p4Og*!r_mn7sazRc zLB?i(T#x@Tu>!~9F=PjymfNsfz6-J@=|;C<&sZlcdDMU#-kI>SUr{T1km!BhgHwR= z&ON{eX>^kUozLAOz0?A&Q4@SK%LA~i0fxfquaJYAOx#ZtGYRLb7se;!)6(hjZ0ix0 z@zvxJ@TcY@+(p}s5-Sy=3)>~Ow)hS1&;f4vSjOgLP|Qc)`>l{XufR4j5Rhi$C2ju! z;#8U$H;MIgs)5%Jm9Bv)DP6(1P!WIVDHXYw|VU##af;6kkpEzaQg14)QUXyvgyoOLwz4clx6YWJDsUM z41=#o{>c$%UcyjWr~D-&)7UX|?+Qg-q8EX{k}S+=%sfKTRjn2!37smgrOkqUq2w&a zdXp>{BIe>Uo8~oBkE9F}*}R&rp)}*@i1tRVX=WprgwzMm=INE`GlTsJ)Y>RuP0=K) zYCLeHYz1bqtsmFg`x&Ekd?cJH=~a0z&6);lYg9(do{;#=zE<5Cp_9DIiKDS99H@!npvP~1SLzTBRSxht&`CbndIU2r3G=29iVW$yMYd@8;U$S= zDLf<+iRJ{+Tjvl;?6zo-WXU*g-Xg{hgB>q-!;eP#K$-PV2(bv-OjQqD(%V(shiWqJ zjbk;gdoSpMZv)XXkqJ3hH)LAIAsYyKgYq%9R)HNMip`Bh8$rp6`^XYgXu8yXD25Dt zR|y0nRbo9jp1w1)=gIDxjL(`VO=Wy>fq6&VltOqAJ5upL1WWZ zu(DVP$j(-1J_JZt5P&F-$EhZp4lx@mF=}O;U0D)9Gta-qW?L8F1#Mz$R>}0xQB;;B zS|@>H37trO{)6(oPU6s+5IUvDGrCcJRTOcp=yBp(h)-Y_MV=USPwp9@$wb)w!lM~)ch{GKYe z79HiP`i=&6VH}%>U99Q?7s7A`Lt`Fl2(oT(-AB)PItJI29Nw8 z)RFnelfV(tv~SBHGoRAzK+sj^dn5IMDG5_E-iMbhr;Sh`R?W<7?`H-XL9(DhaRl@{ z8UEqky7g0(mBroheA2~j2pzSBUenE1JID|4Eavu95C(z;ZGnN1{c^W=kjUv}6jt*n zH!8vJ6C`4n4V$gC0xtMjjOZNp`y{g31;#alu9Ly8!RsWLSLBQ^oZN0h{nX_GHhut| zHN`%6cbN~L!tiXDPV>Tp+ymDvb$sukUlyle$w3aX z$-T?`i*DzR)Vvc# zdHmKjoVra7i)B}vWn?b(-B;6FAn6CxFJ7ap6`~rkL<{WvV+k-f5)4{&z(R}?yCf=s64?7W_cl!PXLRg*)=l{GVY83m$n`5zg&}$V1 zvgK&wt1`ilgwV)~I^nZqpV9tSRQf{tnD$9G$d4$Irw_+$jaHYVLXx#adI-#_x{S=RTC4kMNgT^S5x zO+vPVLO#i&mLPKsND55%+PWVDdhMcilTzrb=6#vSUnmU*_Ak8QVPAAoDBbsI77g2$ z24hCw0T(X)>I+|3W;wVtnebKqoJZ*A`qTeHJh>0-`X|li2EViCoD@j6dXdMQ@!VQiYdVL%Tq!}uydxcb6Ux_?h9RN zYLl$mm$-sP$Z}T|sE>Biely8ia0s)^K}a@AjXppmnqz6~@cnrEb)ODM0ik)UXp5)vV(WCj`Y z;%e_2AM`3(p0=?OaXWhDKYBNJ&^ID30p}F+&;b2Wr7n83nKMn*RkD5o~8g)KG)K>Zb(Eq{)ze zM^9*iq+tLh>L+>#kgU~%CV?djfy%+tKMIpu{7N#kW3!KIS6ArIw$8Ty^FO!UKdD>C zJ)%coHWkD43zXK`l9SrZmZFp^@DnY57ka`H^a<{cfnA7NjVdx=2LUHPIP?Lyy*-%K zEt?+F2QtfzoP9Eh;|>NF?qspsGJ~4I6_2P%TGinJLD$RO^!!SR!+QQz?KOBC?@HPO zaA|q%x3|vof?z^!f#DN;X;6#!sdfD-plG!Z@JXH|-n)=Bip*$D`a+T(XpyP(<9&bS z9q3ylgUN5n8~slDU6n`vAzSJEm{Rvm6=&qiWoA41ZO(MN;Iuyh4DD?fr)K5m1tk%} zP&1*9_0v-|-LsJ9Rx@H~W*8l6u|4Z^GZs+$tUOqYBMdi%j3o)X?#?w|Dgl1s_s?hV zccm6(j30 z`}Z0$kgXWggAyl}w!&=4_!Nv^UN^U6>Kt;2Bz!+epZQ??XG!GM=oaMc(H(h1Dh)V8`KP25C&Nk~5X`M=X zgNv(|wwayg>o=GAUfkAjcpg}ENsSOB-Bd^iuh-iCf#}3fd-YoLgz;}BT8;KDzT>r1 zbd8TqU|aKcz#I_Rbl?qXHl5WTPR+rhBRpv)UO z64y6YD$D!Szn4V0)IU1$4Wj+h`x*01m1Zr@XfkQ=uO71prx<2wwdjG$H$cR)@I+g@ zQdLTbsv8B|h&F0<){*^G8=E@WA-<2dE$nwlR~zGji`UNx>aVGX)&)HEqHm^Rw|34% zy1Mp}r+f8?D!=~z3`VCF%pd&g~xjqax@g!l7apFXRVQcQw>O+C2dq493 zN##Du4}EE!Y0x^+TGEz^R^ zah|`{ZYh}(K5QrkeS&X?PuU>m(RMoDYk_Rb0pn5WBwy!Sv&mCV4qT*?bqhy+J^nO6(B-+@!ADWpVib!S{qUIL%K7!wltv#0D z#c=x1oOEiB5(74vZ%~`UCq&UjpA8eFrmO&)>VQGh1)8$|MsD~9?Is7W`U@pXbm-1~ zNcVT%pwz-*2tqwYy^i`#K0oksuXv~p&ua3Wei;}nQf%7jnQww>ia4j{MOK<8H!zVt z^{jyPI26kgXEitq1-s$R>#nghMh)Em6x|h_oKedq%p(W1VY>t^58)&>YTl_`EAS`z zw>{qxFvT?6YH1K;IYSW8jk&)L+k zWnGC~q;HUGuRb^iGL;9NO&t))Q@k~$48X`Pkzq+B1<8Ps1?rh19%~YssX4D&5>d4j zVXgL>82~oF*S}7GoR}_}6{KjMF;J7}-YANh98G*q+)<&T;fd{;}lQ52`|%8`VJ zw30Ad-abzvlJnHHFg4l&Eliv5*f6+0QZexB?6_O50;%@B(ExrM8B)XdU1x_#JY7nu z9BR+Cz;Tj#wBYO3yd^85lviQ^Ioj*u04RqMY4bK0sP9vVU)}y)Kn%d;U1{n%b-9}8 z$6oGox39UVb%Dws3gTT*$AwB|xP{xZ~pn}+>d z)SCuByc~P1IBQIkoXBycR_2J*cL@7C?5>>mYsQ~zkSfB2fQ|_RzM`JUH!ibNjN%AE z3o7rz1+9p>Eq{4FE8}5`sSOeB4jsc55T@-&6iUnNkc3*j)D<7d_2XsfVZAO;n!5B( zQ>l`s!>+%rIVyet&Gv3aj?CXox*ZVU~y!!n}!@Q>XSTbiPG)I-D7EBEB(-*;l5n+2Tk&+F|KKzKj8@ZRFJ{P;Xbe! z0rh*^bjd~iMcqXRuXT9;E_2DIm{u^2ZZ=y&bN%Y)Cg%qblBs0odIkld{2bq8_JRR`gNv;exp-8&w0?J!5LBXX6YQ)>GcVLC=H0ja7vX>4M6WYBk z(FOUEO`67`xf7_GAm`&tM?r($b4+Ad1)l8VJ4`)p=k~8SU4Pok(CCM~Eb&x}$8cn8 zvbX>>SKVPcTzp7-WzM_15NbI=^i+OQnSN~o!0kV@Vx1W63 z)`dow-`AS@T%qtQGrqzv4)(f4Panm`$t}`ua6@}udOv{|cm)e~Wm@DqwJT4yVuk*| z<@4oUUo{v9dPjO2%WAPf38i?Q2kKr|$E2V?C9_6vS(o>O$+1GM2pAoHTezY0O2z~O{tm~6dV|bZgouo} z#F;bE)?NDKvbMczF~upppJ7U7OI?_c;-Qu4fMAijZlNq4+2;y|g?g((hT}T?Sqt`p z;RQpGb})%3Zg7LY0U6ckg%Y0g%~I*YdxDj>{-iiS~l63lxb)2 zKTJE48KvV=z+G-VHQ28(ub>#Ye}vEqxq_Zj){@#X43({J>d&`!!EZ4OI%p{Di9fQP z|7eIzfAcMZtzncrZsm|(q2p|!I`bI*7GWRqvH6xGW|8VM^BBpQjY|vRePaMbK@Z40I?RR#b0M20dKHwoEZ++4v9I6lngm1bY^6@`P9Y zcLZTDIa2wjWU*Y4+2p=RZ}C2>ZW9`}Zfk_@^Ofr>3xEtQ9k~sd6hv)9|)PQgHWZQ`lfsiRKCqsV`DW9~avj%brl zr}MV(f=Cn9_m%61lGrxzD8e(1SH*oHTLCPCYi=ed zJNvSCj+?WKeOIv~KJn0=lBLsJrwzr#{J11GUaGlH^ATG7-&9sUk~U}+n7+qp$S2A)?--z}jhb-yMCx|LLmF5(D zZ@(!fS|Lt}_58qDBSxeySzS?k0p-=>B~S6J53_}un9{h~{f@#Z_6_NZLzw8_2VE7{ z?YEP=(zFr4xbl`7$q=!t!w7;^o>O9Dye;m&X2ub33hHeyBFlI){|1llF#WSZjn zill~Vw9Gs+7B?lG0J1#Y%((wy!3PpH$Opf|t!n##^yxl>Bb!+eA~4M`%G&#MpUoX1 zdPJ*A4WXjBy+`Z=msHUe)4pJnKMS81)oKzQwLXf^kiih)Q1S&A(V@T;>R@wOE~Rx^ zV#whRBkT!58EH*LLOjq8f*j!d`rAWymdp5$a)m@k$rz&s5Z>HJdy8hv=w_)FLNYQtQjOvaL zF#1OWsfnRw{X&hXR*MxR?fNR)I@>Cjr9~1m&ffxXdfFZK%pD%u%pnTld;OGDL~3 zv$JAR!~j|e>k%tnUA62jK#zAzYijNuX#VjHJwe_DL>2!#65HO16P|2CCd$_r$q z8M=N1RbGE9@H**xgMx3M=pzhRojL`i&>bfX<({kJ#r{@o6{WXH&@5FKE_pfd{A1bf zR@yB?6mxdf%HBIaXhtI4QK5oX{;MU3M8bKAi!E@f4J}ILGO~24i0axgiX&-SDVlU% zj2F2I%A`~du+e%!p~H?%;pr^SONOUA za*I-(t#d~+@ns@!*k6l48O6vZ4{8FTq_z zu{TTqqU`^d+~NRO10>sIAK9b^1jDpA@pDop}h<$1%BW{`^VGzBkNCgKzYk52X(B-VBU+U*z}Q1T2$ zgzX|hUT20k-)KOIx+I8GtuV<#8*gaLqb%z?+4&*pmiPY!razNT!h;xN9zXw9eMkF{CcDpU##LW+@%bn(bT*et= zQ@?(G0irW6k zM_2O~NS<9<+%8;t^tR7+W1v9;rR0%h4Xhx)X+}omh@cM>RyzJ!gDJwLKWGMAg9r^7 zX&M(+c43z_i&M}(%C`a4wtRhB8cPWs`K zq`HRLThMUxBi3Hndx)$1MV1%IN3r{Fd8k`^u&dsQt#h9^XA?q=h3VoxXC5eS)aM}& ze++m2BOrP(zf7DyZwUx3W?{3*s94na6t9m3zm$#s z0y(}Df{y#aFmW2VSj1R43&rhMsU=L?;=}oiwfCk65`aldWj5|MS$A+?Fw*L*FZAyn z!X4tda;XCDC4Vy$-apvE(16bA(_(9ZrLJg2rb%*|rtYMC*@L~bx30oKk|7>3RR|1H zf2gNVC8u+b(!y+PX0)fXNPwf%48~xpoyi$vYlhHpSCz5nnbwIZIgG{A4Qf13*p~?&i)m}x;kB8CXKLV z#P3?)Wg|``dVc1M?q2tuIH`S7#GqFg4Ku~knUPX(n26w)8e;B6NX%! zB;P06ud6lBX^y!-$U$W?eS9(Kx}p%XY3&0+tgaN(T7Ba{OFiQl60;1+I1)}tVO{dB zlEtz5ipr)7Q05tsb7)|r>n;f~P|GOUj*uA-Boo{Lp)9C@5h;7-llTnTR@QZV-2MbC zYt78WdPeA!tG&rB(9B1C5S;lDFNFS^grc4SS0}&g4;|VJV)ua>j2(!Eb*|Z5I$W2x zPz~!2ytj86z# z^Fj|)3%kCn_{b1RLv*mJAn%{)^zal3U7xror#`b^M3H`IY#}CtX>{u-Q-T3&6H$PX z5oO@j8rW!$_s75Gl3Q=xeQp#@{tOsGoY-6Y;RA3?<^)QS*V|Pl2&+&oswW!r$i^`m zJ~UJ?EcrPK%*-{jqtUEq6`=h*--n|bShkJc4LDbdF0H)1ac~1AB#0n`1La;bked1i z{yws$C>I74XfoWxp@xmx#%C}LZ4l`swDR`KL*OO}ch^Jt;%XwWLe!{=EeSilG@v4z zYNJ59)JM*#!?P4i;x8SpFfsRip=iQ15h&gdGF0k0N^7hGUC&SNKC<4S0o82erb$SZ>P#KOTeUdfeTrI(Da(E2*dXS0QEKrAk9&5_ z5-%K%)HdjuYX8!3YtDu0SYV#D-hL50Unc*BAbQA}wh5mxa+G2H7-q=gs(rl@J3lPn zE8t;*c8g!jc6B+xY_plC^%ZO(2&8S(vL15Z3s>4%}izy`yJ25M!W;ypjz z1vB58o}%&8p(NA1Mcp7of(a2k%H3e9yr9+R#WrLp@AX4HEJ00JuY`+d!hz4IThPft zz$HOqZw#Sd(*0WkjCr*pZzly3^UKCD2;d8{L|FDxh_M`qg(SO_Nyd7+G zFk0=UfihoH?y9hH4(_R~fMJHpyLVub)rXtmbNDWVjVr0>Jgu?|WM~Abeet0)(l4y5 zpFcE)Zp3I$9QXX!^gv8p$^W#FD_T9sU3dEgFF z6~nTJS>gXexk`Z6QCxHO4Pq2oo6rU{wKB9q>do`C0FDazxM_+>^sti9_#{#@EZNYBdFThlm z8&Pw`Nvd1OTtWb{w$LO)Xx!Tu@xW`KTaM-HBz;^}7A_oS9sBy&Cr@azk0{JUUU&>& zvCd(HhYiPF=t&eVCRycr`I&toRRt~{L{Nm5X|%?o2FM$>YscugX5$yAX+WKV%Z(VZ z!)=_8FR8IA+Dx3Pq!H}4PGivRvk z*kO<4e@?#%OF5)3e-L=(MWE;y#fmSpoYsoVg(S+M+aOb7j-DvIPsW8llU$MYqt05W z+4(9Ug$0hJ&>P}IOZkQfaO5pI2o5E1An^f#94~#!*2&AJOJcp#%w_aTLEWdII76(p zM>{rac-V)308Q#WahuV)x5-iEt}7E zF?5+Xwd~;Yt#tP@EDcw{$uEaa!Dy!gU7<{Ew|!^rj*(q>rZ(9^r%mLX*Zjp@SVvU* z9%v!MW|d_3s+2XDkd~(m8dDz&^B?0@RatHUZt(v0qGdb7GN>m zPj0k;*&dtG9k{>DtRfP{<{%DUOWZ2o=~Q|PFY4f`04czIrnEdxsi z$!;jkr0N?SjDpG;8Q2`v^;F@W0==V~W!8~v9~ZU_i3T?8APZP9(-*~8YgkNHu4I;; zWMAPsRnJ&E*WA<@0}IC19ClApsa%esePeExp6pGSI3tYpSIP5L*_xwkQ|ETcJb=r=izWdFsXm&lvRnT;(}#SVT-5>4+n`4w>sFE4 z&^+HN8Axh39f|Sj3T=c@+k8@i*}LZJqN6l>rk}gB)J)A$5PcP_mPw$5YzQo7!{d&# zm=@*{6bUGZSN4%QT%~HB$|9jPZ*zF{LQ4W>sT`3^DHdWF_)M;rbd`W<>A2^O80~fCaB@Zm} z9n)IG`Xt}Z1iI^zb%7HvP2(|tU{}^uYkrhG+tDQHRqTigoY?zxLumt*gUW+Tzvz>p zvU5tM>`3?B&ib5LC<9qauktdi2@q_2@8 z^%}{c&#&krpAfT+O77vL>uiNCL(95QKCJLtjhPM-X8@C#hj)JrSS z1oTDMSQZWYO!4e~#qRkn4hN8+o^QF2z)pzYvSJu6qN^2p6#5C{k6a<~pYvX*=OMVN zNoBQj5ZdYF%kq(M*S>v>D?Ao6?FhWuf5U{fm8NwZzPumD8Z#*{aqVQ5od(CciXcO+ zuEG#|+)8iCRDDHbiI>d0ppqB}M&1DkoyEtLvJh3X40lZBpd0YikyjMv&|Xv-xDXh| zZMdKsxF`gTawsrks6-Cs2K$ahOhCiSl_G!pZeUXdNuy0m*Le)f7YceF4pbdh3 z>%m2aBM4#?NCGsXYmZ^YmiW8urO-$vECsGkp^(B&PMSa2pO4HrTpNCbRM&*=yqutW zDCiRwtVH4l(D0|I$UfwK+VvWh{Nfqs^`aE4`JCx+l&0J4|D2*(roUZA&JUPwCpjGt z6ePc@gN~;dw2UpSfka)p!8MDo_%7~LC-nqLs(UcD>R0R-XBBbCvvkICN~wPb_%HA} zn0Z1hhi$64Z@JmNezF1E2-gN}A;e>Wr|Y0)7X^sC61(eobWWmN6W(h?+GM)vDiyzL zN91d(p)PLCZFaHzt7Gf8?^lUX{{_|qJc_D_)G=t2dT5?M5fUq$s)SG7}`J%g_?IkI~@H7qxi;C zszQ)z7@B$|x|J#+rzy70>P_prcL;athP(y4U^>PP`6lI6<@p5c!V+a^X7f%m_-D-l zrvhCei)r3lZovK}iFtN%lWFPPq-T99bM>0|9J_7)%5EBc@H9DfjT&J@g71X;YDqBu z_ew7EgT+X0YUQn(W?gG{Sb$+Y_*Xh)a77k3fnhu5mrhFkT7*iproVwt*GihmTGaZ$ z#9LMRjkXZ!r9;WE(>iZ)3xj6wV8G~H&>@3bE7dVFm3c#7-g`GKOsFk+DqGTO=G(1% zjjYd!MoUr#?Lv2I^NWhNknZ|o_uL14-Z}Bm@pdJ@fq2z&%xsG|(p;t6Ae;I)ujSTb zX}kS2)!%kE_Q*hUG(rPmpieot)LPkB0DU9weqFPIuw=xXYfL?QyN-GZc(P?lTeN2% z_I~cY+2X-Iv+lqp%Jruq%(QoK=kU1Kx4~UW(Vs=e8#gvo{tFme&ko=Fw%V5d^U0&? z$GM;Tmbwa$ylrs`d~tSI&x2JOk7TibfRF2D7u6LF*%a;t0;7CRf5iZj&uU|kYh)c@ z9a88V@Tmo#dSyRsBQq*7;Lhz4)K?Px`46i8Cz@g&LUy3EeI5V0gN0a`jyWA}(hmId zv%{N|L)6lViQ#2Q{ro%W*fC8yFKG~n7s^O&7g4*!Y0_{0Np6B*MW z_#KQow8uQD6FonCe|@s^=YTK}W$!=l=Cot&vG>s1KeA5z+_@UHcaQ$ZgnZ0fr&tAZ zd^s5|b=f@0C55ytHbj0(;VWW{{>^sZQZ(oF+O^mYc1zJotGfoao`{T550^{8ULWm) zf|z+#uslaGLe6lCIK$CVv6+C3euLeH4qXh zM+_wc3`?@{H9M#*-)3%p&nCGTXZkb`#H?<^Xk!iZguUq-o%ELkNh+~f&rd{${F#NH>EnB0}#4WHWHK8|ysC$z$kes~z zye*(z&;KI3Av};9*vuiYD?gTl2MPy#oKeW~J%8+f*i|3d+oC{YLS(;d zRQe-W;5g6Dg)PW}+{LlqQC}cVoF~1>lgG$TV!!$Z-6NV_2@L;R(_K$ab`09-z@8SR zIW7F;~i7J}gf(iXCc^1+^R%>g;s z#Jpj3;aHJC3hr1_u2|StrtzJ_h8}&tKwWJFW%_2r0JkI7G}T!L-UEvL)j;<8)Q=A$ zu5A8SIT z)k!WLXx(R&2`VVPOG~!qiaJBTm2E9I92xRruBYGN<-a-Q@!l*Z z7!L34W>{!O)|xlZ>x~fFtU-d{YI5Xbx+T|%b)`@}2*omt z8d#SMQ&)C%MSC{5l&13sV(^`Doln%ODjo$n|C|MB^UiTv=j5Pf@3#29OmNTPIDjs{ z>8l!_Va^s?wOAd<5h=RE1DKUw7(kg?odf7YFI<&JN(;{e{o1dbjZue}{HbYc3WbWR zwBFzD-MgrD0>pGrB9$iOKeAqC|NBR~XZoy-XC?9)7yEHYC)b*r841g*^pNZ0S$0!w z2Vsv9jA5{a@g8*k0=dZwi~}%9cy~i~)TVX44vRSWpZUQawY&Rvb;$o?=$X5#Nr0%N z!xz5jdXZrO5lZO_H?1`;#neB_RePiFRFeib&d`-=a7RMkz-V_ws)TBIuWZ>~<-K4r zQ5=d5f@f%F=;?OF1eypOooXJ?pSRAkms=u}v||!<5;G%lhNTsO3W?8fV0|B4sx*W* z61Rv;i2;OMj$ezI?aep=#R0^+fd5d}) zsNX7+M>oow$)I?0IiG-O!04E-w~dIPW#we^0jw`?U$<*rd2g@Lj51QPYF;{I{K zQSZ(SYWrRHrResN)i}eCEApA_JWBQgAuM<#|1eUs!eEg^$S`l2LIm6~%>?{cdORag zTTb)H7l>)!`;nMt0I#DK`SZbC{MUfdABgo)_gi3r$-g*FgZ_pm8%!>jQ}3 z?9^WB0?)Ww=mZ0;&XU+f^^npvbW#tN_D2!SspsCvgWlPYtVjiiQqVJo-nF^=dQ5S4 zy5Yuvp#|`2LpAIAv_IjcVQm__l|6uqDMOn8T8SsM%;yl@60}jN3f#B^UaHDcVz&4$ zbwmR1K*G-Db?NKluDrtSm7d?sG$(Szi&xZKFYB~AaF_avFP%M>5Pf^l)BkKeIZiP% znAN31W8w~1O=>?SH(Y06xRS@_N9rTBuH%+f@(5dCSd~$}%JK1ft`l3$R9o9Oxcas^ zevW+HJ8}`5hr;>hEH;fB=4m0I=eL7KZM6_LX=VSMPbLtJ z(h=-Eq}y3cQoa^HimjpgeFt)M1g&BQgj;D>u`nwRX@5-Skze2F=CF0b2f5x*Rh z5FSifc6{4gcT@b7yfrAn4NP_{>OI#apzpa*p*aCKg+O0c*?XdCty~?DN6@ot#6{(A zp*Bj*#8Sm`*4e2lGxbNd%76Wo)NA>cY!Eowl-ghs?X3OW%l9`f@;%MTxa_S0DtOTM zm#?bs=^LRbFWfo|CI94yAJ8B&_YVdk#-T zeV~5TrexmV-D=EjiKpnZZq+Kc(q+8&=+^7SM&HQ2 zzYE_bR7C&Q-8E?Q)^-MW-1}5wj$wYPuKkXm7sY$#eDygC#CPC4+iORAdv<{4cbUXY zAlm@U8*$#?q5;HHU`E&Z_pZSMx&CVlKF_Lj9Fi$RtbOZKFtTWnH}YQm%GG^hogON z)eR#D8ikE(yqbT0l`xB!Ia~FXphM8!@v1yG^ly=xZg5_)pDnPk7Qwq?n)egoOqU$kjP=9ve(=0=4vO){Z@&@c>_3)jzCj1%3aN!MCZ0wkN z`SPS|u}#RD9{&Y|ETYty^{+sw@*0>7S7`LTTdPy8e(Nlz(z7a5G>q2N4tphP<1lfg zgT9iUUyTmr1sa;P`zp{L8;|V7H`dguY1Xv|Qi$Rqo(tP3?bZ=lk;LeQ@fvTK@5}Ky z-bT5-!o3}8e$kd|s#MFSVYs&2Z2Oyx(DR?_~i zvoZRN{14F4?7H&3Q=KC^rSwn6sej6Nr(j+F(C4SlcrZnlua|PSJ@LJMdJU=@sfbuHCa7-Rl~r z@IQJiDO8F7Q!_s*LWi;1I&Xtxsr3>d7b9I|M z%BR&UyQFv^NRx%^rgNIHG~`w9LE_uXT(>@?S6m>pg1X?X6Q=Cp3#F_&k?I@0ZTBxl=EO5ylj@v(Ru3s0ebX*YG@nt3f|dPr*z)^ihjHz zSM%~?lR*#G`I#ObjfPKgl3?LdtxB{QaMxxAsMjq@X@Ke!c=vgq;C(~aW23;(BAjc$ zoT^k_3y#0}hK7|0rSLnUGxNff>i+<|;q>+tC}@7aDgpB;5CLPX8!A?J;-C*NjNDJk zi{hUktRf<+jSIxGeLoa9e>}D#hLUvu;?xDNVV(lmeehcpqkr>27}Yvw6cGLH9J!|e zpmh(KsvrXf9Kh^+2-!CtZcm|UhQ`S_)AXtO=Lq?nCz{+Rw1V3jlAS_`arN+Q5g7ua zo!2F&pX0JZPRp$<)Zg=8>LvbAyL*W5HHG`FbhAw)D!AN2O@jAjzr~rDfkVMRaM$tG zvqPmybq|OBP#9u_TCNyv+K1E~-3tgKQkLzHIj`*HSVSb~tLa~&x*ylkjzU0)_J#~v zz0&e3tw<4vrY$sExx2s&z<#{XREnYMm7+@U5>cpX<(ZbC3r$&c0h0}%73wu>HtN_| zf=f!xR9hjxbw|$-T_-5uZ%s3+()<$^;UZMhx({@U>`vDvNxAhq1ZBa;SX0tiWc3VcWp z>r7hU6ehJ~#7h`ACFnO=*}a~+{dzFBfvj1i}8^~{;;h_`8nu{8&1>g0_cPCCa3Rc!x6=})kg>2f@B{Byd@k8 zzXLcL1I&feAG9&#!LD4ufPjsgFIQq3{(-_c@*!!xUv-*UtY;D5ys~H;>4=Q zA?#e@n0UOZ+2hwJx}lDKR%C2s09x**;IV;ezC!N`)y;L;kXsTy6bwl(RdbS4NL4`0 zC{-8fKemvp$Fz6rr1(fz9b&JMZ0HweBPmJY26#_({=q<#573|-NM#%wPBg+& z%=Oa#2HGa8<|{2LVHz%%$)^PG9`Y7CuPda#>#=)X)-}77*FuWX9nr}+E@ks+sn6X$^x6|o3u2xuC1H)jLP!BpKSPZ_~ckP^+Eycbj49-_V54fxj-S>XHD?N zgsmTzp$}71p@QTCa)+HlX20(F4LIUl(0W7j99vV6%wH|i^@hK2j5$CfOhg_&3TPLd;ZGD?)koYMzm(d1sR|kyu)G(_Q3~6@o~~!7NckTu4vMc! zE`q)XXup$CD{2*ceqkjT!;e%uxJD6Dm##FNr-Py__pBWwbcg20_u5A16)J^jx5JbQ zPYT4nFmryPXq+x{Cw_QAJqa~Kue{t8vY@`txkTqAhje2%;^IS9)2(!Oh$(n7wgWjFQfrF3@Izm0V_LRQoS?7h7Cj6wu&DEH z{(9GXbk5ZuUzk|T*^&)P@DZ&%>gL^3cI!H9c)<5SN=E3s_^;+3k2}@nXHGip=&aq{ znaJPCQhe0YQ|5;`f5=#|tBX3hRY4YdDiHEka6-+Q(kA74r%)e6G;rc!gp-`nj&*3c zLVmPU=sfD3BO& zaDxab3a*%-D*j7@RdhH{(2NXLDJnlf3WyR+#$HDRZDZwW$O!x0HOi-oAAmNqX_V9b zLhCz}X+j`;h{8=HqAvu^dw<*e3}U3^uT>Em#5TZDZ_gYd?eeAfB6qUZ1#sTP@p08aI~kG6`2xU z3h51mY6P&O2+pM}uVPO38a#C(uUhG2S-wxFJf@F zVA9Yj9NO!kyyOWGn2M(JMUWWF1J(*AJ305F3++1^iA#4t8R8+j|sk zrZo_ug7}Kfk-~x+oA~|{O~g^mbTq`=+NVX0^@_7(S@L)Mue6(-!e=I&D4|cW)ICkb zctMDfQxK*iN2mtrNH8EbaK)IQg4Pm+&K_9EU-T|}%jXV@z|(9ym5;b`x7$)@2Gk4L z*KJ!T@AHbs>8yu0*w2r}PVki{u7=sw{XXYALER7Y-EvQvUHuz!i|hAMH%VZO37Tz> zuhm69{iEP72euE!)}l*wjT9}o=^9TZ^!{4-d1|U5HpK@pu9u*NheIsGwisanYu0h& z00QQbrR%hZpwBFXyqPrnmt@Py1b#q_^^*`lPycSfRlvKVxCaNcBea)46KPjUGVLK4 zN#IPbEzc*Kb~IL;5(G@c0B4y$N`Y#@4SvBGgs2d(4Rz_oXtu&zZ)+$H8QDn&(^yP2 z^eEJgXvk_3$-dX>26{kz6pxCm=+$}y&GUV^cS>E8`gUbS(73;`J|deVi*rU6;axMAypV-5w0yY_h6QpC&P4z?1P20sPXECN4FG&pO=vc*SD}Gc zS2%Utsf-6Ye#abND|oqjdGq8e8nP6@mCKEMX+u>LB|aGm+M)(s!5RJjCHcu7;UX!) zkhO2WsrxxO&ovW;FS@m$t`VfS0xZS)QZUDkb2nVjg0?7jB=VPu1=S5MezzrSlQeK= z&n%ryv)5EF_aSE678JH$A&*m3U5TGEQ&pDI%h0T5ZK62wC)kqCAPGj$5^mReaB)Up>q@X45mSQ9qj0o<3(I;nsn@u3=(THlZaGh9Gqe;I;?yLa8r&gRmHJtoSw!bik`K8zE=I$ONU3`3J)rPJ7atBr> z=jAy_{KWmZgzP@jLTy~!p04)@0kb|Gxh9X*dL%Ko+C^ENQ~v>OJ@;sae}&`1p{ z9u=V$BJQ5(L>2j{XG9dC7fB2EIG@7@F2Dj7N%vyND~Fs{CV$t!+g+_q5x-rdUcd>p z3^_LAicfXDl|aU|RYM#7R;7u%qD=TEAwyxj<-kKZ-wM5WFTZWxGqK@S%ZnMuiI_D@ zz|X&?r&U|h!C#f3f-{uJfUSQHOU9r254gC`&FDw2Q`Qb5P+oY3vH>^!0v{77S44YV zSd{WxcR#-&7Oz;)##6(f@#@ zHP55q=9hlsqpVy5#b{FXKaEuiofc0)pxsp`p=ou#gq!cgphyx@uAUG8O_z+ z(0XXyf&8!1WN2K!bQ35B0yl1}Oy3m@z#AYjUzG=VhAD&k_lrE98OgXf%UlIykzK;Y~GNRofycSXIdlX$jZO zCm41I@n8PXxP#N%gk5^MYgWAUbRgfv5i+$~c=phlS??86`T-m7TyXAZE8CaaI?^Zu zcDoCf)qS5OYkNZSGr(Wr!c1hKtCwAv4ReS`ihX6cdz@dttysN>C9?SfmG3`HTu1Lm zdn)Fjo7>9imi(%4PYBWRiyDcRF1Y!q@@7p9An$uw!7JRv5L%J032xYR#v5SfxcXU% z4K8eBzn{l2MwJ)d63@0wcRy7)7)J2ohZ0!{`rquIrOc6G)iXPF@`t>OTI^hfHie_C+4P1W+Mjz35=A}eA)?oLSPt}B z)3|)CBiL;S%LLa7#vt0j7e&gM6aYS}%ed^6SHRjwF~VhQpAW+@*AFpU`x-1DoU6Yy;^A93>dWiNI1c!LSBQP%}BED1?3)2VfA3 zKDZJ4!gF_R8_3=MLUtr=wp_DGqh^F9M>22TQ;y4=b^GkVaT%5P?47NQ58zkoH!*G# zlN7|Yy$#N)k|VBfSMn=5U_D+4-{>lt1%1`GcO{~$Bo~KP3YR1+z$vm~CE1WJjR%iJ z2&lz`$$~+?pAWnujhCV}d8HL$N50bT+MZyLAK4yfS7}h^1D1-Y**$C2Hcm})fWF0Q#Q02RLq{1Bi> z+!`2;2Eql8)#ZXBN$V1>8K)*2ocM=a%`=_U`B|CZx9)W-GG$Z^`xsoSg=RI71{x6n zNdQU%pC|yIp2b_$PcC#}2fXf|CMdpnH~r>{--oa(;OG6gv3h+)-vbviW%FUvN*URr z-afI5^14njuVrY?YarRU&!-jIFAJ&D;zI%Ptb&cyoc1wb&~B0+<*&6C>?o z?3?ec$*S#@q~?Y)^-u^T<-H&Lv8s z$gf~~z=ercy;8en3ycVxYV5Jd=5JX|MO(I!8|l$Kn)bSYZMo#j^Vh7;(_6U zXLQVw-GezMIw89Knb4>7$LRKNin1=y&-svjZu;v8X>xigar83YE10p#*B9JW6Cu3j zyTF8>H&hCGylTD2YCbC{!2>-i9R2rVpeNbOlRgwU*&0`=Z$({*fGz_W&KV?` zimK;crv?qoOJ0AqtZE2e3T(gs6nfZo~8i2QPGryDWb&}M*>lq>Y!7n23M5yMHttDp?;#e9S0 z3Y7xBLz{Wy!QB@0p;U0VSHTMLA-4u#2*UzG*X3`L1)Z1gCYB!2VM%L`my6bVhVHj^ z8X1^rJG6Kb67tAW`vnsI%y_5_UH7Ztde1@9Wq)x^QTu5B#$PnYWf zSZXildPu+3e!Pr!IWvk4R^lKIk!*wdDmlg}^t+Hrntoxu%KKf^G?Dk5YFerI8Fq)_ zJtWQoYCo=-POl-*B2OXds5n`jc@^ygJ17w@74sllKQ2^wRrVF4ow(yG0He2t+Xj(4I* zMXftdWR4p6x9&=RMei~HatBSVY)5tThqeVxhmPXoG@PqAeEn+8HDF0br;uJ*SjEaD z9@9q37hVCsNqnXFK>OIw&F8>E_dU`zr3q?!Cxehg-O^!s0n)4_Usv>q@(s<1SE~FMh7?+(S|6gcfAm1{gSVc&;`L=W_PmhsOn3 z`8Jb|aaIgi5m1(cyehCd0x{Ppnu#eld_nT@YEmZTnC30H2fAmtix--DwM*9R)qS?) zrPY1b+cP~Wb7Zb6(Iv7a$-U&N2EMbI7(~zamHlc`6bXUf(Xj{t3J?Lc*ywG@cLWV5 zy&6qI;zj!)-u)L(Q(>HmTpAaVf6BHfe<7_x%GPfZtaEx?{j9&DfA15l7PQ^k>w=YvnIjl+kseabaL2@H)Pr$hGsb z3Jq^a?}ZrAwiJ9FX()C_3`uv#$YcovL|ya;oT9V}bepO(oM`Pl0j?2D2H6OZm<)-tks{3tL%3Udb zS&9=c+fSV|@xd&y4ml=LJNP($h~)DNe~@8`ClNNTZ8WQfyB3wFc^O&v<2iL!2FiL& zH8hX$M#ma#S^U5dPR!O~q&+B>OX&F`HnCW=u1gNLWw1+!7B6a}qQzEI$U<};VF>~3EoZLK=rd9rgc)zbleH}H_s;P&a`gT)b% z1+|MIW#|1Cbnhol4VoQwOiaK)L%ODc8Jazgk$ zv?r~G?P=1zH-c31&Cfd=+aDIop{({g9ijjb7Y~1+RzVVu0BHDFHkvETBU1e|0~Lq^ z_E3Frlg=0wOHHk$=oTid$sgwwrX|?Am)7|Tq@R^MyI`d{&w;n4%mwxq1!l%?9lxd% zZ1=_t8Q72#cv5oFe?RnD;dp%MgZ?O%)Cu0OSE_ktX%q78S3@HkAL_DQ4hcgUDq!vd~+Ann5ZKeP@^jiDbs;Pl;Z=$jc^RkP-fSZ$Q#R)>&!T3zDjTM8GrhkeaRp*|f?L&_@!hha3FRoKYhbDNpa~_HY4bt;3$$-ZMobL^ z{Fx{E{sWwaR0J{p!}jqV-D-slzb}@|ZE)qo6LLTb*vY>N?9;yK6WgR=It|_^^;Ka# zPE(3Se2hTZM#*{=cZl|Io_#^VKwu=QABOpTD6Gauh^K>GUx)|yvf7SJgQ?>T&i*t00J@;OA>8t#L1s^;a6<2jiE;Rv91-P9e z|J8N2mG_jvA>OYM@1f9$R>SSJwnQoCOl$Xl*{gE{#T4!_(gMGfJ!o@ zS34i4)%4o$limj$5-Z2(h?2S?X)|%>@{hqW7VZ9V;+E*#yu{WX9ld0+;TQx|iTpVO zo00-f()t0Hjq-kbMZQAgl3(y-W3yd6Mm;|<%K`e)v8rvUTG+|OWXC;AY>kX2J+gR_ zYt(LyxAn=2Z*_nLYyP>NSi1tFJ^($T5ABRQ7ik~Mnpsz6RQz@OYY)YP*0Du5%S}s} z)_d9JC8Y|qcJGkj{QrN?UQgEUna>t@CHh50{pen|PvNV(J7y&<6>pc7r?bvwnO!ux zw7KWf(%Pr9*p*#5?ryKQhxp6gP4woMnNQ$P3*XZ356wj!bEZ9%G!I}^VX}~XtJT0V zjKZNIf=%VndfqE?F(@ee?wJnLXdP)Ff_weBgQ4%cgk8`uh_pXOhT{`62WnIxB!s=J1Q?3@ z28Q5B6nuZcb0AfS)iy?pk}6}NAN7asR~nthTe}QeYp%*X$`@X1UX|eliLqb?G`Uzg zP6SYcCe4iwqKkIW-E&R|1#n;4tx2Bt5G}kpCt1o$vz8|%4EbhTGbf3P4P~fqYe5Zd zff*4ds2P3=jTqP~mF2ho9g<;am^XD9k|`YyOiTlS>4h-vZ?t->8=r{GRAh*PoMdba z!6rkIwpufv3{~VGG>#M^+1IPCo|m$YP^U){&id$KUulT6H*?BRw>;dcD3MJ{g`Z9`vfKS;KlCl8@pO{m zT@FGh9E?$saX-S)M{1WONOv=NqWr zDmUprs@+j>bO*Xxex=u&gPS(43fwf7D)S|jyebvQ^%71>3QLKZlaPSImG+XC*mgPT zZVPJ{;v6l8Q1~4wh5?E(A&_uE z_Kzm#-$^!sVUzkJ83;GMr6Gck+_)?*$@!c8uBH$by*bx6y5?F-A1;(n<-A{^ zC73VorfN7UtJIXc>MwapQw%kLUZiH&6>TTxhVCt6Z?K(T=Yp3Du z=P~29^pz3gH-}BUR&lFKs2WEbCM270N^{^ph26I1lsXF6sQV~WaCS-va@W{ zQssg>E1;H@W{2uW(XOx)Y?8E8O*wNQQTPFJ(7ew5aAIKMpm-`YhHU#$HzZ|KctO?* z+SB|2Uxl#`nlA};3ne+D7pkKVIR)I_J-n%-LleWR`NP&`Zml4k>ObH!`>Cky%mPLz zy$&BWX}0!YM0$3g!yQDOUEZJ9CCDw}O~DkQMF$LcrtMo5w{ zN&W&8`baobd73IetcS}&xP?kDnQ|GeRD`kO@sha{e1+Ct9ARCc-bi;&X?!70qH!u- zl<(o!cSO65)Omf0QT|=D7&s7l@fkVrArBNv)u&*0U>nXGmn#l-F`!k~W!4P%M>F{f zFBoSWqMf&O>(NV=55JiY2c6)8cBW$U+|xccIcf%&`9bRnw%VCQEH5KlXA4rSNDvmD zqwf&~X7%Z()$lc9A&k-=-17J{xWzq*|EX5XYzp| z+p5OW{zz)SV}2MSTlOhVAQ@T3*WN?J>Xn0X%>E$<83xm(xZPCtaYU2#rMbN3k=k6kp8J&C7{tk>e+YnOf<5_kQ3Q!?sjU|{|9h1ZcFOl z^2f5EhB+j~f&Cv)BP(4)AK9=o`jmr8d*2EZs|5P)nJ|a;K-$&8#Z2ec#%T9`ymeW4 zuX#!AvhB*;TnMs%RIm%bQkZR)@*vi!pbiIRM zatbObtG0|YIt7S6DEAcUDrqH;=yIMxq4qPFpoS=9u9&ODex8FqPc)qirUX&_L|6m5 zwR4MGIdc?dk1K3nYDM~KkF1S)7EViNft0ubkOlUS1b;jqaUQRU`Zc0)5Jaz`-c0Hf1#Md zR!1~w04iT5O6EuTlekDDu~bR%izqAY_1}snRB&Cd-c8(7iU(_YtpsC?*Ndg1%c>?G zm|KdO@_qZ-3Miplu zOD$r>F33tzA4(OO5L%Sm{bw^jV46;)>?wJ>odx<*cnI~0R9hGKFJwm!iNwIDw zB9Az^K4x6({VWyJ?b2jPMq4+N-7`(vhYTeb^Ij!6H(7$@xeXQ$J=2@(UW&f>6GZo@ zh&E6C{1rsL{iNr6X(+faS9y~STyqbAM?AQd*EoFv2I5D7O;9!dQn0(XvBmD~S*hsE zq5E6tL(L{u21)UXoZa`@Ba}bSM#=BiMhMQP$_kc52h3a#sEJI{_RGJ@`U7j16iVu| zmEJaRFY9POW@3+ilRl}jw4`sTRI3U)a`^(i4pQ7c;Bm?$kjHq8KakwNW?Ag7L3b=% zH*sqIFu@pfP8vQ^93~DHq9FWE_>LmIn1jDpH>4^(gXFci-gMt7RLem67$F-D#|%k#PnFv6 z>laC7BHTB|0I9A^WB_YTJ+@y%&2~}fhA&N5E@4?usqHPZct|Du%YUt3y zgc9@I@)u3|A@==zpwnR=iH1`oI|BkNAkbV5(?&s(1m~H7A;2~a4M19h!^!$Xbka>V zQV=0o!6y{iU%V}M79667Tdb6(WlkbbFSTdBy~4N8oU$KUTf#Q@hzi4x7kKI8f7Zd^ z!4K3nbqlf#s2NJ8TRR7`zd5&2mE?dR~Ja>zWKO#05 z2or~~;fJ$+$SNUD9J%UsQpIu<_Z!eYHN8<-ZgV%Sd$LIa&u%8d-W!AKL|l$DJ0=p~ zi)8_E=O=MhkgOW%xt?PPc|04|;wgN;a%^wC{m@<0>sH+oHg!wDe7uDz^8ZfrrCnsv z1z_E-A_=*OFqJv)dSdNCH|O<3J8PNJ@c6BVS&H*ry!o#8l{XISnYKFLe!YEau401q zcD&XzzSOGXN=w6F$T1zKfNEItFeuT1c6z=Mw~IrsfLcSb#%IP`TG~NZsS*dsGLbPr zP7guy?TJeT%tgNi>lB$r#mT3wWvMESqxvQ9J3KW4-0i({+a)`P$oe2r$Q;B3-WPJz z2!XnRnryQikn?W@q||U~=9-!JxMO(FszRP8Fjt0ffrSmcx{pohf{d2`t~c60l*zyDIzCbR5}n(#8LBN3Gb zyOwaLX{|D`^Ju(kKnVJHwW;KIzV6$j&g{#3FaFp;bm2Ef=2GtwUo5dEWEGy{SS=~u z^hw#HG`)U1Vo^~l8IyayGKtOl%ej)%dVL-H9eSkS=9Alm9rwzSuuS+Zf1>v$%yR|I zxzQVK@A8fut@M~(J7S4E{)n|ad&n&n@6B8uXI2IZmSWh2y_b)&n|!kZ^xjmA%L;G6 z=dwQ7qyKoQoah(4I^h;BV7&Mb=r$BB%x&k7DIxp9bhy0xM~X}jCxx4az0vl1sxZ=& zZ!iWIyFl!7;9s}Pt$h;+%<0Oc^)n@w&3QGI%xcf%B^i zQI`&yLzBl0&7dcZ5N;6@TvOd*ZMV$1w5#uZ&@MULm&l#jS8(fO_@IyK+>LTgVVxnd z7mK$XH_vb)IMV&X1(%IWd*xrjGQxh7{*b=l5MA(zp$33}h!M4vI&;Fg@TwY&Qc7VU z%#_m=6K)3J{b&wcnboTq7zP*BsvT5o3WR(?_qT~d%R9mnT(mPI&7UwZNv#QbK5N@C zT?zYqFL3G%MrRmVMcm8#;R6^2_BQ;9u^DUl)pvPM1enmSmdU#e1Qxc&^EcI%T9_?S zChlb)Fh`GFQyE$;RVJNHzbZU-oip?t7Tj&=_<$FA_1CSdm$nZ2+ehZRTkhZ1Tkr3) z(^sK{jIVwJL_TUN@^qovwg#ZBEP2G4cyX??H2D zLMHIf@86srLw?c6a$w!gLr>OKM%nw!DqgtuL0@fFLKrHk>?-;Im?zQ%a)T&s@X~WiMEtBLoh*pl5MY0 zbU0dn>+ph7tK8B=UHY|SmRWOweIP{skNPh4BKLkKtlM%DIT<}Pc#&A)Ll!f3K;==|QQA@O2F4kCxS{J%=Oq_YRW ze^zI`ImgGJum%~?my-4tFDc&@DZc&#dH3a{=pUPX5>26X+ZU$J`hS|0uET+7JbtZ<@YIfY^Zwez2qE`cz9)3Y2*s(cv)T29ryto z#uEo;>WdgPfLHiZ%hR=h=DjKbogigN8_x1kHvbm8Zll;lTo%tKi`LD)fgdo3e+UoK zF5dvg*lO5O$*7_o4SA5?!gGoI27Q7spe!ztVbp;YOR(=mS~ea^Y}9fUYXw!Kn)Tem zTz|S*L*Sld6D@ad^a3l=JD#mM-8e!_hO;%Bi8kIbp3OwCKMqWPktb>#-Y2G&Q-C1JOuWkQR|qXwf&u`Ous3)OsK9YglWdqK|K}>!leh_168gvYXt|ajxO6hfWN} z?2s#Qp}F-W#>~k`C224_X{k38{1Wv(oYGx#QdvrZ6Jb9u02~rbmV<&^gx_yH&Sk<- zEvS}u>J-(e=BM4XqJ$r6Tm|=qUO$9g4tiZ9)9BI=V5Blp?dHM?w%D0`N$b8=E=EppR1Jcz?}Ywy8FGs))#p-S(FZj!R+iFHR*r%!wU_;2 zUD@FAe%V!{-b^C8Vx}YamhTtCz8qB?s%yjF#RKNN;_1 ztqZhFC30%EU2J;XGs^UhRENJ|GpR4Lm1iFg$kt>;lzEj%k&|ogH0iikc)r({r+ssd!>a1A%#o zeGZ(z05IwxMpQ?9lVQ=eJ>`041nJn(7LVyaYKlrSNcuuh`O_X5=c5_WIb29_U$MJ4 z+1i$?JBKf{Z2eISZjf4U)9c`!*B8BpNc}`Jd%#l zbdA0`WE0YSDH~?4i~FZwHK9Q+#EL5w&J;uLd+_uS+sOc@V@UPcGF*9f92QOO+;Psa z&P!p8S~c)mrg$YIu(uJdyfO>7Whsw!q-4_S$N*mcvX55k5z=$gnR-)IOYsP$`~8Yn zX`I4hs@>A~X-Vs};FvwHmVPnmg+7#gf4J4Jz2lR4M6K|_;gCw08SmGDMVkfd(>kW% zj9YpF$mmuzPG?Jy9**`$Xqz5|4MV3COUKTyg63F-1GirDt?MCXlw}mf9^xJ}cTR4; zJ@8~1EwX3ZMz=aQ3}QCWnG~q_hK80q>U<6u)%YYfkQsoce^!ixj|27aPKVEcZ5b-( zujryk7 z8yVz@%jC4aZHzEe$kmYuzuZLV!iz^AO~uNs2lVNg__J9K?J;DiTi;y`X(wY9h$2U5fC;2l9; zi8C0kF_0=CBDyjibkeJgl7Xb8J}1ZCijz}PeWW$>@j3&=+kK=l>?XL2&I5TMo0_-f zVyo&mY1gq%SqXP^!W6#t+xQ7iev|CM#)=Pe{54mjE>L8?;Xb3nJt;JQ=y1Wb0_V!H&5HkWA|q?NfnXhNd(i#2{Iwz0Q~t zfU=-vsXBKK&w-Sbw#15x#YQWSc~w|9mRPbO*ebTp8;55l zaYcD$D!$KsUz(SRtf<`0yoDB`L}Yy6F~`ItRd`D6{f9+9NL|JxTZct$$7`~v{pN(c zfLi(KHJ=)2f0zYANrTpl#1Et}YA*u?w4ehm&3V33NhxS8DjB4#(?+o*Qc*mcHA5jt z#0BDwF~(Vmt;9KNkg?;_hA)-#STtTT*ROL0DYOM8TUd8qyz2h)S0}iX*jHwyM~GBt zo09@7P{sYEZ@`3BJcD+3Q(3cu%##>$Yt5#8S2X<*c$L@YkG00!vyRA;BRhu zyDU`=QUBM`BAPv`9kG+pdTc*s_a?EY1(g&lvaWx5HWeiCT8&0zCg>y5N1nK*+PBG+ zT!9XF+wDsbW6R9p<{F3qXu>BRYz+EcnB@gWtR87L>Mh-cu~V-7D45#g?Bvo*yUc$q z;c~;to5kE#1DW}(2pvi*Z74EImBkIK9J+K`Q5g&vW&>$D?WXLxMQ4rC$&#sWuA*|AW=6 zU&SJt=T&&PfJ5z{0KA_Gx}VK(9<|xrvfliPU!9g}Q(t(CDtMlQfciIec}q*y7Y;d! z!DHMn3df!G)(qzsY*={`jJQD#1HL%TnRfV&^yrW`_;Q^JGq?zG&=9!vK*9{5PQ^T6 zV@IbtA%F>(kkv8f#p2e&@Wf)8GOQR4r#(_sN-R|(Em?UC$_wNkq12oY8HW#P%RNPA zCUIY_T$XUvmRnP%CfaA%_)Vz*3g9rF0)^0M5)?ceX{1sM(<$+heqEO8(tc8c_?-0m z;a$6%GL46Lyz9mRNd+z217J2je6B3Yv#&PNM;JqBvr_eLWwiU{>oOJEsF%yz=5KQA z#oao0_T%@J&j8FU5Y9;j!aTBPvJ7|bc1sQ=D3l-Od}B+g-ZcD5yo;W?F{?aIf4${yom&*))Zr*`ug2yXjX0^2?_FokL%JNB$?`# zqG`P80?=PNE#0ZVLP>?{+gu*{)w$W#ranLj3XTz%8WuaY5S!3pyF+8xaDYn z?bTHp)`URr4FMFq)`>+BV+ANh!CTO5u315NI@v&R5!V!_Ec(@A4GEFe#^szsRgZNK zUJrUUX}iuOb|KRBG4ML)1aCFv)xh0U&&2yOP3n!G6E}9m?Mw1+5Kh0(RQz_&IL(a~ zHEt1QFAl6p^OIG~;krG|GP;!zBH6xL34SW}hI^)q^t&M&M%&QV{o4?==-F#odeJH? zU}UMd-)$)=UXxI+6G~xoTj$8T)RvTG^IbAC@OQUanT0Bg$@G<7r}_e^h;x*6a}!tT zO?6mM6xk|Ua?$-TtIhC%JN9a{s&f@P!C?5FnKW+{0*?1t$IL*n61wZS8T>@*j-P|l zNxsq+BmSDm?{UD>6na=Y2(|Yu?dG6$CNox@b*}_SC9||khXr*m82a7LE&;FMy`ed^ zvj8JVIr1wyQbKE8fi$vD(;2dDy7S9-2`(c3u}sO0T#v+ZMaMp$eWnXrV0A6beS29U z?{S7jV7QHp?7JBke8aZ(SC^LvMXBaVw%RVTu%@lpGSnrIF#PPX>;I&0S=h+km^b?m zsIYvvk!!ON7@N@xwEpFkS(||ZIu)B=qG*^;<^47a+8BEdo(VTx>KR`s|6uXsGq18ww7j>c89JHJ7mheq8_9O3{E=_wtTRpBqrvcKv zjR|`Z?Zc#Xm@m2H zvCMV1AJaFp+DXDJ+IGn$E#@k%U4v|+TyF4-=A2&tQvvdy5>MJ5&dwNu!zW#16-L%v?E1~Ux;m8m zo}XZ1kSp$FnUga68PlkS)zp|*Ii?KiE$?hA{FB@FwPUlNNB8OKMIA988;zSUlIzm0cn3i_vKO#Pz4Knl2+-o6@cl3yNN#A8EOG|KBp5pe@pjl2L9 zRKE!eOgsz-i=qxm4CQaTB3_i%;wrW{7J2`-#$J!I7i5#dtix&PmOoU&(Ec zieQi6~DHI1!4Zs_>?m_Qo z!H$d$$KchlZxPPDqO+1mmYnn1wZ5(6nnu8snGqgHnNz#Jt1X0KP*&eGjd%`zLYI{G za*yC<(O(7Bf{_~cJBrKivo#L#%EFUWU3m?NLuY7sDN(W&Je37hnj1yQ4d8q#gata# z27=zNKq=OlEQ7+la1cj~dFbx1$pi`Shti1#t~L;TwR2{L&PW$kt{Pw>quBX)B6By7 zMc9HIq!fqN1a;MI$SF`qmWkK?nqdC~Hc6C>E!hKBjKqhx%#z)cQ~+p)144`KBLajM7atPRTmrLSNH3T-t{3c@19TVGdhP|I z@-C;y=T25H%KT5L4!E@!@BBC0k}GfjS(+f}5Hxg#YA4%kFhs)o_(CqJP<4FJ6pW43 zi1wHG^VZ)P~YE5v7*{_qp9()GD>5EN%G1c^t+K$ zA35Gvg;>ZVQ2j6AS0_ae#fr%E^O}v@zTwZg0C;o+_X9p{d%LBLu-!_e1P;eM)n3xY zaZf`m2}h}K)GJ&*rNw*_@M}C@dds|VC#30eST(m`N}{>mQY}+Qn`!s+28)9N0o&;SKgQuX(&PPoP@NN zNVb^|+p{Bv;`ItA5ogET9USi3#+Tgx0O6li9hbV!&cy|*v!ta?7cr^ftNNG``*NGW z5&O0*N>nkuC{Lum%O|8xwmBKP^IPPkfDY<2G{6SXQ&591sZs0~f5Tn54f4MFMU|EC z_Y46>vZ7YALM=yiKEcAM?iGqT93ShLI^Ew9Rebj`>RG!kyVP|KRd6NiZ_bWwYC2Iq zkTo^6=fma3 zUdt|Bm3UPrJQrFOg{i7pJVCjs2m?t}GuU zn!JhneY?7|*J~6~StS?e&ceS9vUuG?Q~YD9HjcDyd~?{sb@tYjyc^%$ryv1j1~^i} z<6)2E{RVEUUy=+7!X_1G?!~4a#9@VVagBAZW(RA!R-hI{%%`2$F9s3>5?Z?a2E#1^ z@fOmk1k3oPyl4A&LbLm`#kH!ZG5ie&M}1GdlII14nu9_;GMEK#c0Bg4O%x~$*{_VC zNw&F314pY^fe^5_VNFG#2~J>rS2gjp?fX6LmZNb=jgHUakAF88|M&K1og~@sOz~@j z?@80JVXhaoft3OnU(Eo*Jht{7+{t~Z_{hNhW|1hPx*g*-CGNzvDlGJxmP2NrlM6U` zN(o$&Mwn{o#=XG;c}@|@*wXs_Th1e!x;pZ{Hi6#povb7!-0~NHYOIj^ntZlgS9YejgkKyfU7270pFvS|pyVMUK`>#<9&kVx4Ah=_A={ws zt{o~Jo=SA(19SgWQ%0ZtqqudvA?BKN;=hut6JXvdJ}|@(4;o-21WC|VsFKiEg#}wa zB>R-jf~F5`N0KNM%(`9(5wi1{6utM!^Qm3g2f7|;l~jc5X|32tI;eS(vU%tsUkcjw z6;Rp2pZQllBX$F zwmH^to8_eD?R^nk9H7@-frEZUfw00JpTK?#L>%~kAiI8$frKrbBf}tNh6e#tWCK^! zG?@ek4comf3qb(q8i@7+o>4v&!Pd7liI~dVOhS?Fg{Bf<RupktKP%D<9*THzOfA0fu3AVza!VS#^W=Rv-HrEKI0jOIH;$nK z>%ZqxA?pbVqViw!zEroIPm;D*sfb)*b+G3o{))KJ1ZL08Q;#VZex$XJY}w57lV&jKeRA9s z2vaHGJUB`%CPpncyY>-NA0;)13Z?OWhYxjie@eF-KylO{%i~UF; z-hRypr@f_Z+}#!+Ay+?Z1>2gq+GJ>yc|21WI5;sMw3dWtno{&lfQE(+Q11rG2_gWO zJ8=E~LM`YfZA*>Ph%#>&mS+vbwh1+v00Y>}fsDq#j&Cr2w~**GHepa0#T~#Avpl#p z>QsiBH*)kyHu}mf_%{5R?PO%2%V(%F(*d+EK9Eam&&wTx{0mdczsju#OizVumfC!s z!}-kF`?VP0)KeGeQkDe0q&QgBFdx(XRBuPp0$mhTIeVfF*ck4Wwv40-mVSA#>HOEr zz6$4e==4OHmrZeju3-v+u8t?>I}uwr+uB6Pfggz>*#z!j;OoZgJUpTPlu3(J(=%n8 zKyUo)wVZn!o1eo@20LDCPJW-c-`s(7 z>NW@kQGi?#*l)Q8N;zh?hxbE@e?$I0_#8Bbw@TKSFUPLwZ5=}x9?ukf=GJuCzi{u> znp0wS60QF2YT$_!#!81Q5N%h69M7DY2v8GTg#p9vAf}w8T5UIw%J4*H`@%ul3$`)9 zw&H{=6=VovbwbE`2ndTMj9~jgHB0Za?K$z)Fk|^7n4xCj{QWXW6uu~i_Ur8Ko(mi< zBeUe}BVk5LJM^|?N*B%>%+>-CeqG)iTZsSA!DY3v9X2JuxSgE3*bqm{{VU62Vy|-* z)d~8LbBQHDL)>r5Q-92p&{96K8(9w>c2WVnKishl!ed^-C&)QOYO`Aq?&Vw`R7*kd z{-#<;EX%m^yyMQ>)yd9+pM++y{jIBVTxi;(){wjzNj_vTiECIs52_|ziXwb>`&V*3 zc1H*HzWh)6du1-J>}_Ft?y7WC(8v7_>C6qMJ5yMkX-e(da}$pel5nMp!k=X(Ztefw zlO=D*?p@$Mx%~;@RT{tQu-eOwy-dih7!f!=e{jy`YumJ?GBAFu!c{!KmJrni1PN7~ zPTzdFwzp*|zn8^`d6^aP#?PJeMs`q>t+;dE-3oJyFci~T9UH)2am-z#KKmSnU)RB} zIVM*NRzB#m_LSBqA78V0)pu3O;(4E8ViQl=Vro09;y|&nB7S8$05xe+V^#7SvVbab zx*oGnZ=z z+LWOIHhb>D7_dVduv5ut;((R*N6k=g>p=MlLP{d*Y+Fa=dd|SIertDua{Wsg-UhlHT1yFDk&bujp(00 z-B@8c@}hoE?1cBn$^JSg$D0C!Cp8`k5I()x(^XPJe+@i-ru3%6{(}5**Gvn5s5&6A z{8gp+?f%~q7{-V|<|hnewWBSo%Nt;V{d&?0Tr-z@@m#D<+70iQ|5-R4KcF;*4XCpsGj@Gvf1+`}Hj%xhba+JLb`t7pwPzS_g&<*LmTdl4PFW+Tw!r(e7bB%Rjnq4xge+#ID z6kL_uq?^7++Y~y{ua(Nn#&h1G|1Fs7PNGf?`sP& zTl-Xrg5sWE1Y^=P3^7z^uDAGXzJ&fIoy@}G9Vx~7t>gV8AsaDFSYj#V6tV@v2aN+Ac!5nh^fVbjFatNUV;I<5NcizdjK+4yL(^pS z>*Rk5I4A(EyKug7cJzr%*w`(0aD)fqN*-XH)63Jer9gcEE^*!zszScJ&NU3vQrClS zmmum2gJJ;07{H<}&5swUUuJs}-dI188s*=pF3NUhhE) zY`qV%cBEek^KCJWUV`i(d~h)@?!Q3zXfC!_*tfHdNr41Xc}RSg*^t39v)!wqB!^;< zLv(_kb|Q|0Qv|~gK;r)c*${P?kw{Q$mKbQ}7>J^LPJ zG7F15KppXti!Lx9B@A9}fRra!E8J)z~_`NC9x!a7O&t-xcnm<^B4gs`d z+<<1=Z`w>-&f0+hXAL$KR2rY(-LDWkznJaz={e1Gt<-&2?ravye2x5m)kk8zLm2=9 zJeP}AzwJU*59mkJ&l}Q!BmI5gt^>Cm29hC4&f_2;V4#CXOCwdKku+I-PfyMtzX~Z+ zNJPyW*iaM3j>{*a*a-ku67V@CRE*WAg2}dWk}rg0?U-s=VJVhOpuv>{GlPJVwa%l; zW`G$5ks^g^Az+&wc-)41azht4yAQ{m#hLwyCesQshUNFxT(&D){|W(X3%C!V0>CGd zg97=#jzQ7&DU?IA3D_V_S}f-Cq;e1dh8B_z3?n*RR*J~%6AO)m^7hVpyo zyXzt<(xs!lZRD0$Z|-95ye)3L7$u=cEw~i3-M83SeVx<)B$P^;>D;k@e+W1@rOzI$ zpLNi;%8nWdR`~N@B{8=N2PY2;zUZYlrXCl96Pmo%ri+4i=`<^Pgt^<^LMxu#gDPg@Fhvs6X!7JmQhmMr8E)$F85eXAUab0pv zg}foo14mh@+%0DpK9-4Ik1mfiyLB0&Tdz5FLpG12{S+kOOTXOuVuGovS6MNIiJvY} z?R2mOaNXLM92x7wzFoxdk?&FSh>yAEc*iO)gjdl>D5aH^qr<}G(pg07Kvy&E8W{v; zB4cvz<8KDXF3x;-J7u!)qx*j#T&!~Z)M~?G|K{O?`YxKh@wb+ByQ>mjX@-|zG!@kV z76xpVr1C{xGk!D7Q~qJOQT$eh8a|X|-CSb}I}*-p@tmEd>HD7Ny^-2-M0e||Pf-7* ztu6LrUuo{;JMN^V#msJdO=p{*L}@T`D-Ba^D9}si_1)!-%J}c)SO2&knVb<++J5C! zHS2fvU{~SIRY=kSZp`%5d-;z z?PG$7JlmpA-YE?vCbFZFK)+VWf;e}m9LUz=v66v6uZ-LwZoK0SB=pUBwnb+KOY{yY zMQn+Y;P|!7%%NV9FNE8#d`>bWY!9{yE*uEPH1$3E9Q#Qt?|`1*`#;df)|jp|9Z)Y( zF>|klIcTjdz032}gbOi2(=0 z7PxgbnWsK~I?f*2fz%&rb0lslJo?fbu~Rd z^92DZ#;E@Ip2%91cD=S(A_Qk-pp(nA>?&sVhSWQ0bl2Ofz5J8})rgfrd^Es$MRiK_ z;^iG`sJ?LIz4IU;7FpO?+odW}s0CnSX;@-(3XAuB&W&h`bXS)&0z-7Nl0jydRGFIC zmO@UuZp)}$6k5h{?+H9nSpEE6@DKy=aiN^E&O!BG^-#OxZJ+4RxK;3gxgsEptPoA1 z9@mp!vaRfXNKtF-C|4Z9n;gf<96O(AoLG=dJU7+!^g$y)nvHKaRaauaCMI^2R~{zc zviCc*RNN0<&8jn?ru+%-PX5t6cXS1ocFX3LcR}2ZSFrS}%}YVk58-{KPJdkyQZC%Y z$0;XoefCMcX(sqdx%KE2L-CZ^&zF=2B0u;gU!6J1w2aa?i;Ft?j_#B(aFg>WZ+sM; zT;>OeyWp0QX8pQai+bbo)3z1ZQ8(aD_#rQaPa<>kqf7Iz(rVN@4Q8gqDd*^B*eK)? zfpazIHH|QRFSV@pU!LfE{s?c&7``cz{lltq{2^#W&`%I0$=9m=MhyBpV*FuMN9zmc0bdm*R-PzRIRRXCnglBr!g-Iu>>qyAUoy zIKOFhxThkoLQDdW9jx>r3l9}Yy%?Lo1XSmu5HPr*Z{O=ffE_4_ z4c?_m#zdM4(a9mgX)(awX_2IX3!*B-Na}Joekm8MLErz>@Vr5LblVj)@Jq3^Nl$Fm z$II{wKhn7y$Jz$pT!we-YbM{as`@zG6HDn85ZG(0i{-~zSXx`6vh5uK4&1y2p_rHh zbzW$#bS>n-sHfMeq2(=e7!6zH4?y7JeAL(#_T%$+4?_t9aLg>-AhX?avHyFoKR^iT%d zirn|Rf9udsThMJ`r~y$`;3+~*oBmbk2yA;0qf!PVtV`+`X^)hI=NFD92{L4Xj=wuD z=$w^O&;<@A*8cta4FtyXL`ti~Kx52XdZk(tTEaPeKMW)Sf&rf7`!XP$3=9eMZ_HGO zfzk5lWjQyeWJ^{a0x^6 zglmgYC2TuaMkCS2h!Z0Gp_DO(Hc#<;pn<$4rZuu(^sHie@5&SB$7QOTX_Q&rB-(AF z-3{<)o|`n$janUR>$M2;Ms=2|F;z7qyc~Q>u*NQ(D2x{YVeFV__T4hXdBWS4A0E&!I7=)u*L%2M7w zZnG`5Wk2ip(yaLH|4i>>jbFEDCj@0cb5)8TIj(X)rTsXK+$MpN^^yBKmH}pu_r=AT zWuGf$#LJO#4MgRv%#d=)@*}S<#d3fKVQGB1U16M>r{j1^*U@`Z`>FR|(MjIu@V}F) zqwtgWI`(v9>y8r<=gr3-wL-+uoJEFZAFKq zBB)T0pM{Cbw0nnw<~{7iG1D1WvvYDo&pR5Rnw>j@(z>aXNAP*HLzI%G*iEe* zqADWoU?oI%8Gt<-(%|f_LmsP60W^yydfE(0?Vy`UxFN5iC|Q4WTxXB&)_mqw-|%mg zfU`HhQtm}FUaxo+@wbval#;fp9NFlqO!dXyS?u#4wLxb~Zp+61^LKe{vj;ymD(Awix#Ks( zW##6&&9099ZcoR-ChQJFvV$tM>685SZ4o6QaIweikp;BNBdBguj5G5JPgn`-39Y<5 zxH+`Z|JU>5#Z8_~Wofnngkr{n4lj7mxw4ajBbyaw5na8kqRRJR6u-%}WkQXD{p)`q z9i8o0Z*M!@`syK2b^J#Y(CkHCmDar`Y+Z;9n|Dg*T7w)6gc6RHi7Fp$C$EYYFcq%L z9Se^e=3$YC)*0}4OyU|~j12KI3cN0f{}=;;neJfqr__QKJ{{8(Am)V!p7{a3Y7{h> z`p~w5k5Ws!e!`r3l=k0=PM^z{1ASt?7_L?+9M2T#46`%^>b2sLZ=bb?uRNZq%p78f zRk-MyB%nPar&u*DAdxaMVhf}f=)o1stnejQgM!$mGx+MhG6PK~z3d~v*zW6buqL>q zH?ogH$NLZ#VzX@>e4~Izz-D9;Z}1*c{HA)+H!Tiaa$(GkZVC{8k~F3>upXJ$p!^2# zsL+J;U}&XxL^zR$_)w0Q2p?^t-}RR``H zY`*J~*U$#3I9_DyCwPx~PU!@+E_P_ERFw1PvVQDkC_Q%M3!eD?vdpn;&5PPY8vw*h z`Xjv_FEhgX49Z-3%)er*HkaaEBvphA9#ZJ`!Q~Suc;^LrC*rLi<*X&+3VWYCauHvT zuL30K%^xl32?fK)jWxRwC3WNCe~Y~8Mhw`G%l%4b=zB!^eTcM>yE?A=HYf45{dnWi z#t6CVKw|Rm>cY_#*=3J1r*sZw!`wPaNzx;Zw;BBVmtM0S-#y|bHB{!iNuC=U@`ymc{`3{`j+lyc09c2g2tu7Sq}M=#IkA zvOG)@J2A26<7yQT9@lxQVwAdz*t0~>#PRQ)PvWTe#EqyN%c|nUU7t}pb8PU(^g|~@ z?}SXtt-d!^M|&?R1NVMmIr($$@rSG2C*g(+E}v9kTv>xJ0^UM=+YC3`P-8pwRg>d? zpi^h2rFpfG-8Cb5U0@<0@(ZQG?#!!7IN%!^nM|=%4DcRzY!2QM32jrM``T0%>A)kVCu*a8PML*eyF_z zI@hJxWatP~{YBng0>piC3bWn)Bf!+DM2sp81gLi9koWmeNIGIqhrPmar^fICD{7~S zX26nnIr|4aR3Sgv@NzrJ2lWd0DqURmSqfq&Sv3At*LdezorgF0qV!2Sd2+$qV8hD4 zB4aNye%Eq8NUkg13G><3YXWvWoyalu^A_ONYpVa&KBM=5d-PZFJobQRzYJuMCL3mV z`#=}yt8v!Y``FfUtqNzp06G?}-TETaKw`0%Ze->I@zf`dt;S*tg5t7XklK6kmAzAU)`k%lua>p)L0x)x zVw0ovJuN$K0aGmt0JG(3AGP%E?a;dA;OzzdGttSLVG+GS+x+>UyEEBc6~~QrW8J?S zS8|?Rs~r!9x;QWXrV4CrkKF+BAX;=@6F)Jte9`3>-A}IUbwL&DJnoR}zQ7*wD?dhP zBsWi^9ODeDAb5rQ#7ee~tRL)Wlb_4*Q)BOEg#wHA8oj#mf>U&*EY+`((stV&XL!TO zuhC8)%ZkfEd)k35q{f8fo9kde86A6D*r&RGJluO zS*i3+BW2)bBJsPGwis;Zy%td#H4|uFp)zL-h-Qn4+{XOM{nmrv;(rPrWH}j!6hFzo z2=zaK^Ny`0c`H_oq5jFL%SvbK9!U?E-C`&Jk$WN0Tt@0ux{+g{nwP1wAdgbuV<@xQ zU0KF%Vr~iBUV_T&m9J=4MswwzYi5#5U7%)~!co7y__qX%R%xA7a29O87wb%oJQTdk zVG*kXp4gg4h0;ZjwRkZTpgNdRH?(654;Tu5o|P`~{*!>o+WX{VH&)k)Z5hz2H+eJT zO+{{AUh7N?^)H{s%yJ74Q?%7KC{Xh^$KXF=T5>ee(82TKp5HW=vR~7bwvAJw^j)Jb zZnl4i`u7B&UhDmBvZ!ME*=y@>uTyGA$tTZ5{_1Jje9Ka5vorZ>H9ii!_P5B>PL&GO z`_nWD>@c)~-0Zq|8sxQ-cv9Z}t1?Ev~J(&xCC;Fh5- zRq>&SyK-qwSJ<#FPw|<~R0U??S;<~q zV%b%wxld|c7u2Er_kh2twp(nwK` ztR|&;%UhaGH)WDgt|ZXq!$$#&x0j}x$*J*o`hU>hIt6R*mv*!*0oXM0w+MD#nd&b~+-IVI z)k&*NY}+{`lT7DU$M>GAM%KWE{#`wW_V&BCLMPnImYLlF!2HwTQ+6!HYfTuFp7p)g zH$)ye-t{kU+gPnPOP&@ziQBkda(9}elf0N+N2#iFp^FBpF1MIg+lAS;f3vroP{HmC z{xT=DXPkxg(DNl<+mi&r<|_XMp~NcnKDk-5NB-JRV8n(MqtL&~G}VQc8ql6yaQSXT zxy$(nJXuA(kh-1on7n!loA4W!e;WaG7yzcw=g3#jGt;_-vQ~|6Cr^HF5eVn zK%qG|-bfjMYL{WS`Kl(Z3s%9TJ636bIWlX8=Kh#%Xt2?vT z4AH2)Ox0N4N%fS%9f4!_RV3C&%;+m0^8oyT4A6?pb}u zag)l!=vOfkZ5wJqxyIFToQjvK7e>00%F`c3pUB>2bZ@?ueC z$NeKeuq?0Jh8)ZvDh!sFSi2tFF8d>Kz6on7!)zW+e3*WmpLYx#deZFtQdF4=m ze8=JFip4+H@ro?O@7`+9uF3t$N`hf5fU%UlqIs7IsN3vr1z_6i{AjVaeEvXqw>bBO z&~6!FSt>F#4S+rt5}#g^@1pYnFJ9B^GqSJ;=dsBy?FpP0C~EfvDy%sr%1%QKC4pDY zs=CkD$$W<$AxcBV`7={e)YBh74C59q5#u^+#+K$gxR}%SuZrb)|9}pTONB#jW1oG~ z%%q;2y<`hP%nV&p+9p1=V?HmXxuB~GP9wqX-N7+2RM$Y{5e0hvW9Aup~blH$GV>$i#rMzj6eD zDd(^~7o(ExB0d(u=uReH2Bm?y1$KHudiNU-lAq9CM_)-HICPFurE z4lUcrl=EYS(6khDnpSy{Lz|{rWxx8RDa>5s$C{yy%%49&qs#y$B4 zJJ0^fHgyN}auY%jEh%hlfiJZo`1pc>qZnmU^DR8_4^ordNfOQ*mU7bey4}r7NdWKd zbW8P%V5q-w$b%>O$8&Y2)#Tt6l(TxT z$zpqSsi|K5yp58pL!w3Hk~j1U)coPnQ+Q?|;K~8J!G$vnsNR}GA)M+C5dT4xs)x@X z8=DK*xW7-#Ol~O;x*rrMs$#NtCWHNl~8K$_fHV|wPK15r??e?WwRnu*D zRJfo&2^6&|-an>1nck%Yxj#SavlC)MFoIpn1yXXRmdAZ~Qsy(%87~#?=F_4@B$U z4$Jn2>600FOXl&*gX$Ss6?RXg2M&_8aQRQlS;du;kd1>3K_`P1JWEw=O~;Vn#g^CP zo3$mCW+gEVFYLR^q}-C`Jgs*Y4eikGS{z`c3HAy=wOG~U(l4zKAles-ytrvG1m;yc-6li?8259(xQJq>9AZw9#EH_qXJC}jwkU5)^;uQi~}Wo7f}} z=BG1HOed#lBKoG< z{xtx;7bQBw52dZgZU^U2yea|5xi3>v&dy?9u(wHyS&Swid6Ky37X`3&V$*UK7y*e3 zSYP^y8ap>0s(g2^tCIAQ>Jfh3iO3ay2A%(f>*>@0>Xk;%5rv}ZxpwbCYsybVH9M#d zo=;+K^=BX-*7~8ewM8a$#vMEfHfU0S{%uH1o6bSnQr|DOF_8HtV?V?f@OU(LeaPDm z%v(=$#XxO3qlZ?Vg@NYGv2qJg$;R+QiP#-Sp^*?{#GCrL!|)O{0sGT#Z8{cS?NK&L zEXEY>yp!is3@y#kvCv5aAk-eHw=P5@Bff%mW*^+mJv5b2xOZNLWDD4Hs|#ZK#N|gw z1#MDlgBMiUyRAXcW>3}oZ_16!q4mxMdJ2p3Zs4L>lZv)LIZkhZvBrC8T=bE&WTeYB zxd4=tp+y_g&QRU!JR&hQhrC2=+*~YFknG=VbLfnk3e^7sL@UbL)c>uZviriu zZt~!iBx`8;kb*Q{?XD%?VD-d=5)F3(fC@vJZHD~8VQzzI*f?664DL_{9G~WPgQ=7U zk$hc-|F#!6mnJhaeG(L~{+YBVZkHTBD$6~=>Q{ofH7KuEZ2q?YmfW*+seTFp?D+V^ZU}v%iHvnW1e-3*H*NRYkr~Vt3aO7|A z01Wn<7gsI;cJb(3bUNnQ7xs~&Ekt!Oj13&b&7Q=XVc3^;%N_eEu zZLDAds6qVgY@xJ31QJMxjH@KEA#x&+W&eN-wf+$a=Myi>lyJ}xbRDu9>EKwz6m z8kdbWXU_R=zrID;y3Jzj9u>T8ys4F|aM1nca_d*o1RiQ7C*^AKaXE+TT1=v3BrgC1 zL=@b9^d;5UGqMS!q@#|DK^i}mv6LMlZ-D;bCQ|2 zqBI`i5*@GPOkzXVrGT6dPxQdOe026Ny5*j>c!NxaV4u9s(!RiqOL-ZvgP@q`=%Kt? z+sp@d!6_O&MVIcv61ZXNC%-7vqOIfsjTFmtA}l(149_AwG1WDmgzcmL@$zaW1L`S> ziE77=3e;|(*LC(AZ(Y8{Mjz{`;M<_)nFsu@_#3ZA1pJpnEA)N&e_T|%Tq$6;Y218w zSfKksM>nFreq-FQxucI<;?mou|ApCixru?_maNILaLv5+yT;u{alWQO8G2j)^+9mI zJKLb_R&l@th%$O)oXE<1R3?3c-5|_Ds7~kb#F!syz>JTdLF+2}XCjc6N$hHIvoA#P zE269g|4&Gov)+k_J}|~%kKWe@_0=VWdesLIN?=JcfT^)rKf^!_oA%~mY3ZA z#LN@bU5<dZYI(0i+GA5=~#f9OZ0du}jFZk$*6z~1OzNFS;J#nt&o<4ZiS zaj>o^EK;@2hJXkeBmncI#u=LZduz_QFsq7B-hqpHuwALKly|Cupi!Y4iSQZp`>Y7p z#Y=*E341FQ$20RLRexZVYCKI-@n30{POu*xx1HK7T-wkVBeK=}OATTYUEv!r(@r>e zYI!~1I9vJ2fSY=Iij(t>B{6w{yc*l2f+4;nMzHR{wkXGFduoc3`@tt=nr{5;-e!)< zzytn}S7lx0vn-c2{yneT|AvB_+bmKwP7k#C4Lpo} zYYC80FLplYIJuL=X@6Wbf>nrgme=3Icgo~bl(^m=9PzIU#n);w1(NoGy~rihICk34 zwbc2!tbEYV@1~)-10dAPQ1>G=@E<1_EtwTs{p%iAd^)(TF9?N8CW)x2SO|wgCHb(K zNQ*s8Y>p=9sW=4c9A4BMVLxMSznc^Nz0)qCM$Oim5uj)2A5!|r2Ibk%GH{=*Z+aCO zvX}ZJ=uNNY;)hS5CQJOP{smxW3_XUdCfovLit(rOE-fCz()wD@{1{AuUjymjjg{fl z)BJmgSZ|#la5K$^LBg_DpfzSp$VJZE|Jb?1*O3$Un?~81p9%XQ#4yK7Dn6;|pv8MX zf%3;aS~{)0BECI`hx_L;wlzLE^1oROCQ$P9{5VqA8q!lN<0-|~Gnxj29>YE|zDnJB zkuO!45c=|7jNP5(vg#C~wAwo{PbREvNghFxRx8pD_qW?DG*=PE8EWq11|C-O)5MS? zlHc)rfc>cd2qjhqHVWUrR+8gk+p*Ux!_A7zkk-}dfg8|#@&Z`z=&#PhMm~J}+a}jK z1I2VoIi8taQwE<2!1Yt%TA8v?vhb5aH)|>KV)AXy`XQY6On$EtMfaNHe#j@szSb7r zjeMr(r^`W)DFbRa(IG)+J!HS2o_{>j?ny;2j%(QGzCTviNvR+UW9*-WU4nGu&kI$p z!nUAEYStOqZfPebmlJQmQN!bxyj(F8jqw8(7a4{Y4jaTLO zLeeJ59g39slFQe}Yn+ zytmJJzM^1K%PgyzTRqEDSB?aNHZXOIN5+-xcixz~2b~mPNc8Y&I6#6f-s zGcA-@$S}4Snrsb#e+5OB3|d19$u&!y$L|I9)uLXP9SCrJ?u6M*XYbM)G>akah{gA` zhR=i}TyCa^Z?HT;2a=5Ankz&xDSaCwGk)eIZHoM*RC$m=T}2o+Go%-Uw5urZ)T<>9@(GD zMH$_;^E#r~2%*b9Z@Xfh>so2%XxqK`JD?pKk(=9XB}e#UaH*8McpvmE-ngnh5o!Y75IC$Ei97-kcJF2{L3bwB<3*TP}D~vIUE=OHXz1zs^G{zS!u+_mlBuS zl(s0;#E$LYKc^bs24GSoxXl7%Gr&)$%#8Ax!pQwIDiNB%IbQoG&>Bem`>MdQll3>L zs?P#;8?3L|uajfY{iy$JqfVqp8@P_EKCD$ww=`_-bh%tTNv@u4?1(f2GP9_<#cEuc z(4ogw>FhbI_@r*@X*p50+Z0G>&r;cdehA~CL}`Kjd7v#@_NjfHov?%(OmQ)ur+_MN ztq;kBzh<5@hwsG;DKTBkd_ln^de=FwcT0aZrFElwB`^l%Jse=A_;GqAoc&bviz)ea z*5NrBuH&2G06F%4CL1#on7W58skAlX36pp2aEx`9#mmkZz_ie{-_eOM%4>6g`a(8{ zOGf%?pShm)T<$(dui8=?EEyg}a0AupjpoO|2y+geo`9kX9!ABBFNIU>0;L>4@?(5= z<&ti*%8NgUpIE7y#1}RXM)rS^pI!@s>gU&KoZBnFnnb6?9Mz#xq>owWaCiXHn@S;S zrui1;`9R4XrYXcX;Lg2}GE)v_u3lXZ7)f1cM&gAy2u>1~e-=-tL??WasuoHl(qaKi`r7TrRQF_G+smwQ)AFq@BIkb*M)sIkSS5S^uGW7Wq;ZJegnzC*7ADj1 z;*jzks1kHS`_f{n$}8e`BxcZ#%0mf)0LJwKfT*xnQ*FPgy<-{cydh%ytf?z1?n-shcl z!~cr5Xj4lXKwt_SgJqPl(z(T4~R=N3I~+PVZF)4r=X zAcx>i#g(mOKa$56+Eew2IZ3|xS8Ru0f?REIk^tG<59&EIZFN2tp85H=1F;jQ(amC( zv5)uvG5z#EP}a=L|Lo%q{X%Y(2PSw+r3WAjBNPGe0RJfZ14?|y`oa!>-OXUj3?eJ&`e z)Uh_tStw!(9?ff*_JRit+=s(2M3B(;rfouXiCSnvIU;uq{8?*{92aU$G#8ye(({BL z31zwid-C|e$*}q*YEysjcfoUd>mH&*fLz0>GN~&)t0PKXN&2ditNETt``}{ZxTU6Y zU1gP;ZnMj_sQJtY>+Hm_WJ+<*y2~MZrB$KLamf7y#Ew`7k4cn!HuEfJR8xC&L=(WxRNLEg^?^y^_LoW#u17&O)*w1~I_DYbBJo8z&2x`CW zav0eWb=m^zJY5%C+jCjpMf_ZZ@3zE}aFn!GwOjcsuGRs9bG78LbT%%>;QWcuTo9?T zw1$>p%jz6hwsiozSnBJwMpVZQ2MD^F#iGpzmWzpML$Pw1rEcotbo&m;4OcIyWs8Zw zWC(GkB_-H?1fpVVN5s8BzL6fO5!YE5t1M(17~`E+)LtM8s($Jm{t>>=ltqmltND5M zqpd#3Q&TK>!tS!vx>o*x|4tjFsg8H9bJ>(%BIB3rU4Us$#moXLt1_OeW5Rc2Liw}s z`068Qf>ya=zk(#6rn+0rNde?QPr>~kx*uT z)+fkS&>0p{2{d$y3ljPY0@E6>N|}5Mw2omv$aw+3pGcDf`$WEYG`UW!yi>O!74Sghyj+m(iC>I=po#d3`a zV26OQiK^H_JbTy?3%@nU0eifr3i(Q^%a9kIBh%C3JSSQM$J*Zh2^>bHeTas#!izx= zgcd6*&&@>gY7-Is8OO_4?0cCIo*n~**3E~h*;wLtO?Rsaql0O)guaH(&@!6o?pxat zYX%T(@l9gC$r@6{MRE@Fh$agunaps`o_EhdGJ?a~Mr|Y++iK^rU8l5$m+c|cfHnIV zc(^8?(is*U;u{jY6i;UniONmh{zgr6b#tn#E&)9>j(*ke?^S3Mc>4=>W$Vk)t)ff$ z@{;hx01I|2?XpHb)S_trSK<)X=w)pVmjl}ZUI5;-3rOT8+1|t+XK^Zjqf!a1b22JG zoYc6!`l>~M(x6MUy0jg7?VD1kmh;ZPmVl%P?ay7OJ~Fl4UVBm*V5q{aa49}$)WkdOk#G7|z6Jh@B=z0;G+TA9j2zyRvy0pJ#Lg?> zSI?4K&UHA&UjnsYpnYKSma$@$R0{- zm%+5yj9BKMli@tYfHZTNK6Ck=p!+6gEdstNF1P*XaqUbpH-B9-<}o)s1N&mvk8)P# z-f48@+R%gZPVBc8!=hs;S+pa)8vSZriY7h!5YWTTHBQo?9JcW-(Dl`s$5JB)?QgUD z#X8M~al}|RSRcUF3zPq0C z*f{0JWOiv{L~Z|+OHtP0UX4yQ{EFWm#z?*5GH6f-Df6d;^tOi2A6@}W73pC@c9EL*bs zD%Vf3jBYHdg_S-eL_tp!AUbaE-(&!zvQs-yGj`w-6Kof50sQqX-=1Y#ca5y$g8)SVAa45NckFxHZl;-Qu(D z5dTpkmCJ>a!N=X*QNfp3}xp|UVD?km|#L9LcRP6Lin~~ zKSI?p^(&72dGd-1XDVc-GSh0cy8tD`oi#b})%+?wO{{P{K8TFAhDAc_Kix?P?X#YVxO1Ih`qHO_Wj5|>jd zewXeZ&KM5FCs1Cc4122$lg7{xQ+o+84nQIGt6l}z!^Q`#J9S~smgdtX9II9j)a&cc zQw_o-^UoIP4?II(ppNisLBWcubk({T!=GKnYw^d_OtGt&@|$rit=f9l^||m!D|YCd zqLoDvL|Q851X!{7p&cGr;s7L}Hr59Z(n_;5p>$H7KfuB$NfDf%i#gIL&p7;&v7*Gx1ZRaK2L7@oXtZHK$T*=c2Hs*$gpYezQ+*}w{ulqTvY?YlsEx+ZfP zv8QPImL5gZ-Uc$HFvpjKcxe$%c%9}1NiQvTYyptDac!8)O`F%`iNOm>N=O6G%+>sO z1IMJnD12ujuZYLH&J}{KRBbUt`C5ma zVtMb#^kb9Y3@zGyj%iR8Xf}$S`i>}ruJ;Z3a8~#@sl?l;1IroRj1K7BN>i;?>vZ%M zkQuitX~q(7QzzB1Pz$u?axuk-ykCn#^&HL%R(*wbj=^#ksf1aRj^0Beus{KwPu(R( zC=0pMM)-t~gly7+c;sh|kunY1&}Ml(%(+UKMogAOq(4X_UgHtOI=-yMO;C3;QS5J4 zdyD@&He6l$0R(B3FIiXqw+?-WQXH404ASebar)y}9Q>HUV6f`$M_Zcy%AZNc&)Ege z!x0Wt0jOJCWVX$jBF^fsl5m@IhJph8he=M>fkYnk8k`w5cZ(#PEOS@fBlf%?RpvFK zX0}?;3mp-D{&Px$n{KKwP*eM(dP3GNRxa6cepf!e4t-zPlx38MaEaq0I4m8HhQa5Y zJ|EaBysc?>s=_=uZ`{>0k!Ygr9pzlpD$M<% zJF5*PzurfSCyAHs#h%zSENOZPuWRkVW-Emn@GCr3rtZ;hv_qsDZ7M*XyU`eK{NGIo zXTLTFtxK$+L(AEN!Qfa+w$vE~e#bh)X{J<4@=TIsgj0`vewH1K+5&m7w>iRasJ9UQ z-kc^Z;VZGv`6H2Gw8g|KIcLEqJi2{eXBZh%-E)5pbb`v&H&dv-L>!K~wulWmNV$Kc zHiB^(J`7jvDUMLHYC1^skSS(Xz42(aa@>7O)bY(|=mq`FCVX7D>!ot4t8N(VH*nug zH@_WR7oxyoX;n})q&EKyTWjL`*u2T+2aDQu#QOfkHOS+2kz5FRULC%w% zKkw#O)uDf0myOw8e05lH4Q%>r17eC8DDn3mCRRA4N+0>NDLAh*u{2n{_7ICNhL#wp z;ukr9L!v0s!CQZ=O#bMA$#}>iGh+XJvA$z?vc{~+&)$dk2-#hY{WlZ+Fq@gLksdox^ zfr_pwU36j@ZjBj`cbbQSSWI>C#x4li<_Gq1$FTtOJVTZmCAioUy1E*J7=xLWaxKXx2wa=5zy=^B&qtuTn-J0^m5NF+ z7Npd{uNl`}lWtguOJ(I&Z5|q?FCihc8}prS4%Mad)x;Hz{WnS&z`;%ORM9QS;NR;ZyMe{hO`vg%p;92sD3ML@vT9 zamh0tiPwVz09KLZPb0G>ZF4%iTK#spMF+f5bv>->Sm&0cdof62wY70rWtn+Wv`c^aRI`tnY%Ym+>Sp`DnC zjp3vrbTE~;jaZIfGriX&4zuX^gaxoT3KV`lK~-VNskRv4jjyxda-pHu2q4x2v`eLA zxL})C^3D>HeGzB@6gr*&)_kjK`Jn`gQK1rA_1ZTDaYgAVm`wW?WXq4DG^bKZd7foT z0TdKr&y>VUd_56cLyp#ngB$qP9 z8i98=#&8g_@kO{DPW`@CoI3wf^9es5uLF@dhUw7Qj;1wg_Cegu6MauuTLB^2IP5Lx ztNXD5k6)k}MX8lRNVYI6wGHH6(1lW;=Gr^7j^8<`1i{)f=)QSB0txQtZJJ_W|2-e( zc4N}d^`U`ghtJwi$3bSx3b;5 zc92t_pg^yqMWt5?_{_(fgDwQC#6af?&reeXTLNBdH^*+V6qXOk z>SGk0&!uK?_R{MDC~p5uiA38d%Y7EmB|P5@f2IUnouLLkhk-yy zMg#?7mXL?qc7ufHT9P8h61Yvi7G(pPfPZq7)UUFAygKszB#h(1^6cyK`0yU8AY+y)u|$cvh-sl>rD?Y_htJsCGJG!p{! zQPu$jUfrkG%NwujE%dX%hkBEEG9g^DY*7JXLjE1+8W%0)T0nJ))$A~2Sg3b~0m8yS zr3Aj@3;vNPlN3RL2Z;fxs?}rs`u}px8|$E@3r6Nu^vAOp*g93Qu)@om2&1z-Ss~Wt zgPB0RW0D{3CW}fN-k&>v1dnxt^gu&)uC3de1d!-?P=Kwgr$Tu^Z!U}wQ9acns7!Kd zt(EecaqZ;;OBnYB^y0lqYuzXC#{!4w;>48Q*Bdg_ux zmjxd0QY^2#QkS0Z-V<=n4OS7-oqo{$#(yH+dV9ZT4e6QhrySh{t(L8?ChcS3U2nVJ zN!s`E`QL?IhdZB~@3ho@CwmsSv$Cdj3F84#U6~wO*^Xw_o}`qCGr(6QT!Qlwn1Wq6 z*POB4*qXh+_|6m+{3V~s%pKj;JOA!m6oEmVQW1AR`M%wAuv6+_L@fIUC;6UOfn}K)%N^6Ne}1wn?2_f3 zentA3Ma-QQ)LoADu%vAE1Huc|Ju#kf-v&hjajXM3fSY$-*qFi&JadDJJ{v7qqR}1p3L@R8C+jdX0LYP^>IbFZL zKMREl)FxN^96^JKnkVvfs80@UCOFf0-4m(@X%oLeYi6svc0 zU!3NI-dQ3H#RB2&DjT^5S&*g)g!%#nSJw>Hl>yxw{w9!6c^tQ!ZzQcq9L74WS{>)w z8O@j#S$OaDye}yCwF|M#Oiw}h*C

85+~!p<%a6ns&|m=D>w|3~cxb1yy5k{WCXy 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

k&H@W$9pM{|zvgh)wkw{6*vH-6a`m)L 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 Hf3N-@k}dWc literal 0 HcmV?d00001 diff --git a/tests/fixtures/mini-export/__uploads/T1/note.txt b/tests/fixtures/mini-export/__uploads/T1/note.txt new file mode 100644 index 0000000..0f0d8d7 --- /dev/null +++ b/tests/fixtures/mini-export/__uploads/T1/note.txt @@ -0,0 +1 @@ +fixture preview text \ No newline at end of file diff --git a/tests/fixtures/mini-export/channels.json b/tests/fixtures/mini-export/channels.json new file mode 100644 index 0000000..464719a --- /dev/null +++ b/tests/fixtures/mini-export/channels.json @@ -0,0 +1,68 @@ +[ + { + "id": "C0121TJUSUD", + "name": "zoey", + "created": 1587214815, + "creator": "U2HHNN1HQ", + "is_archived": false, + "is_general": false, + "members": [ + "U2HHNN1HQ", + "U2J30FCLW" + ], + "topic": { + "value": "", + "creator": "", + "last_set": 0 + }, + "purpose": { + "value": "", + "creator": "", + "last_set": 0 + } + }, + { + "id": "C2KPK5G8N", + "name": "153niagara", + "created": 1475689652, + "creator": "U2HHNN1HQ", + "is_archived": false, + "is_general": false, + "members": [ + "U2HHNN1HQ", + "U2J30FCLW" + ], + "topic": { + "value": "", + "creator": "", + "last_set": 0 + }, + "purpose": { + "value": "", + "creator": "", + "last_set": 0 + } + }, + { + "id": "C2KQHKAV8", + "name": "medical", + "created": 1475691337, + "creator": "U2HHNN1HQ", + "is_archived": false, + "is_general": false, + "members": [ + "U2HHNN1HQ", + "U2J30FCLW" + ], + "topic": { + "value": "", + "creator": "", + "last_set": 0 + }, + "purpose": { + "value": "", + "creator": "", + "last_set": 0 + } + } +] diff --git a/tests/fixtures/mini-export/medical/2016-10-05.json b/tests/fixtures/mini-export/medical/2016-10-05.json new file mode 100644 index 0000000..a11dc5d --- /dev/null +++ b/tests/fixtures/mini-export/medical/2016-10-05.json @@ -0,0 +1,17 @@ +[ + { + "subtype": "channel_join", + "user": "U2HHNN1HQ", + "text": "<@U2HHNN1HQ> has joined the channel", + "type": "message", + "ts": "1475691337.000002" + }, + { + "subtype": "channel_join", + "user": "U2J30FCLW", + "text": "<@U2J30FCLW> has joined the channel", + "inviter": "U2HHNN1HQ", + "type": "message", + "ts": "1475691337.000003" + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/medical/2016-10-10.json b/tests/fixtures/mini-export/medical/2016-10-10.json new file mode 100644 index 0000000..6febb39 --- /dev/null +++ b/tests/fixtures/mini-export/medical/2016-10-10.json @@ -0,0 +1,261 @@ +[ + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1476122672.000002", + "text": "subclinical hypothyroidism d\/t autoimmunity = hashimoto's thyroiditis.", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "xcov", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "subclinical hypothyroidism d\/t autoimmunity = hashimoto's thyroiditis." + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1476122755.000003", + "text": "alterations in thyroid functioning, in this case hypothyroidism manifest as reduced appetite, low energy, chronic infections (hello - persistent GI infections), weight loss, skin issues, CONSTIPATION, and literally all of my other symptoms", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "ME3ih", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "alterations in thyroid functioning, in this case hypothyroidism manifest as reduced appetite, low energy, chronic infections (hello - persistent GI infections), weight loss, skin issues, CONSTIPATION, and literally all of my other symptoms" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1476122785.000004", + "text": "So how do we fix it?", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "Ojdhx", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "So how do we fix it?" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1476122816.000005", + "text": "its a chicken and egg thing - dont know if the hashimoto's or the GI issues came first so need to fix both at same time", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "9+Oie", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "its a chicken and egg thing - dont know if the hashimoto's or the GI issues came first so need to fix both at same time" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1476122850.000006", + "text": "synthetic thyroid (already on it) and fixing leaky gut (may need to do new food sensitivity testing)", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "OlG", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "synthetic thyroid (already on it) and fixing leaky gut (may need to do new food sensitivity testing)" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1476122864.000007", + "text": "the synthroid may be too low a dose", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "+6S", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "the synthroid may be too low a dose" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1476122903.000008", + "text": "but we'll see", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "oZKHf", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "but we'll see" + } + ] + } + ] + } + ] + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/medical/2016-10-27.json b/tests/fixtures/mini-export/medical/2016-10-27.json new file mode 100644 index 0000000..ee239b9 --- /dev/null +++ b/tests/fixtures/mini-export/medical/2016-10-27.json @@ -0,0 +1,241 @@ +[ + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1477621049.000002", + "text": "", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "attachments": [ + { + "service_name": "Tweed", + "title": "OCEAN VIEW (Leafs by Snoop)", + "title_link": "https:\/\/www.tweed.com\/collections\/available\/products\/ocean-view-leafs-by-snoop", + "text": "THC: 15.7\/ CBD: <0.05 ↓Also of Note THC and CBD amounts listed for this strain have been tested by Tweed. This product has not been cold-pasteurized. To lear", + "fallback": "Tweed: OCEAN VIEW (Leafs by Snoop)", + "thumb_url": "http:\/\/cdn.shopify.com\/s\/files\/1\/0266\/0901\/products\/Untitled-4_grande.png?v=1477513626", + "thumb_width": 41, + "thumb_height": 40, + "fields": [ + { + "title": "Price", + "value": "From $9.60 CAD", + "short": true + }, + { + "title": "Brand", + "value": "Leafs by Snoop", + "short": true + } + ], + "from_url": "https:\/\/www.tweed.com\/collections\/available\/products\/ocean-view-leafs-by-snoop", + "service_icon": "http:\/\/cdn.shopify.com\/s\/files\/1\/0266\/0901\/t\/16\/assets\/favicon.png?17894041713191168692", + "id": 1 + } + ], + "blocks": [ + { + "type": "rich_text", + "block_id": "KpkG", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "link", + "url": "https:\/\/www.tweed.com\/collections\/available\/products\/ocean-view-leafs-by-snoop" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1477621066.000004", + "text": "nice", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "Il6oK", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "nice" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1477621108.000005", + "text": "", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "attachments": [ + { + "service_name": "Tweed", + "title": "PALM TREE CBD (Leafs By Snoop)", + "title_link": "https:\/\/www.tweed.com\/collections\/available\/products\/palm-tree-cbd-leafs-by-snoop", + "text": "THC: 8.71\/ CBD: 9.76 ↓Also of Note THC and CBD amounts listed for this strain have been tested by Tweed. This product has not been cold-pasteurized. To learn mo", + "fallback": "Tweed: PALM TREE CBD (Leafs By Snoop)", + "thumb_url": "http:\/\/cdn.shopify.com\/s\/files\/1\/0266\/0901\/products\/Untitled-44_grande.png?v=1477513710", + "thumb_width": 41, + "thumb_height": 40, + "fields": [ + { + "title": "Price", + "value": "From $7.20 CAD", + "short": true + }, + { + "title": "Brand", + "value": "Leafs by Snoop", + "short": true + } + ], + "from_url": "https:\/\/www.tweed.com\/collections\/available\/products\/palm-tree-cbd-leafs-by-snoop", + "service_icon": "http:\/\/cdn.shopify.com\/s\/files\/1\/0266\/0901\/t\/16\/assets\/favicon.png?17894041713191168692", + "id": 1 + } + ], + "blocks": [ + { + "type": "rich_text", + "block_id": "ueWRO", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "link", + "url": "https:\/\/www.tweed.com\/collections\/available\/products\/palm-tree-cbd-leafs-by-snoop" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1477621115.000007", + "text": "that one is similar to Devon", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "FwcA", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "that one is similar to Devon" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1477621164.000008", + "text": "the breakdown is a bit strange though - its supposedly focusing and sleepy at the same time", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "thl", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "the breakdown is a bit strange though - its supposedly focusing and sleepy at the same time" + } + ] + } + ] + } + ] + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/medical/2018-09-13.json b/tests/fixtures/mini-export/medical/2018-09-13.json new file mode 100644 index 0000000..2510f0a --- /dev/null +++ b/tests/fixtures/mini-export/medical/2018-09-13.json @@ -0,0 +1,84 @@ +[ + { + "text": "", + "files": [ + { + "id": "FCT24D5B7", + "created": 1536844410, + "timestamp": 1536844410, + "mimetype": "application\/pdf", + "filetype": "pdf", + "pretty_type": "PDF", + "user": "U2HHNN1HQ", + "user_team": "T2HHNN1FU", + "editable": false, + "size": 8190867, + "mode": "hosted", + "is_external": false, + "external_type": "", + "is_public": true, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "name": "img20180913_09120499.pdf", + "title": "img20180913_09120499.pdf", + "is_modified_by_ai": false, + "url_private": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-FCT24D5B7\/img20180913_09120499.pdf?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "url_private_download": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-FCT24D5B7\/download\/img20180913_09120499.pdf?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "media_display_type": "unknown", + "thumb_pdf": "https:\/\/files.slack.com\/files-tmb\/T2HHNN1FU-FCT24D5B7-45e94cde7b\/img20180913_09120499_thumb_pdf.png?t=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "thumb_pdf_w": 930, + "thumb_pdf_h": 1196, + "permalink": "https:\/\/levkine.slack.com\/files\/U2HHNN1HQ\/FCT24D5B7\/img20180913_09120499.pdf", + "permalink_public": "https:\/\/slack-files.com\/T2HHNN1FU-FCT24D5B7-e76617f641", + "is_starred": false, + "skipped_shares": true, + "has_rich_preview": false, + "file_access": "visible" + } + ], + "upload": true, + "user": "U2HHNN1HQ", + "display_as_bot": false, + "type": "message", + "ts": "1536844412.000100" + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1536844629.000100", + "client_msg_id": "a0e588b0-0bf3-442a-bf02-edfbea2bec31", + "text": "Can you email so I can forward? ", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "Bv=9", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Can you email so I can forward?" + } + ] + } + ] + } + ] + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/users.json b/tests/fixtures/mini-export/users.json new file mode 100644 index 0000000..b7a84ff --- /dev/null +++ b/tests/fixtures/mini-export/users.json @@ -0,0 +1,933 @@ +[ + { + "id": "U2HHNN1HQ", + "team_id": "T2HHNN1FU", + "name": "jedi_jew", + "deleted": false, + "color": "9f69e7", + "real_name": "Ilia Dobkin", + "tz": "America/New_York", + "tz_label": "Eastern Daylight Time", + "tz_offset": -14400, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Ilia Dobkin", + "real_name_normalized": "Ilia Dobkin", + "display_name": "Ilia", + "display_name_normalized": "Ilia", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "gde41167d309", + "huddle_state": "default_unset", + "huddle_state_expiration_ts": 0, + "first_name": "Ilia", + "last_name": "Dobkin", + "image_24": "https://secure.gravatar.com/avatar/ede41167d309b977e5c67645d9a1a699.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png", + "image_32": "https://secure.gravatar.com/avatar/ede41167d309b977e5c67645d9a1a699.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png", + "image_48": "https://secure.gravatar.com/avatar/ede41167d309b977e5c67645d9a1a699.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png", + "image_72": "https://secure.gravatar.com/avatar/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "image_192": "https://secure.gravatar.com/avatar/ede41167d309b977e5c67645d9a1a699.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png", + "image_512": "https://secure.gravatar.com/avatar/ede41167d309b977e5c67645d9a1a699.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_admin": true, + "is_owner": true, + "is_primary_owner": true, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1747338096, + "is_email_confirmed": true, + "who_can_share_contact_card": "EVERYONE" + }, + { + "id": "U2J30FCLW", + "team_id": "T2HHNN1FU", + "name": "ira_feeds", + "deleted": false, + "color": "4bbe2e", + "real_name": "Irina", + "tz": "America/New_York", + "tz_label": "Eastern Daylight Time", + "tz_offset": -14400, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Irina", + "real_name_normalized": "Irina", + "display_name": "ira_feeds", + "display_name_normalized": "ira_feeds", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "gc49a37283df", + "first_name": "Irina", + "last_name": "", + "image_24": "https://secure.gravatar.com/avatar/bc49a37283dfa139af6916bb32030146.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-24.png", + "image_32": "https://secure.gravatar.com/avatar/bc49a37283dfa139af6916bb32030146.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-32.png", + "image_48": "https://secure.gravatar.com/avatar/bc49a37283dfa139af6916bb32030146.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-48.png", + "image_72": "https://secure.gravatar.com/avatar/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "image_192": "https://secure.gravatar.com/avatar/bc49a37283dfa139af6916bb32030146.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-192.png", + "image_512": "https://secure.gravatar.com/avatar/bc49a37283dfa139af6916bb32030146.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-512.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_admin": true, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1626449137, + "is_email_confirmed": true, + "who_can_share_contact_card": "EVERYONE" + }, + { + "id": "U2KQS74Q0", + "team_id": "T2HHNN1FU", + "name": "humblebot", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Humblebot", + "real_name_normalized": "Humblebot", + "display_name": "humblebot", + "display_name_normalized": "humblebot", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "b11cb3deda79", + "api_app_id": "A0H11TLMD", + "image_original": "https://avatars.slack-edge.com/2016-10-05/87859422434_b11cb3deda792d278311_original.png", + "is_custom_image": true, + "bot_id": "B2KR3BLG1", + "first_name": "Humblebot", + "image_24": "https://avatars.slack-edge.com/2016-10-05/87859422434_b11cb3deda792d278311_24.png", + "image_32": "https://avatars.slack-edge.com/2016-10-05/87859422434_b11cb3deda792d278311_32.png", + "image_48": "https://avatars.slack-edge.com/2016-10-05/87859422434_b11cb3deda792d278311_48.png", + "image_72": "https://avatars.slack-edge.com/2016-10-05/87859422434_b11cb3deda792d278311_72.png", + "image_192": "https://avatars.slack-edge.com/2016-10-05/87859422434_b11cb3deda792d278311_192.png", + "image_512": "https://avatars.slack-edge.com/2016-10-05/87859422434_b11cb3deda792d278311_512.png", + "image_1024": "https://avatars.slack-edge.com/2016-10-05/87859422434_b11cb3deda792d278311_512.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1742354811 + }, + { + "id": "U3WCAAHV4", + "team_id": "T2HHNN1FU", + "name": "deactivateduser196138", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Deactivated User", + "real_name_normalized": "Deactivated User", + "display_name": "deactivateduser", + "display_name_normalized": "deactivateduser", + "fields": null, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "g849cc56ed76", + "huddle_state": "default_unset", + "first_name": "Deactivated", + "last_name": "User", + "image_24": "https://secure.gravatar.com/avatar/512b06e3a7177de41d7c382e05055887.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-24.png", + "image_32": "https://secure.gravatar.com/avatar/512b06e3a7177de41d7c382e05055887.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-32.png", + "image_48": "https://secure.gravatar.com/avatar/512b06e3a7177de41d7c382e05055887.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-48.png", + "image_72": "https://secure.gravatar.com/avatar/512b06e3a7177de41d7c382e05055887.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-72.png", + "image_192": "https://secure.gravatar.com/avatar/512b06e3a7177de41d7c382e05055887.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-192.png", + "image_512": "https://secure.gravatar.com/avatar/512b06e3a7177de41d7c382e05055887.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-512.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": false, + "is_app_user": false, + "updated": 1748398757, + "is_forgotten": true + }, + { + "id": "UPE67TA20", + "team_id": "T2HHNN1FU", + "name": "google_calendar", + "deleted": false, + "color": "df3dc0", + "real_name": "Google Calendar", + "tz": "America/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Google Calendar", + "real_name_normalized": "Google Calendar", + "display_name": "", + "display_name_normalized": "", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "379b3e470f6f", + "api_app_id": "ADZ494LHY", + "always_active": true, + "image_original": "https://avatars.slack-edge.com/2026-02-18/10537829174518_379b3e470f6fb8f55e0d_original.png", + "is_custom_image": true, + "bot_id": "BPE67T9PW", + "image_24": "https://avatars.slack-edge.com/2026-02-18/10537829174518_379b3e470f6fb8f55e0d_24.png", + "image_32": "https://avatars.slack-edge.com/2026-02-18/10537829174518_379b3e470f6fb8f55e0d_32.png", + "image_48": "https://avatars.slack-edge.com/2026-02-18/10537829174518_379b3e470f6fb8f55e0d_48.png", + "image_72": "https://avatars.slack-edge.com/2026-02-18/10537829174518_379b3e470f6fb8f55e0d_72.png", + "image_192": "https://avatars.slack-edge.com/2026-02-18/10537829174518_379b3e470f6fb8f55e0d_192.png", + "image_512": "https://avatars.slack-edge.com/2026-02-18/10537829174518_379b3e470f6fb8f55e0d_512.png", + "image_1024": "https://avatars.slack-edge.com/2026-02-18/10537829174518_379b3e470f6fb8f55e0d_1024.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1771487052, + "is_email_confirmed": false, + "who_can_share_contact_card": "EVERYONE" + }, + { + "id": "U06GCU7DDHU", + "team_id": "T2HHNN1FU", + "name": "aiintern", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "AI Intern", + "real_name_normalized": "AI Intern", + "display_name": "", + "display_name_normalized": "", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "7eedd5bf639b", + "api_app_id": "A04KKT0TQ2W", + "always_active": true, + "image_original": "https://avatars.slack-edge.com/2024-01-31/6576243776113_7eedd5bf639b86048f0c_original.jpg", + "is_custom_image": true, + "bot_id": "B06H8B5JHR6", + "first_name": "AI", + "last_name": "Intern", + "image_24": "https://avatars.slack-edge.com/2024-01-31/6576243776113_7eedd5bf639b86048f0c_24.jpg", + "image_32": "https://avatars.slack-edge.com/2024-01-31/6576243776113_7eedd5bf639b86048f0c_32.jpg", + "image_48": "https://avatars.slack-edge.com/2024-01-31/6576243776113_7eedd5bf639b86048f0c_48.jpg", + "image_72": "https://avatars.slack-edge.com/2024-01-31/6576243776113_7eedd5bf639b86048f0c_72.jpg", + "image_192": "https://avatars.slack-edge.com/2024-01-31/6576243776113_7eedd5bf639b86048f0c_192.jpg", + "image_512": "https://avatars.slack-edge.com/2024-01-31/6576243776113_7eedd5bf639b86048f0c_512.jpg", + "image_1024": "https://avatars.slack-edge.com/2024-01-31/6576243776113_7eedd5bf639b86048f0c_1024.jpg", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1742354804 + }, + { + "id": "U08JDB604N6", + "team_id": "T2HHNN1FU", + "name": "mural-bot", + "deleted": false, + "color": "e85d72", + "real_name": "MURAL", + "tz": "America/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "MURAL", + "real_name_normalized": "MURAL", + "display_name": "", + "display_name_normalized": "", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "e36bc8361c8f", + "api_app_id": "A4LV0TKR9", + "always_active": true, + "image_original": "https://avatars.slack-edge.com/2025-03-18/8645220738464_e36bc8361c8f486870cf_original.jpg", + "is_custom_image": true, + "bot_id": "B08JDB604LS", + "first_name": "MURAL", + "last_name": "", + "image_24": "https://avatars.slack-edge.com/2025-03-18/8645220738464_e36bc8361c8f486870cf_24.jpg", + "image_32": "https://avatars.slack-edge.com/2025-03-18/8645220738464_e36bc8361c8f486870cf_32.jpg", + "image_48": "https://avatars.slack-edge.com/2025-03-18/8645220738464_e36bc8361c8f486870cf_48.jpg", + "image_72": "https://avatars.slack-edge.com/2025-03-18/8645220738464_e36bc8361c8f486870cf_72.jpg", + "image_192": "https://avatars.slack-edge.com/2025-03-18/8645220738464_e36bc8361c8f486870cf_192.jpg", + "image_512": "https://avatars.slack-edge.com/2025-03-18/8645220738464_e36bc8361c8f486870cf_512.jpg", + "image_1024": "https://avatars.slack-edge.com/2025-03-18/8645220738464_e36bc8361c8f486870cf_1024.jpg", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1742354230, + "is_email_confirmed": false, + "who_can_share_contact_card": "EVERYONE" + }, + { + "id": "U2KQP4VUZ", + "team_id": "T2HHNN1FU", + "name": "meekan", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Meekan Scheduling", + "real_name_normalized": "Meekan Scheduling", + "display_name": "meekan", + "display_name_normalized": "meekan", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "7d4b8d227280", + "api_app_id": "A0G51AT60", + "image_original": "https://avatars.slack-edge.com/2017-11-27/278874366151_7d4b8d227280e8130276_original.png", + "is_custom_image": true, + "bot_id": "B2KQCB85C", + "first_name": "Meekan", + "last_name": "Scheduling", + "image_24": "https://avatars.slack-edge.com/2017-11-27/278874366151_7d4b8d227280e8130276_24.png", + "image_32": "https://avatars.slack-edge.com/2017-11-27/278874366151_7d4b8d227280e8130276_32.png", + "image_48": "https://avatars.slack-edge.com/2017-11-27/278874366151_7d4b8d227280e8130276_48.png", + "image_72": "https://avatars.slack-edge.com/2017-11-27/278874366151_7d4b8d227280e8130276_72.png", + "image_192": "https://avatars.slack-edge.com/2017-11-27/278874366151_7d4b8d227280e8130276_192.png", + "image_512": "https://avatars.slack-edge.com/2017-11-27/278874366151_7d4b8d227280e8130276_512.png", + "image_1024": "https://avatars.slack-edge.com/2017-11-27/278874366151_7d4b8d227280e8130276_1024.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1742354835 + }, + { + "id": "U2KR6LA3B", + "team_id": "T2HHNN1FU", + "name": "howdy", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Howdy", + "real_name_normalized": "Howdy", + "display_name": "howdy", + "display_name_normalized": "howdy", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "26e5aa1363cf", + "api_app_id": "A09RDP4AW", + "image_original": "https://avatars.slack-edge.com/2016-10-05/87845548640_26e5aa1363cf295e9a90_original.png", + "is_custom_image": true, + "bot_id": "B2KQVTFUN", + "first_name": "Howdy", + "image_24": "https://avatars.slack-edge.com/2016-10-05/87845548640_26e5aa1363cf295e9a90_24.png", + "image_32": "https://avatars.slack-edge.com/2016-10-05/87845548640_26e5aa1363cf295e9a90_32.png", + "image_48": "https://avatars.slack-edge.com/2016-10-05/87845548640_26e5aa1363cf295e9a90_48.png", + "image_72": "https://avatars.slack-edge.com/2016-10-05/87845548640_26e5aa1363cf295e9a90_72.png", + "image_192": "https://avatars.slack-edge.com/2016-10-05/87845548640_26e5aa1363cf295e9a90_192.png", + "image_512": "https://avatars.slack-edge.com/2016-10-05/87845548640_26e5aa1363cf295e9a90_512.png", + "image_1024": "https://avatars.slack-edge.com/2016-10-05/87845548640_26e5aa1363cf295e9a90_1024.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1504348811 + }, + { + "id": "U35CW23UZ", + "team_id": "T2HHNN1FU", + "name": "leo_officevibe_bot", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Leo (Officevibe Bot)", + "real_name_normalized": "Leo (Officevibe Bot)", + "display_name": "leo_officevibe_bot", + "display_name_normalized": "leo_officevibe_bot", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "65c14a601f21", + "api_app_id": "A0GU27WR1", + "always_active": false, + "image_original": "https://avatars.slack-edge.com/2016-11-22/108800284919_65c14a601f2106b2af3b_original.png", + "is_custom_image": true, + "bot_id": "B35BYVB7A", + "first_name": "Leo (Officevibe Bot)", + "image_24": "https://avatars.slack-edge.com/2016-11-22/108800284919_65c14a601f2106b2af3b_24.png", + "image_32": "https://avatars.slack-edge.com/2016-11-22/108800284919_65c14a601f2106b2af3b_32.png", + "image_48": "https://avatars.slack-edge.com/2016-11-22/108800284919_65c14a601f2106b2af3b_48.png", + "image_72": "https://avatars.slack-edge.com/2016-11-22/108800284919_65c14a601f2106b2af3b_72.png", + "image_192": "https://avatars.slack-edge.com/2016-11-22/108800284919_65c14a601f2106b2af3b_192.png", + "image_512": "https://avatars.slack-edge.com/2016-11-22/108800284919_65c14a601f2106b2af3b_512.png", + "image_1024": "https://avatars.slack-edge.com/2016-11-22/108800284919_65c14a601f2106b2af3b_512.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1504349194 + }, + { + "id": "U3660DH2R", + "team_id": "T2HHNN1FU", + "name": "jewbot", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "jewbot", + "real_name_normalized": "jewbot", + "display_name": "", + "display_name_normalized": "", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "7ab64cd294c2", + "api_app_id": "", + "always_active": false, + "image_original": "https://avatars.slack-edge.com/2016-11-22/108792815526_7ab64cd294c2adc03cc4_original.png", + "is_custom_image": true, + "bot_id": "B365PU67N", + "image_24": "https://avatars.slack-edge.com/2016-11-22/108792815526_7ab64cd294c2adc03cc4_24.png", + "image_32": "https://avatars.slack-edge.com/2016-11-22/108792815526_7ab64cd294c2adc03cc4_32.png", + "image_48": "https://avatars.slack-edge.com/2016-11-22/108792815526_7ab64cd294c2adc03cc4_48.png", + "image_72": "https://avatars.slack-edge.com/2016-11-22/108792815526_7ab64cd294c2adc03cc4_72.png", + "image_192": "https://avatars.slack-edge.com/2016-11-22/108792815526_7ab64cd294c2adc03cc4_192.png", + "image_512": "https://avatars.slack-edge.com/2016-11-22/108792815526_7ab64cd294c2adc03cc4_512.png", + "image_1024": "https://avatars.slack-edge.com/2016-11-22/108792815526_7ab64cd294c2adc03cc4_512.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1742354829 + }, + { + "id": "UBMJ5M7CZ", + "team_id": "T2HHNN1FU", + "name": "googledrive", + "deleted": false, + "color": "5b89d5", + "real_name": "Google Drive", + "tz": "America/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Google Drive", + "real_name_normalized": "Google Drive", + "display_name": "", + "display_name_normalized": "", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "a74495570a68", + "api_app_id": "A6NL8MJ6Q", + "always_active": true, + "image_original": "https://avatars.slack-edge.com/2020-10-15/1438649512884_a74495570a688b6aa1b5_original.png", + "is_custom_image": true, + "bot_id": "BBMT728UU", + "first_name": "Google", + "last_name": "Drive", + "image_24": "https://avatars.slack-edge.com/2020-10-15/1438649512884_a74495570a688b6aa1b5_24.png", + "image_32": "https://avatars.slack-edge.com/2020-10-15/1438649512884_a74495570a688b6aa1b5_32.png", + "image_48": "https://avatars.slack-edge.com/2020-10-15/1438649512884_a74495570a688b6aa1b5_48.png", + "image_72": "https://avatars.slack-edge.com/2020-10-15/1438649512884_a74495570a688b6aa1b5_72.png", + "image_192": "https://avatars.slack-edge.com/2020-10-15/1438649512884_a74495570a688b6aa1b5_192.png", + "image_512": "https://avatars.slack-edge.com/2020-10-15/1438649512884_a74495570a688b6aa1b5_512.png", + "image_1024": "https://avatars.slack-edge.com/2020-10-15/1438649512884_a74495570a688b6aa1b5_1024.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1602813021, + "is_email_confirmed": false, + "who_can_share_contact_card": "EVERYONE" + }, + { + "id": "ULBNL5U3X", + "team_id": "T2HHNN1FU", + "name": "deactivateduser536011", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Deactivated User", + "real_name_normalized": "Deactivated User", + "display_name": "deactivateduser", + "display_name_normalized": "deactivateduser", + "fields": null, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "g849cc56ed76", + "huddle_state": "default_unset", + "first_name": "Deactivated", + "last_name": "User", + "image_24": "https://secure.gravatar.com/avatar/6964489e1811fcd5a8604d2ec7c72abf.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png", + "image_32": "https://secure.gravatar.com/avatar/6964489e1811fcd5a8604d2ec7c72abf.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png", + "image_48": "https://secure.gravatar.com/avatar/6964489e1811fcd5a8604d2ec7c72abf.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png", + "image_72": "https://secure.gravatar.com/avatar/6964489e1811fcd5a8604d2ec7c72abf.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png", + "image_192": "https://secure.gravatar.com/avatar/6964489e1811fcd5a8604d2ec7c72abf.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png", + "image_512": "https://secure.gravatar.com/avatar/6964489e1811fcd5a8604d2ec7c72abf.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": false, + "is_app_user": false, + "updated": 1748398744, + "is_forgotten": true + }, + { + "id": "UP862QZ2M", + "team_id": "T2HHNN1FU", + "name": "deactivateduser867192", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Deactivated User", + "real_name_normalized": "Deactivated User", + "display_name": "deactivateduser", + "display_name_normalized": "deactivateduser", + "fields": null, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "g849cc56ed76", + "huddle_state": "default_unset", + "first_name": "Deactivated", + "last_name": "User", + "image_24": "https://secure.gravatar.com/avatar/51ac16be6dc728a09d4f2b3b0833f0ec.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0020-24.png", + "image_32": "https://secure.gravatar.com/avatar/51ac16be6dc728a09d4f2b3b0833f0ec.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0020-32.png", + "image_48": "https://secure.gravatar.com/avatar/51ac16be6dc728a09d4f2b3b0833f0ec.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0020-48.png", + "image_72": "https://secure.gravatar.com/avatar/51ac16be6dc728a09d4f2b3b0833f0ec.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0020-72.png", + "image_192": "https://secure.gravatar.com/avatar/51ac16be6dc728a09d4f2b3b0833f0ec.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0020-192.png", + "image_512": "https://secure.gravatar.com/avatar/51ac16be6dc728a09d4f2b3b0833f0ec.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0020-512.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": false, + "is_app_user": false, + "updated": 1748398741, + "is_forgotten": true + }, + { + "id": "UP8BUNWAV", + "team_id": "T2HHNN1FU", + "name": "deactivateduser876224", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Deactivated User", + "real_name_normalized": "Deactivated User", + "display_name": "deactivateduser", + "display_name_normalized": "deactivateduser", + "fields": null, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "g849cc56ed76", + "huddle_state": "default_unset", + "first_name": "Deactivated", + "last_name": "User", + "image_24": "https://secure.gravatar.com/avatar/35499da5ddf5214ad21f33c672280a42.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0013-24.png", + "image_32": "https://secure.gravatar.com/avatar/35499da5ddf5214ad21f33c672280a42.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0013-32.png", + "image_48": "https://secure.gravatar.com/avatar/35499da5ddf5214ad21f33c672280a42.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0013-48.png", + "image_72": "https://secure.gravatar.com/avatar/35499da5ddf5214ad21f33c672280a42.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0013-72.png", + "image_192": "https://secure.gravatar.com/avatar/35499da5ddf5214ad21f33c672280a42.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0013-192.png", + "image_512": "https://secure.gravatar.com/avatar/35499da5ddf5214ad21f33c672280a42.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0013-512.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": false, + "is_app_user": false, + "updated": 1748398749, + "is_forgotten": true + }, + { + "id": "UQF26AT1R", + "team_id": "T2HHNN1FU", + "name": "deactivateduser911684", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Deactivated User", + "real_name_normalized": "Deactivated User", + "display_name": "deactivateduser", + "display_name_normalized": "deactivateduser", + "fields": null, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "g849cc56ed76", + "huddle_state": "default_unset", + "first_name": "Deactivated", + "last_name": "User", + "image_24": "https://secure.gravatar.com/avatar/a2c76eb32226f873bb3ab77542778325.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0021-24.png", + "image_32": "https://secure.gravatar.com/avatar/a2c76eb32226f873bb3ab77542778325.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0021-32.png", + "image_48": "https://secure.gravatar.com/avatar/a2c76eb32226f873bb3ab77542778325.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0021-48.png", + "image_72": "https://secure.gravatar.com/avatar/a2c76eb32226f873bb3ab77542778325.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0021-72.png", + "image_192": "https://secure.gravatar.com/avatar/a2c76eb32226f873bb3ab77542778325.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0021-192.png", + "image_512": "https://secure.gravatar.com/avatar/a2c76eb32226f873bb3ab77542778325.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0021-512.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": false, + "is_app_user": false, + "updated": 1748398765, + "is_forgotten": true + }, + { + "id": "U04ARJ3A7LM", + "team_id": "T2HHNN1FU", + "name": "asana", + "deleted": false, + "color": "d58247", + "real_name": "Asana", + "tz": "America/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Asana", + "real_name_normalized": "Asana", + "display_name": "", + "display_name_normalized": "", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "3b8995f549dc", + "api_app_id": "A01734836JY", + "always_active": true, + "image_original": "https://avatars.slack-edge.com/2024-09-14/7727304057861_3b8995f549dc5f9ca5f6_original.png", + "is_custom_image": true, + "bot_id": "B04AUGF0ZUJ", + "first_name": "Asana", + "last_name": "", + "image_24": "https://avatars.slack-edge.com/2024-09-14/7727304057861_3b8995f549dc5f9ca5f6_24.png", + "image_32": "https://avatars.slack-edge.com/2024-09-14/7727304057861_3b8995f549dc5f9ca5f6_32.png", + "image_48": "https://avatars.slack-edge.com/2024-09-14/7727304057861_3b8995f549dc5f9ca5f6_48.png", + "image_72": "https://avatars.slack-edge.com/2024-09-14/7727304057861_3b8995f549dc5f9ca5f6_72.png", + "image_192": "https://avatars.slack-edge.com/2024-09-14/7727304057861_3b8995f549dc5f9ca5f6_192.png", + "image_512": "https://avatars.slack-edge.com/2024-09-14/7727304057861_3b8995f549dc5f9ca5f6_512.png", + "image_1024": "https://avatars.slack-edge.com/2024-09-14/7727304057861_3b8995f549dc5f9ca5f6_1024.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1726350133, + "is_email_confirmed": false, + "who_can_share_contact_card": "EVERYONE" + }, + { + "id": "U08HX1HNW31", + "team_id": "T2HHNN1FU", + "name": "otter", + "deleted": false, + "color": "827327", + "real_name": "Otter.ai", + "tz": "America/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Otter.ai", + "real_name_normalized": "Otter.ai", + "display_name": "", + "display_name_normalized": "", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "c1628076c3b3", + "api_app_id": "A04ULDS8UFN", + "always_active": true, + "image_original": "https://avatars.slack-edge.com/2025-03-18/8633921706705_c1628076c3b3d6440777_original.png", + "is_custom_image": true, + "bot_id": "B08HX1HNPST", + "first_name": "Otter.ai", + "last_name": "", + "image_24": "https://avatars.slack-edge.com/2025-03-18/8633921706705_c1628076c3b3d6440777_24.png", + "image_32": "https://avatars.slack-edge.com/2025-03-18/8633921706705_c1628076c3b3d6440777_32.png", + "image_48": "https://avatars.slack-edge.com/2025-03-18/8633921706705_c1628076c3b3d6440777_48.png", + "image_72": "https://avatars.slack-edge.com/2025-03-18/8633921706705_c1628076c3b3d6440777_72.png", + "image_192": "https://avatars.slack-edge.com/2025-03-18/8633921706705_c1628076c3b3d6440777_192.png", + "image_512": "https://avatars.slack-edge.com/2025-03-18/8633921706705_c1628076c3b3d6440777_512.png", + "image_1024": "https://avatars.slack-edge.com/2025-03-18/8633921706705_c1628076c3b3d6440777_1024.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1742353383, + "is_email_confirmed": false, + "who_can_share_contact_card": "EVERYONE" + }, + { + "id": "U08JDP2SQRZ", + "team_id": "T2HHNN1FU", + "name": "miro", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Miro", + "real_name_normalized": "Miro", + "display_name": "", + "display_name_normalized": "", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "c8beb7d87ed3", + "api_app_id": "A8VK125AS", + "always_active": true, + "image_original": "https://avatars.slack-edge.com/2025-03-18/8645198828528_c8beb7d87ed3cae76b84_original.png", + "is_custom_image": true, + "bot_id": "B08JDP2SDFD", + "first_name": "Miro", + "last_name": "", + "image_24": "https://avatars.slack-edge.com/2025-03-18/8645198828528_c8beb7d87ed3cae76b84_24.png", + "image_32": "https://avatars.slack-edge.com/2025-03-18/8645198828528_c8beb7d87ed3cae76b84_32.png", + "image_48": "https://avatars.slack-edge.com/2025-03-18/8645198828528_c8beb7d87ed3cae76b84_48.png", + "image_72": "https://avatars.slack-edge.com/2025-03-18/8645198828528_c8beb7d87ed3cae76b84_72.png", + "image_192": "https://avatars.slack-edge.com/2025-03-18/8645198828528_c8beb7d87ed3cae76b84_192.png", + "image_512": "https://avatars.slack-edge.com/2025-03-18/8645198828528_c8beb7d87ed3cae76b84_512.png", + "image_1024": "https://avatars.slack-edge.com/2025-03-18/8645198828528_c8beb7d87ed3cae76b84_1024.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1772212905 + }, + { + "id": "U08SZSAHH5F", + "team_id": "T2HHNN1FU", + "name": "wf_bot_a08szs6b62v", + "deleted": false, + "color": "902d59", + "real_name": "Item status notification", + "tz": "America/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Item status notification", + "real_name_normalized": "Item status notification", + "display_name": "", + "display_name_normalized": "", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "85aa14fc1250", + "api_app_id": "A08SZS6B62V", + "always_active": true, + "image_original": "https://avatars.slack-edge.com/2025-05-15/8906772541186_85aa14fc1250307356f0_original.png", + "is_custom_image": true, + "bot_id": "B08SZSAHERF", + "first_name": "Item", + "last_name": "status notification", + "image_24": "https://avatars.slack-edge.com/2025-05-15/8906772541186_85aa14fc1250307356f0_24.png", + "image_32": "https://avatars.slack-edge.com/2025-05-15/8906772541186_85aa14fc1250307356f0_32.png", + "image_48": "https://avatars.slack-edge.com/2025-05-15/8906772541186_85aa14fc1250307356f0_48.png", + "image_72": "https://avatars.slack-edge.com/2025-05-15/8906772541186_85aa14fc1250307356f0_72.png", + "image_192": "https://avatars.slack-edge.com/2025-05-15/8906772541186_85aa14fc1250307356f0_192.png", + "image_512": "https://avatars.slack-edge.com/2025-05-15/8906772541186_85aa14fc1250307356f0_512.png", + "image_1024": "https://avatars.slack-edge.com/2025-05-15/8906772541186_85aa14fc1250307356f0_1024.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1747337592, + "is_email_confirmed": false, + "who_can_share_contact_card": "EVERYONE", + "is_workflow_bot": true + }, + { + "id": "U08SZSC6VH7", + "team_id": "T2HHNN1FU", + "name": "wf_bot_a08szs62zgr", + "deleted": false, + "color": "bd9336", + "real_name": "Welcome message", + "tz": "America/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Welcome message", + "real_name_normalized": "Welcome message", + "display_name": "", + "display_name_normalized": "", + "fields": {}, + "status_text": "", + "status_emoji": "", + "status_emoji_display_info": [], + "status_expiration": 0, + "status_clear_on_focus_end": false, + "avatar_hash": "ab5acb82d517", + "api_app_id": "A08SZS62ZGR", + "always_active": true, + "image_original": "https://avatars.slack-edge.com/2025-05-15/8927514171840_ab5acb82d5173fa35a95_original.png", + "is_custom_image": true, + "bot_id": "B08SZSC2V7T", + "first_name": "Welcome", + "last_name": "message", + "image_24": "https://avatars.slack-edge.com/2025-05-15/8927514171840_ab5acb82d5173fa35a95_24.png", + "image_32": "https://avatars.slack-edge.com/2025-05-15/8927514171840_ab5acb82d5173fa35a95_32.png", + "image_48": "https://avatars.slack-edge.com/2025-05-15/8927514171840_ab5acb82d5173fa35a95_48.png", + "image_72": "https://avatars.slack-edge.com/2025-05-15/8927514171840_ab5acb82d5173fa35a95_72.png", + "image_192": "https://avatars.slack-edge.com/2025-05-15/8927514171840_ab5acb82d5173fa35a95_192.png", + "image_512": "https://avatars.slack-edge.com/2025-05-15/8927514171840_ab5acb82d5173fa35a95_512.png", + "image_1024": "https://avatars.slack-edge.com/2025-05-15/8927514171840_ab5acb82d5173fa35a95_1024.png", + "status_text_canonical": "", + "team": "T2HHNN1FU" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1747337594, + "is_email_confirmed": false, + "who_can_share_contact_card": "EVERYONE", + "is_workflow_bot": true + } +] diff --git a/tests/fixtures/mini-export/zoey/2020-04-18.json b/tests/fixtures/mini-export/zoey/2020-04-18.json new file mode 100644 index 0000000..1f1cb0e --- /dev/null +++ b/tests/fixtures/mini-export/zoey/2020-04-18.json @@ -0,0 +1,159 @@ +[ + { + "subtype": "channel_join", + "user": "U2HHNN1HQ", + "text": "<@U2HHNN1HQ> has joined the channel", + "type": "message", + "ts": "1587214815.000200" + }, + { + "subtype": "channel_join", + "user": "U2J30FCLW", + "text": "<@U2J30FCLW> has joined the channel", + "inviter": "U2HHNN1HQ", + "type": "message", + "ts": "1587214815.000400" + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1587214908.000600", + "client_msg_id": "7719b88e-a403-427f-8cd1-2665e5f6d342", + "text": "baby!", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "7Zca", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "baby!" + } + ] + } + ] + } + ] + }, + { + "text": "", + "files": [ + { + "id": "F011NH76RUP", + "created": 1587214950, + "timestamp": 1587214950, + "mimetype": "image\/jpeg", + "filetype": "jpg", + "pretty_type": "JPEG", + "user": "U2HHNN1HQ", + "user_team": "T2HHNN1FU", + "editable": false, + "size": 391288, + "mode": "hosted", + "is_external": false, + "external_type": "", + "is_public": true, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "name": "IMG_20200418_090219.jpg", + "title": "IMG_20200418_090219.jpg", + "is_modified_by_ai": false, + "url_private": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F011NH76RUP\/img_20200418_090219.jpg?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "url_private_download": "https:\/\/files.slack.com\/files-pri\/T2HHNN1FU-F011NH76RUP\/download\/img_20200418_090219.jpg?token=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "media_display_type": "unknown", + "thumb_64": "https:\/\/files.slack.com\/files-tmb\/T2HHNN1FU-F011NH76RUP-165eb608df\/img_20200418_090219_64.jpg?t=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "thumb_80": "https:\/\/files.slack.com\/files-tmb\/T2HHNN1FU-F011NH76RUP-165eb608df\/img_20200418_090219_80.jpg?t=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "thumb_360": "https:\/\/files.slack.com\/files-tmb\/T2HHNN1FU-F011NH76RUP-165eb608df\/img_20200418_090219_360.jpg?t=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "thumb_360_w": 360, + "thumb_360_h": 270, + "thumb_480": "https:\/\/files.slack.com\/files-tmb\/T2HHNN1FU-F011NH76RUP-165eb608df\/img_20200418_090219_480.jpg?t=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "thumb_480_w": 480, + "thumb_480_h": 360, + "thumb_160": "https:\/\/files.slack.com\/files-tmb\/T2HHNN1FU-F011NH76RUP-165eb608df\/img_20200418_090219_160.jpg?t=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "thumb_720": "https:\/\/files.slack.com\/files-tmb\/T2HHNN1FU-F011NH76RUP-165eb608df\/img_20200418_090219_720.jpg?t=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "thumb_720_w": 720, + "thumb_720_h": 540, + "thumb_800": "https:\/\/files.slack.com\/files-tmb\/T2HHNN1FU-F011NH76RUP-165eb608df\/img_20200418_090219_800.jpg?t=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "thumb_800_w": 800, + "thumb_800_h": 600, + "thumb_960": "https:\/\/files.slack.com\/files-tmb\/T2HHNN1FU-F011NH76RUP-165eb608df\/img_20200418_090219_960.jpg?t=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "thumb_960_w": 960, + "thumb_960_h": 720, + "thumb_1024": "https:\/\/files.slack.com\/files-tmb\/T2HHNN1FU-F011NH76RUP-165eb608df\/img_20200418_090219_1024.jpg?t=xoxe-85600749538-11214969224067-11215699816469-13b604e355c6cb0f8b9d8a5c2dd39dd1", + "thumb_1024_w": 1024, + "thumb_1024_h": 768, + "original_w": 4032, + "original_h": 3024, + "thumb_tiny": "AwAkADB\/2iQHq1NN1J\/eNRc5IzjPWnBMrnt70APN1IB1bPuKb9sl\/vfpUZJBG75h6U824ZC8bZHv2oAX7bID1B\/Ck+3t6A1W2MzYA5p0qqE+VcEdTnNAEy\/M2B1NSIwCsAMt2BqOIAygE4q35KleRye9AFMBnJ4AHfFOWQ7QqgADnnvU5tyF4Vfriq8YO4gk8dPagCxGpCkkAs5zkCoZYgEYZ59KnaZVQAbmIqpMXZST8q+lAAn+tX61dclQCO9Uk\/1q\/Wrkv3FoAiaVwfvVCGJc5wfwpzdajH3jQAssrghQcD24qu0jH0\/KpJvvfhUNAH\/\/2Q==", + "permalink": "https:\/\/levkine.slack.com\/files\/U2HHNN1HQ\/F011NH76RUP\/img_20200418_090219.jpg", + "permalink_public": "https:\/\/slack-files.com\/T2HHNN1FU-F011NH76RUP-993ff9b75a", + "is_starred": false, + "skipped_shares": true, + "has_rich_preview": false, + "file_access": "visible" + } + ], + "upload": true, + "user": "U2HHNN1HQ", + "display_as_bot": false, + "type": "message", + "ts": "1587214956.000700", + "client_msg_id": "e9473154-7c74-4e16-a1ea-aa5855d8648f" + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1587215471.001100", + "client_msg_id": "1837b1b9-15d4-41bb-bd82-c4be4d24ce03", + "text": "another bublik!", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "blocks": [ + { + "type": "rich_text", + "block_id": "beU", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "another bublik!" + } + ] + } + ] + } + ] + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/zoey/2020-04-23.json b/tests/fixtures/mini-export/zoey/2020-04-23.json new file mode 100644 index 0000000..2e5bd44 --- /dev/null +++ b/tests/fixtures/mini-export/zoey/2020-04-23.json @@ -0,0 +1,277 @@ +[ + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587651542.000200", + "client_msg_id": "5e8e082d-4605-4875-a2d6-86607e98e112", + "text": "Baby girl names", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "reply_count": 45, + "reply_users_count": 2, + "latest_reply": "1728352618.235309", + "reply_users": [ + "U2HHNN1HQ", + "U2J30FCLW" + ], + "replies": [ + { + "user": "U2HHNN1HQ", + "ts": "1587651713.000300" + }, + { + "user": "U2J30FCLW", + "ts": "1587842605.000600" + }, + { + "user": "U2HHNN1HQ", + "ts": "1587844690.001400" + }, + { + "user": "U2HHNN1HQ", + "ts": "1587844880.001600" + }, + { + "user": "U2HHNN1HQ", + "ts": "1587847411.003900" + }, + { + "user": "U2HHNN1HQ", + "ts": "1587849379.004800" + }, + { + "user": "U2J30FCLW", + "ts": "1587849408.005000" + }, + { + "user": "U2HHNN1HQ", + "ts": "1587849458.005200" + }, + { + "user": "U2J30FCLW", + "ts": "1587851865.005400" + }, + { + "user": "U2J30FCLW", + "ts": "1590795033.000100" + }, + { + "user": "U2HHNN1HQ", + "ts": "1595716889.000100" + }, + { + "user": "U2HHNN1HQ", + "ts": "1595828802.000600" + }, + { + "user": "U2HHNN1HQ", + "ts": "1644007596.214229" + }, + { + "user": "U2J30FCLW", + "ts": "1644007715.586559" + }, + { + "user": "U2HHNN1HQ", + "ts": "1645042618.388199" + }, + { + "user": "U2HHNN1HQ", + "ts": "1645804390.278629" + }, + { + "user": "U2HHNN1HQ", + "ts": "1647010205.674939" + }, + { + "user": "U2HHNN1HQ", + "ts": "1655498003.694859" + }, + { + "user": "U2J30FCLW", + "ts": "1655498021.086939" + }, + { + "user": "U2J30FCLW", + "ts": "1655498026.842429" + }, + { + "user": "U2J30FCLW", + "ts": "1655498036.462279" + }, + { + "user": "U2HHNN1HQ", + "ts": "1655498116.144589" + }, + { + "user": "U2HHNN1HQ", + "ts": "1656524709.035089" + }, + { + "user": "U2J30FCLW", + "ts": "1656525039.656139" + }, + { + "user": "U2HHNN1HQ", + "ts": "1656547897.691709" + }, + { + "user": "U2HHNN1HQ", + "ts": "1656967670.835969" + }, + { + "user": "U2HHNN1HQ", + "ts": "1665714316.436109" + }, + { + "user": "U2HHNN1HQ", + "ts": "1665714329.861469" + }, + { + "user": "U2HHNN1HQ", + "ts": "1665714395.843509" + }, + { + "user": "U2HHNN1HQ", + "ts": "1665714406.505149" + }, + { + "user": "U2HHNN1HQ", + "ts": "1666017144.309979" + }, + { + "user": "U2J30FCLW", + "ts": "1666018571.116679" + }, + { + "user": "U2HHNN1HQ", + "ts": "1666283311.665639" + }, + { + "user": "U2HHNN1HQ", + "ts": "1666548905.238439" + }, + { + "user": "U2HHNN1HQ", + "ts": "1666549084.108529" + }, + { + "user": "U2HHNN1HQ", + "ts": "1666710283.949469" + }, + { + "user": "U2J30FCLW", + "ts": "1667570827.120389" + }, + { + "user": "U2HHNN1HQ", + "ts": "1668113332.283759" + }, + { + "user": "U2HHNN1HQ", + "ts": "1668990306.602409" + }, + { + "user": "U2HHNN1HQ", + "ts": "1669219368.659929" + }, + { + "user": "U2HHNN1HQ", + "ts": "1677535858.373999" + }, + { + "user": "U2HHNN1HQ", + "ts": "1679322325.329009" + }, + { + "user": "U2J30FCLW", + "ts": "1680209837.675889" + }, + { + "user": "U2J30FCLW", + "ts": "1680209876.614319" + }, + { + "user": "U2HHNN1HQ", + "ts": "1728352618.235309" + } + ], + "is_locked": false, + "subscribed": true, + "last_read": "1728352618.235309", + "blocks": [ + { + "type": "rich_text", + "block_id": "jjC", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Baby girl names" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587651713.000300", + "edited": { + "user": "U2HHNN1HQ", + "ts": "1665714375.000000" + }, + "client_msg_id": "c9bd3422-21c0-423d-830e-030c97e91b02", + "text": "Ada\nAlia\nAndi\nAria\/Arya \nDara\nElli\nErin\nEsther\nFadi[e]\nFaye\nFran\nJada\nJane\nJoni\nKira\nMara\nNina\nNora\nRaya\nShai\nYara\nZara\nZoey (Zoya)", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "LQG", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Ada\nAlia\nAndi\nAria\/Arya \nDara\nElli\nErin\nEsther\nFadi[e]\nFaye\nFran\nJada\nJane\nJoni\nKira\nMara\nNina\nNora\nRaya\nShai\nYara\nZara\nZoey (Zoya)" + } + ] + } + ] + } + ] + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/zoey/2020-04-25.json b/tests/fixtures/mini-export/zoey/2020-04-25.json new file mode 100644 index 0000000..c4f23bb --- /dev/null +++ b/tests/fixtures/mini-export/zoey/2020-04-25.json @@ -0,0 +1,665 @@ +[ + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1587842605.000600", + "edited": { + "user": "U2J30FCLW", + "ts": "1587842643.000000" + }, + "client_msg_id": "614c8f69-b8dc-483e-b559-e26c490e57b4", + "text": "Alia\nAndi\nEllie\nErin\nEsther\nFaye\nKira\nMara\nNora\nRaya\nRivka\nShai\nZara\nZoey (Zoya)", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "R4c", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Alia\nAndi\nEllie\nErin\nEsther\nFaye\nKira\nMara\nNora\nRaya\nRivka\nShai\nZara\nZoey (Zoya)" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587842804.001100", + "client_msg_id": "a48e6885-3191-4df9-ae39-cc6e31939fad", + "text": "Baby boy names", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587842804.001100", + "reply_count": 30, + "reply_users_count": 2, + "latest_reply": "1729275913.097429", + "reply_users": [ + "U2HHNN1HQ", + "U2J30FCLW" + ], + "replies": [ + { + "user": "U2HHNN1HQ", + "ts": "1587844686.001200" + }, + { + "user": "U2HHNN1HQ", + "ts": "1587847806.004200" + }, + { + "user": "U2HHNN1HQ", + "ts": "1587847856.004400" + }, + { + "user": "U2HHNN1HQ", + "ts": "1587848964.004600" + }, + { + "user": "U2J30FCLW", + "ts": "1593312084.002600" + }, + { + "user": "U2HHNN1HQ", + "ts": "1655497970.128139" + }, + { + "user": "U2HHNN1HQ", + "ts": "1656550206.616869" + }, + { + "user": "U2HHNN1HQ", + "ts": "1657383160.915509" + }, + { + "user": "U2HHNN1HQ", + "ts": "1665713679.801149" + }, + { + "user": "U2HHNN1HQ", + "ts": "1665713775.915449" + }, + { + "user": "U2HHNN1HQ", + "ts": "1665713968.370649" + }, + { + "user": "U2HHNN1HQ", + "ts": "1665714073.390289" + }, + { + "user": "U2HHNN1HQ", + "ts": "1665772316.640129" + }, + { + "user": "U2HHNN1HQ", + "ts": "1669042577.074349" + }, + { + "user": "U2HHNN1HQ", + "ts": "1669134587.534359" + }, + { + "user": "U2HHNN1HQ", + "ts": "1669817715.842749" + }, + { + "user": "U2HHNN1HQ", + "ts": "1677534276.857389" + }, + { + "user": "U2HHNN1HQ", + "ts": "1677534932.624229" + }, + { + "user": "U2J30FCLW", + "ts": "1677537182.790029" + }, + { + "user": "U2J30FCLW", + "ts": "1677537194.748409" + }, + { + "user": "U2HHNN1HQ", + "ts": "1681397953.547769" + }, + { + "user": "U2HHNN1HQ", + "ts": "1681573698.769379" + }, + { + "user": "U2HHNN1HQ", + "ts": "1681573897.480289" + }, + { + "user": "U2HHNN1HQ", + "ts": "1681673462.733159" + }, + { + "user": "U2J30FCLW", + "ts": "1681673481.251839" + }, + { + "user": "U2HHNN1HQ", + "ts": "1681673491.808809" + }, + { + "user": "U2HHNN1HQ", + "ts": "1682375712.953539" + }, + { + "user": "U2HHNN1HQ", + "ts": "1726097016.108129" + }, + { + "user": "U2HHNN1HQ", + "ts": "1728352950.566759" + }, + { + "user": "U2J30FCLW", + "ts": "1729275913.097429" + } + ], + "is_locked": false, + "subscribed": true, + "last_read": "1729275913.097429", + "blocks": [ + { + "type": "rich_text", + "block_id": "0Mn", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Baby boy names" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587844686.001200", + "edited": { + "user": "U2HHNN1HQ", + "ts": "1587847558.000000" + }, + "client_msg_id": "36244a45-572c-4d55-887e-759be38af09a", + "text": "Noah\nAbir\nAxel\nAzra\nJonah\nJoni\nSeth\nOzzy\nZach\nUriah\nShai", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587842804.001100", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "i4KW", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Noah\nAbir\nAxel\nAzra\nJonah\nJoni\nSeth\nOzzy\nZach\nUriah\nShai" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587844690.001400", + "client_msg_id": "6eb582dc-ea1f-420e-9264-9a7a71baeeb6", + "text": "Adie\nJean", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "gAvpY", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Adie\nJean" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587844880.001600", + "client_msg_id": "112d0d54-1cd8-4812-a5d9-59f6af293603", + "text": "Sara", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "OHsu", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Sara" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587847411.003900", + "client_msg_id": "c10be03a-516a-4d31-9820-1263811fdfaf", + "text": "Alvi", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "SsyoV", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Alvi" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587847806.004200", + "client_msg_id": "886ee1b0-2ae7-4e3b-b59c-d155dc54808e", + "text": "Zain", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587842804.001100", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "dgP", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Zain" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587847856.004400", + "edited": { + "user": "U2HHNN1HQ", + "ts": "1669817790.000000" + }, + "client_msg_id": "b6c4a1b6-2a19-4b65-be54-0eff9061b8c1", + "text": "Enoch (Nucky)\nEnok", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587842804.001100", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "9uj3M", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Enoch (Nucky)\nEnok" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587848964.004600", + "client_msg_id": "7cf7fc44-924f-4dad-ac6a-3e909d26b94c", + "text": "Noel", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587842804.001100", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "dpq", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Noel" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587849379.004800", + "client_msg_id": "3581817c-3d7a-4708-bc2e-0ece2f173539", + "text": "Lucy\nSadie\nNoa", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "qD4V", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Lucy\nSadie\nNoa" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1587849408.005000", + "client_msg_id": "44d5139e-033f-4a83-bc6b-ffc5bde8edae", + "text": "Not a fan of noa. But I do like Lucy and Sadie", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "EAVP", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Not a fan of noa. But I do like Lucy and Sadie" + } + ] + } + ] + } + ] + }, + { + "user": "U2HHNN1HQ", + "type": "message", + "ts": "1587849458.005200", + "client_msg_id": "2a778fe4-88aa-4b81-a3e6-9515ada836ce", + "text": "Alvi?", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gde41167d309", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/ede41167d309b977e5c67645d9a1a699.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "first_name": "Ilia", + "real_name": "Ilia Dobkin", + "display_name": "Ilia", + "team": "T2HHNN1FU", + "name": "jedi_jew", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "PdB", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Alvi?" + } + ] + } + ] + } + ] + }, + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1587851865.005400", + "client_msg_id": "9a9a0cf0-962f-443d-9458-4af3c299575e", + "text": "Not a fan", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "dpYcf", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Not a fan" + } + ] + } + ] + } + ] + } +] \ No newline at end of file diff --git a/tests/fixtures/mini-export/zoey/2020-05-29.json b/tests/fixtures/mini-export/zoey/2020-05-29.json new file mode 100644 index 0000000..9276778 --- /dev/null +++ b/tests/fixtures/mini-export/zoey/2020-05-29.json @@ -0,0 +1,42 @@ +[ + { + "user": "U2J30FCLW", + "type": "message", + "ts": "1590795033.000100", + "client_msg_id": "c1405527-49a1-49f6-9a14-5e7797adee00", + "text": "Ellie\nErin\nEsther\nMara\nShai\nSara\nZoey\nLuct\nSadie", + "team": "T2HHNN1FU", + "user_team": "T2HHNN1FU", + "source_team": "T2HHNN1FU", + "user_profile": { + "avatar_hash": "gc49a37283df", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/bc49a37283dfa139af6916bb32030146.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "first_name": "Irina", + "real_name": "Irina", + "display_name": "ira_feeds", + "team": "T2HHNN1FU", + "name": "ira_feeds", + "is_restricted": false, + "is_ultra_restricted": false + }, + "thread_ts": "1587651542.000200", + "parent_user_id": "U2HHNN1HQ", + "blocks": [ + { + "type": "rich_text", + "block_id": "dYo", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Ellie\nErin\nEsther\nMara\nShai\nSara\nZoey\nLuct\nSadie" + } + ] + } + ] + } + ] + } +] \ No newline at end of file diff --git a/tests/fixtures/test-manifest.json b/tests/fixtures/test-manifest.json new file mode 100644 index 0000000..e43f21d --- /dev/null +++ b/tests/fixtures/test-manifest.json @@ -0,0 +1,167 @@ +{ + "version": 1, + "export_path": "/Users/macilia/Documents/code/slack-sieve/tests/fixtures/mini-export", + "updated_at": "2026-06-03T16:36:33.190656+00:00", + "global_notes": "pytest was here", + "channels": { + "medical": { + "import": true, + "status": "partial", + "reviewed": true, + "import_mode": "pick", + "notes": "", + "mattermost_channel": "", + "mattermost_team": "", + "messages": { + "medical:test:1": { + "action": "import", + "checked": true, + "files": {}, + "notes": "", + "merge_target": "" + } + } + }, + "29wilson": { + "import": false, + "status": "skip", + "reviewed": true, + "import_mode": "all", + "notes": "Returned — not importing", + "mattermost_channel": "", + "mattermost_team": "", + "messages": {} + }, + "zoey": { + "import": true, + "status": "partial", + "reviewed": true, + "import_mode": "pick", + "notes": "", + "mattermost_channel": "", + "mattermost_team": "", + "messages": { + "zoey:test:2": { + "action": "import", + "checked": true, + "files": {}, + "notes": "", + "merge_target": "" + } + } + }, + "153niagara": { + "import": false, + "status": "undecided", + "reviewed": false, + "import_mode": "all", + "notes": "", + "mattermost_channel": "", + "mattermost_team": "", + "messages": { + "153niagara:1476210563.000002": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1476210563.000003": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1476833882.000005": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1476833895.000006": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1476833908.000007": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1476834078.000008": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1476834088.000009": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1477341477.000002": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1477341924.000003": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1477342010.000004": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1477342047.000005": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1477342051.000006": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1477342059.000007": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1477342065.000008": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + }, + "153niagara:1477342068.000009": { + "action": "inherit", + "merge_target": "", + "notes": "", + "files": {} + } + } + } + }, + "users": { + "UTEST": { + "import": true, + "notes": "mapped", + "mattermost_username": "ilia" + }, + "U2HHNN1HQ": { + "import": true, + "notes": "mapped", + "mattermost_username": "testuser" + } + } +} diff --git a/tests/test_auto_cherry_pick_main.py b/tests/test_auto_cherry_pick_main.py new file mode 100644 index 0000000..1abf061 --- /dev/null +++ b/tests/test_auto_cherry_pick_main.py @@ -0,0 +1,49 @@ +"""Integration test for auto-cherry-pick main() on mini-export.""" + +from __future__ import annotations + +import json +import sys +from pathlib import Path + +import pytest + +REPO = Path(__file__).resolve().parents[1] + + +@pytest.fixture +def cherry_pick_module(): + import importlib.util + + path = REPO / "scripts" / "auto-cherry-pick.py" + spec = importlib.util.spec_from_file_location("auto_cherry_pick_main", path) + mod = importlib.util.module_from_spec(spec) + assert spec.loader + spec.loader.exec_module(mod) + return mod + + +def test_main_dry_run_on_fixture(cherry_pick_module, fixture_export_path, tmp_path, monkeypatch): + manifest = tmp_path / "manifest.json" + monkeypatch.setattr(cherry_pick_module, "MANIFEST_PATH", manifest) + monkeypatch.setattr(cherry_pick_module, "DEFAULT_EXPORT", fixture_export_path) + monkeypatch.setattr(sys, "argv", ["auto-cherry-pick.py", "--dry-run"]) + assert cherry_pick_module.main() == 0 + + +def test_main_writes_pick_manifest(cherry_pick_module, fixture_export_path, tmp_path, monkeypatch): + manifest = tmp_path / "manifest.json" + monkeypatch.setattr(cherry_pick_module, "MANIFEST_PATH", manifest) + monkeypatch.setattr(cherry_pick_module, "DEFAULT_EXPORT", fixture_export_path) + monkeypatch.setattr(sys, "argv", ["auto-cherry-pick.py"]) + assert cherry_pick_module.main() == 0 + data = json.loads(manifest.read_text()) + picks = sum( + 1 + for ch in data["channels"].values() + for m in ch.get("messages", {}).values() + if m.get("action") == "import" + ) + assert picks > 0 + assert "medical" in data["channels"] + assert data["channels"]["medical"]["import_mode"] == "pick" diff --git a/tests/test_cherry_pick.py b/tests/test_cherry_pick.py new file mode 100644 index 0000000..e655e31 --- /dev/null +++ b/tests/test_cherry_pick.py @@ -0,0 +1,82 @@ +"""Unit tests for scripts/auto-cherry-pick.py heuristics.""" + +from __future__ import annotations + + +def test_return_channels_skipped(cherry_pick, empty_manifest): + _, manifest = empty_manifest + manifest["channels"]["29wilson"] = { + "status": "partial", + "messages": {"x": {"action": "import"}}, + } + cherry_pick.reset_all_picks(manifest) + entry = manifest["channels"]["29wilson"] + assert entry["status"] == "skip" + assert entry["messages"] == {} + + +def test_conversation_not_imported(cherry_pick): + assert cherry_pick.looks_conversational("should we go with option A?") + assert cherry_pick.looks_conversational("sounds good!") + assert not cherry_pick.text_is_factual("should we book for Tuesday?") + assert cherry_pick.text_is_factual("Call Dr. Smith at 416-555-1234") + + +def test_name_list_detected(cherry_pick): + text = "Baby girl names\n• Maya\n• Sarah\n• Leah\n• Naomi" + assert cherry_pick.is_name_list_message(text) + assert not cherry_pick.is_name_list_message("Zoey had fun at camp today") + + +def test_latest_draft_only_one_winner(cherry_pick, export): + msgs, files_map = cherry_pick.build_latest_draft_winners(export, "153niagara") + # Multiple draft versions of hot_plate → one message id wins + hot = [mid for mid in msgs if "153niagara" in mid] + assert len(hot) >= 1 + for mid, fids in files_map.items(): + assert mid in msgs + assert fids + + +def test_should_import_doc_not_chat(cherry_pick, export): + latest, _ = cherry_pick.build_latest_draft_winners(export, "153niagara") + picked_docs = 0 + picked_chat = 0 + for msg in export.iter_channel_messages("153niagara"): + if cherry_pick.should_import(msg, "153niagara", latest_draft_msgs=latest): + if msg.get("files"): + picked_docs += 1 + elif (msg.get("text") or "").strip(): + picked_chat += 1 + assert picked_docs >= 1 + # Data-only mode: far fewer bare-text picks than files + assert picked_chat <= picked_docs + 5 + + +def test_wilson_not_in_auto_channels(cherry_pick): + assert "29wilson" not in cherry_pick.AUTO_CHANNELS + assert "520steeles" not in cherry_pick.AUTO_CHANNELS + assert cherry_pick.RETURN_CHANNELS >= {"29wilson", "520steeles"} + + +def test_dry_run_pick_count(cherry_pick, export, empty_manifest, tmp_path, monkeypatch): + path, manifest = empty_manifest + monkeypatch.setattr(cherry_pick, "MANIFEST_PATH", tmp_path / "manifest.json") + monkeypatch.setattr(cherry_pick, "DEFAULT_EXPORT", export.paths.root) + + import sys + + sys.argv = ["auto-cherry-pick.py", "--dry-run"] + # Run pick logic inline + cherry_pick.reset_all_picks(manifest) + total = 0 + for ch_name in sorted(cherry_pick.AUTO_CHANNELS): + if ch_name in cherry_pick.RETURN_CHANNELS: + continue + if not export.channel_folder(ch_name): + continue + latest, _ = cherry_pick.build_latest_draft_winners(export, ch_name) + for msg in export.iter_channel_messages(ch_name): + if cherry_pick.should_import(msg, ch_name, latest_draft_msgs=latest): + total += 1 + assert 0 < total < 200 # mini fixture stays small diff --git a/tests/test_cherry_pick_extended.py b/tests/test_cherry_pick_extended.py new file mode 100644 index 0000000..94b25af --- /dev/null +++ b/tests/test_cherry_pick_extended.py @@ -0,0 +1,63 @@ +"""Additional auto-cherry-pick heuristic coverage.""" + +from __future__ import annotations + + +def test_informative_image_casual_name(cherry_pick): + f = {"name": "MVIMG_20190105.jpg", "mimetype": "image/jpeg"} + assert not cherry_pick.informative_image(f, "nice photo") + assert cherry_pick.informative_image( + f, "Invoice total $1,200 due 416-555-0100" + ) + + +def test_informative_filename(cherry_pick): + assert cherry_pick.informative_filename("lease_agreement.pdf") + assert not cherry_pick.informative_filename("IMG_0001.jpg") + + +def test_msg_selection_skips_old_draft(cherry_pick): + msg = { + "id": "ch:1", + "files": [ + {"id": "D1", "name": "draft_v1.docx"}, + {"id": "D2", "name": "photo.jpg", "mimetype": "image/jpeg"}, + ], + } + sel = cherry_pick.msg_selection(msg, latest_draft_files={"D1"}) + assert sel["files"].get("D1") is True + assert "D2" not in sel["files"] or sel["files"].get("D2") is True # image w/ name + + +def test_draft_group_key_strips_draft_prefix(cherry_pick): + key = cherry_pick.draft_group_key("draft_-_hot_plate_v2.docx") + assert "draft" not in key.split()[0] or "hot" in key + assert "hot" in key.replace("_", " ") + + +def test_text_is_factual_requires_signals(cherry_pick): + assert not cherry_pick.text_is_factual("sounds good thanks") + assert cherry_pick.text_is_factual("Pay $1,500 to TD account 12345") + + +def test_is_doc_and_image(cherry_pick): + assert cherry_pick.is_doc({"name": "x.pdf"}) + assert cherry_pick.is_image({"name": "x.jpg", "mimetype": "image/jpeg"}) + + +def test_channel_entry_skip_shape(cherry_pick): + entry = cherry_pick.channel_entry_skip("note") + assert entry["status"] == "skip" + assert entry["messages"] == {} + + +def test_reset_only_writes(empty_manifest, cherry_pick, tmp_path, monkeypatch): + path, _manifest = empty_manifest + path.write_text(__import__("json").dumps(_manifest, indent=2) + "\n", encoding="utf-8") + monkeypatch.setattr(cherry_pick, "MANIFEST_PATH", path) + import sys + + monkeypatch.setattr(sys, "argv", ["auto-cherry-pick.py", "--reset"]) + assert cherry_pick.main() == 0 + saved = __import__("json").loads(path.read_text()) + assert saved["channels"] == {} diff --git a/tests/test_coverage_gaps.py b/tests/test_coverage_gaps.py new file mode 100644 index 0000000..70908d2 --- /dev/null +++ b/tests/test_coverage_gaps.py @@ -0,0 +1,260 @@ +"""Tests targeting previously uncovered branches.""" + +from __future__ import annotations + +import io +import json +import urllib.error +import urllib.request +import zipfile +from pathlib import Path +import pytest + + +def _status(base: str, path: str, method: str = "GET", body: bytes | None = None): + req = urllib.request.Request( + f"{base}{path}", + data=body, + headers={"Content-Type": "application/json"} if body else {}, + method=method, + ) + try: + with urllib.request.urlopen(req, timeout=5) as resp: + return resp.status, resp.read() + except urllib.error.HTTPError as exc: + return exc.code, exc.read() + + +# --- server.py --- + + +def test_file_preview_bad_docx_zip(): + import server + + out = server.file_preview_payload_bytes(b"PK\x03\x04garbage", "bad.docx") + assert out["ok"] is False + assert "DOCX" in out["error"] or "Could not" in out["error"] + + +def test_file_preview_quip_html(): + import server + + html = '

Canvas

' + out = server.file_preview_payload_bytes(html.encode(), "doc.quip") + assert out["ok"] and "Canvas" in out["html"] + + +def test_static_file_not_found(api): + status, _ = _status(api["base"], "/static/no-such-asset.css") + assert status == 404 + + +def test_uploads_missing_file(api): + status, _ = _status(api["base"], "/uploads/__uploads/missing/deadbeef.bin") + assert status in (400, 404) + + +def test_file_preview_by_file_id_not_found(api): + status, body = _status(api["base"], "/api/file-preview?file_id=UNKNOWN_FILE_XYZ") + assert status == 404 + data = json.loads(body.decode()) + assert data["ok"] is False + + +def test_file_preview_by_rel_on_disk(api, review_server): + rel_dir = review_server["httpd"].RequestHandlerClass.export.paths.root + target = rel_dir / "__uploads" / "T1" + target.mkdir(parents=True, exist_ok=True) + (target / "note.txt").write_text("fixture preview text", encoding="utf-8") + status, body = _status(api["base"], "/api/file-preview?rel=__uploads/T1/note.txt") + assert status == 200 + data = json.loads(body.decode()) + assert data["ok"] + assert "fixture preview" in data["html"] + + +def test_manifest_post_empty_body(api): + status, _ = _status( + api["base"], + "/api/manifest", + method="POST", + body=b"", + ) + assert status == 400 + + +def test_manifest_post_wrong_path(api): + status, _ = _status(api["base"], "/api/manifest/extra", method="POST", body=b"{}") + assert status == 404 + + +def test_manifest_post_invalid_import_mode_defaults(api): + api["post"]( + "/api/manifest", + { + "channels": { + "medical": { + "status": "partial", + "import_mode": "bogus", + "messages": {}, + } + } + }, + ) + med = api["get"]("/api/manifest")["channels"]["medical"] + assert med["import_mode"] == "all" + + +def test_manifest_post_skips_non_dict_user(api): + users = api["get"]("/api/users")["users"] + uid = users[0]["id"] + api["post"]( + "/api/manifest", + {"users": {"bad": "nope", uid: {"import": True, "notes": "", "mattermost_username": ""}}}, + ) + again = api["get"]("/api/users")["users"] + assert any(u["id"] == uid for u in again) + + +def test_safe_export_path_rejects_dotdot(): + import server + from slack_export import SlackExport + from unittest.mock import Mock + + root = Path(__file__).resolve().parents[1] / "tests/fixtures/mini-export" + handler = Mock(spec=server.ReviewHandler) + handler.export = SlackExport(root) + assert server.ReviewHandler._safe_export_path(handler, "../outside") is None + assert server.ReviewHandler._safe_export_path(handler, "/etc/passwd") is None + + +# --- slack_export.py --- + + +@pytest.fixture +def rich_export(tmp_path): + from slack_export import SlackExport + + root = tmp_path / "rich" + root.mkdir() + (root / "channels.json").write_text("[]", encoding="utf-8") + (root / "users.json").write_text( + json.dumps([{"id": "U1", "name": "u", "profile": {"real_name": "U"}}]), + encoding="utf-8", + ) + (root / "canvases.json").write_text( + json.dumps([{"id": "CV1", "name": "canvas.pdf", "mimetype": "application/pdf"}]), + encoding="utf-8", + ) + ch = root / "ch1" + ch.mkdir() + (ch / "meta.json").write_text('{"not": "a list"}', encoding="utf-8") + (ch / "2016-01-01.json").write_text( + json.dumps( + [ + {"subtype": "channel_leave", "ts": "1.0"}, + {"subtype": "channel_purpose", "purpose": "Purpose here", "ts": "2.0"}, + {"files": [{"id": "NO_NAME"}]}, + ] + ), + encoding="utf-8", + ) + return SlackExport(root) + + +def test_file_index_from_canvases_and_skips_bad_rows(rich_export): + idx = rich_export.ensure_file_index() + assert "CV1" in idx + assert rich_export.file_record("NO_NAME") is None + + +def test_fetch_no_download_url(rich_export): + rich_export._file_index = { + "X1": { + "id": "X1", + "name": "a.bin", + "local_relpath": "__uploads/X1/a.bin", + "local_exists": False, + "url_private_download": None, + } + } + with pytest.raises(FileNotFoundError, match="No download URL"): + rich_export.fetch_file_bytes("X1") + + +def test_fetch_http_error(rich_export, monkeypatch): + rich_export._file_index = { + "X2": { + "id": "X2", + "name": "b.bin", + "local_relpath": "__uploads/X2/b.bin", + "local_exists": False, + "url_private_download": "https://example.com/x?token=xoxe-abc", + } + } + + def _fail(*args, **kwargs): + raise urllib.error.HTTPError("url", 401, "Unauthorized", None, None) + + monkeypatch.setattr("urllib.request.urlopen", _fail) + with pytest.raises(FileNotFoundError, match="401"): + rich_export.fetch_file_bytes("X2") + + +def test_normalize_leave_and_purpose(rich_export): + msgs = rich_export.iter_channel_messages("ch1") + texts = [m["text"] for m in msgs] + assert any("left" in t for t in texts) + assert any("Purpose" in t for t in texts) + + +def test_read_non_list_json_returns_empty(rich_export): + assert rich_export.read_messages_file("ch1", "meta") == [] + + +def test_list_dates_missing_channel(rich_export): + assert rich_export.list_channel_date_files("missing-channel") == [] + + +def test_search_files_query_filters_out(rich_export): + ch = rich_export.paths.root / "hits" + ch.mkdir() + (ch / "2017-01-01.json").write_text( + json.dumps( + [ + { + "type": "message", + "user": "U1", + "ts": "1.0", + "text": "alpha", + "files": [{"id": "F9", "name": "pic.png", "mimetype": "image/png"}], + } + ] + ), + encoding="utf-8", + ) + ex = rich_export + out = ex.search_files_global("zzzznomatch", file_type="image", limit=10) + assert out["hits"] == [] + + +def test_search_global_hits_limit(export): + out = export.search_global("a", limit=1) + assert len(out["messages"]) <= 1 + + +def test_search_messages_stops_at_limit(export): + hits = export.search_messages("zoey", "a", limit=2) + assert len(hits) <= 2 + + +def test_classify_word_doc(export): + assert export.classify_file({"name": "x.doc", "mimetype": "application/msword"}) == "doc" + + +def test_register_file_raw_skips_incomplete(export): + export._file_index = {} + export._register_file_raw({"name": "onlyname"}) + export._register_file_raw({"id": "idonly"}) + assert export.file_record("onlyname") is None + assert export.file_record("idonly") is None diff --git a/tests/test_helpers.py b/tests/test_helpers.py new file mode 100644 index 0000000..530466e --- /dev/null +++ b/tests/test_helpers.py @@ -0,0 +1,113 @@ +"""Tests for small helpers in slack_export and server.""" + +from __future__ import annotations + +import io +import json +import zipfile +from pathlib import Path + +import pytest + +from slack_export import SlackExport, load_json, resolve_paths, slack_ts_to_iso, user_display + + +def test_slack_ts_to_iso(): + assert slack_ts_to_iso("1476210563.000002") is not None + assert "2016" in slack_ts_to_iso("1476210563.000002") + assert slack_ts_to_iso(None) is None + assert slack_ts_to_iso("not-a-ts") is None + + +def test_user_display_fallbacks(): + assert user_display(None) == "unknown" + assert user_display({"name": "bot", "is_bot": True}) == "bot" + assert user_display({"profile": {"display_name": "Ilia"}, "name": "jedi"}) == "Ilia" + + +def test_resolve_paths_custom_root(fixture_export_path): + paths = resolve_paths(fixture_export_path) + assert paths.root == fixture_export_path.resolve() + assert paths.channels_json.name == "channels.json" + + +def test_load_json_roundtrip(tmp_path): + p = tmp_path / "x.json" + p.write_text('{"a": 1}', encoding="utf-8") + assert load_json(p) == {"a": 1} + + +def test_server_manifest_helpers(tmp_path, fixture_export_path): + import server + + path = tmp_path / "m.json" + default = server.default_manifest(str(fixture_export_path)) + assert default["version"] == 1 + + loaded = server.load_manifest(path, str(fixture_export_path)) + assert loaded["export_path"] == str(fixture_export_path) + + path.write_text("{not json", encoding="utf-8") + with pytest.raises(json.JSONDecodeError): + server.load_manifest(path, str(fixture_export_path)) + + server.save_manifest(path, {"version": 1, "channels": {}}) + assert path.is_file() + assert "updated_at" in load_json(path) + + +def test_file_preview_payload_bytes_text_and_html(): + import server + + txt = server.file_preview_payload_bytes(b"hello world", "notes.txt") + assert txt["ok"] and "hello" in txt["html"] + + html = server.file_preview_payload_bytes( + b"

Title

", "page.html" + ) + assert html["ok"] and html["kind"] == "html" + + bad = server.file_preview_payload_bytes(b"\x00\x01\xff", "binary.dat") + assert not bad["ok"] + + +def test_file_preview_payload_bytes_docx(tmp_path): + import server + + buf = io.BytesIO() + with zipfile.ZipFile(buf, "w") as zf: + zf.writestr( + "word/document.xml", + '' + '' + "Lease terms", + ) + raw = buf.getvalue() + out = server.file_preview_payload_bytes(raw, "lease.docx") + assert out["ok"] + assert "Lease" in out["html"] + + path = tmp_path / "lease.docx" + path.write_bytes(raw) + assert "Lease" in server.file_preview_payload(path)["html"] + + +def test_docx_to_html_file(tmp_path): + import server + + buf = io.BytesIO() + with zipfile.ZipFile(buf, "w") as zf: + zf.writestr( + "word/document.xml", + '' + '' + "Line one", + ) + path = tmp_path / "t.docx" + path.write_bytes(buf.getvalue()) + assert "Line one" in server.docx_to_html(path) + + +def test_export_missing_root_raises(): + with pytest.raises(FileNotFoundError): + SlackExport("/nonexistent/export/path") diff --git a/tests/test_prepare_export.py b/tests/test_prepare_export.py new file mode 100644 index 0000000..695814f --- /dev/null +++ b/tests/test_prepare_export.py @@ -0,0 +1,151 @@ +"""Tests that manifest selections produce a valid filtered Slack export.""" + +from __future__ import annotations + +import json +import shutil +import sys +from pathlib import Path + +import pytest + +REPO = Path(__file__).resolve().parents[1] + + +def _load_prepare(): + import importlib.util + + path = REPO / "scripts" / "prepare-export.py" + spec = importlib.util.spec_from_file_location("prepare_export", path) + mod = importlib.util.module_from_spec(spec) + assert spec.loader + spec.loader.exec_module(mod) + return mod + + +@pytest.fixture +def prepare_mod(): + return _load_prepare() + + +def test_channel_included_rules(prepare_mod): + assert prepare_mod.channel_included({"status": "import", "import_mode": "all"}) + assert not prepare_mod.channel_included({"status": "skip"}) + assert prepare_mod.channel_included( + { + "status": "partial", + "import_mode": "pick", + "messages": {"medical:1.0": {"action": "import", "checked": True}}, + } + ) + assert not prepare_mod.channel_included( + {"status": "partial", "import_mode": "pick", "messages": {}} + ) + + +def test_message_and_files_filter(prepare_mod): + entry = { + "status": "partial", + "import_mode": "pick", + "messages": { + "ch:1000.1": { + "action": "import", + "files": {"F1": True, "F2": False}, + } + }, + } + assert prepare_mod.message_included(entry, "ch:1000.1") + assert not prepare_mod.message_included(entry, "ch:1000.2") + raw = { + "ts": "1000.1", + "text": "hi", + "files": [ + {"id": "F1", "name": "a.pdf"}, + {"id": "F2", "name": "b.pdf"}, + ], + } + out = prepare_mod.filter_files_on_message(entry, "ch:1000.1", raw) + assert len(out["files"]) == 1 + assert out["files"][0]["id"] == "F1" + + +def test_prepare_export_writes_slack_shape(prepare_mod, fixture_export_path, tmp_path): + from slack_export import SlackExport + + export = SlackExport(fixture_export_path) + msgs = export.iter_channel_messages("medical") + pick = msgs[0] + key = pick["id"] + + manifest = { + "channels": { + "medical": { + "status": "partial", + "import_mode": "pick", + "import": True, + "messages": {key: {"action": "import", "checked": True, "files": {}}}, + } + } + } + out = tmp_path / "prepared" + stats = prepare_mod.prepare_export(fixture_export_path, manifest, out, export_mod=export) + assert stats["medical"] == 1 + assert (out / "channels.json").is_file() + assert (out / "users.json").is_file() + assert (out / "medical").is_dir() + day_files = list((out / "medical").glob("*.json")) + assert len(day_files) == 1 + written = json.loads(day_files[0].read_text(encoding="utf-8")) + assert len(written) == 1 + assert written[0]["ts"] == pick["ts"] + assert (out / "prepare-export-summary.json").is_file() + + +def test_prepare_whole_channel(prepare_mod, fixture_export_path, tmp_path): + from slack_export import SlackExport + + export = SlackExport(fixture_export_path) + total = len(export.iter_channel_messages("medical")) + manifest = { + "channels": { + "medical": { + "status": "import", + "import_mode": "all", + "import": True, + "messages": {}, + } + } + } + out = tmp_path / "prepared-all" + stats = prepare_mod.prepare_export(fixture_export_path, manifest, out, export_mod=export) + assert stats["medical"] == total + + +def test_prepare_skips_channel(prepare_mod, fixture_export_path, tmp_path): + from slack_export import SlackExport + + export = SlackExport(fixture_export_path) + manifest = { + "channels": { + "medical": {"status": "skip", "import": False, "messages": {}}, + "zoey": { + "status": "partial", + "import_mode": "pick", + "import": True, + "messages": { + export.iter_channel_messages("zoey")[0]["id"]: { + "action": "import", + "checked": True, + } + }, + }, + } + } + out = tmp_path / "prepared-skip" + stats = prepare_mod.prepare_export(fixture_export_path, manifest, out, export_mod=export) + assert "medical" not in stats + assert stats["zoey"] == 1 + meta = json.loads((out / "channels.json").read_text(encoding="utf-8")) + names = {c["name"] for c in meta} + assert "medical" not in names + assert "zoey" in names diff --git a/tests/test_preset_skips.py b/tests/test_preset_skips.py new file mode 100644 index 0000000..c5d53a7 --- /dev/null +++ b/tests/test_preset_skips.py @@ -0,0 +1,50 @@ +"""Tests for scripts/preset-skips.py.""" + +from __future__ import annotations + +import importlib.util +import json +from pathlib import Path + +import pytest + +REPO = Path(__file__).resolve().parents[1] + + +def _load_preset_skips(): + path = REPO / "scripts" / "preset-skips.py" + spec = importlib.util.spec_from_file_location("preset_skips", path) + mod = importlib.util.module_from_spec(spec) + assert spec.loader + spec.loader.exec_module(mod) + return mod + + +def test_load_preset_tiers(): + mod = _load_preset_skips() + preset = mod.load_preset(REPO / "presets" / "levkin-skips.json") + assert "medical" in preset["skip_all"] + assert "zoey" in preset["review_priority"] + assert "29wilson" in preset["tier_b"] + + +def test_channel_entry_skip(): + mod = _load_preset_skips() + entry = mod.channel_entry_skip("tier-a") + assert entry["status"] == "skip" + assert entry["reviewed"] is True + + +def test_main_writes_manifest(tmp_path, fixture_export_path, monkeypatch): + mod = _load_preset_skips() + manifest_path = tmp_path / "manifest.json" + monkeypatch.setattr(mod, "MANIFEST_PATH", manifest_path) + monkeypatch.setattr(mod, "DEFAULT_EXPORT", fixture_export_path) + + import sys + + sys.argv = ["preset-skips.py", str(fixture_export_path)] + assert mod.main() == 0 + data = json.loads(manifest_path.read_text()) + assert data["channels"]["medical"]["status"] == "skip" + assert "zoey" not in data["channels"] or data["channels"].get("zoey", {}).get("status") != "skip" diff --git a/tests/test_server.py b/tests/test_server.py new file mode 100644 index 0000000..2ede8aa --- /dev/null +++ b/tests/test_server.py @@ -0,0 +1,112 @@ +"""HTTP API tests against the review server (mini-export).""" + +from __future__ import annotations + +import json + + +def test_health(api): + data = api["get"]("/api/health") + assert data["ok"] is True + assert "mini-export" in data["export_path"] + + +def test_summary(api): + data = api["get"]("/api/summary") + assert data["channel_count"] >= 3 + assert data["total_messages"] > 0 + + +def test_channels_list(api): + data = api["get"]("/api/channels") + names = {c["name"] for c in data["channels"]} + assert "medical" in names + med = next(c for c in data["channels"] if c["name"] == "medical") + assert med["status"] == "partial" + assert med["import_mode"] == "pick" + + +def test_channel_messages_all(api): + data = api["get"]("/api/channels/medical/messages/all") + assert data["channel"] == "medical" + assert data["total"] == len(data["messages"]) + assert data["total"] > 0 + + +def test_search_messages(api): + data = api["get"]("/api/search?q=doctor&limit=10") + assert "messages" in data + + +def test_search_files(api): + data = api["get"]("/api/search-files?type=pdf&q=&limit=10") + assert data["file_type"] == "pdf" + assert "hits" in data + + +def test_manifest_roundtrip(api): + got = api["get"]("/api/manifest") + assert "channels" in got + got["global_notes"] = "pytest was here" + api["post"]("/api/manifest", {"global_notes": "pytest was here", "channels": got["channels"], "users": {}}) + again = api["get"]("/api/manifest") + assert again["global_notes"] == "pytest was here" + + +def test_manifest_merge_preserves_other_channel_picks(api): + api["post"]( + "/api/manifest", + { + "channels": { + "medical": { + "import": True, + "status": "partial", + "import_mode": "pick", + "reviewed": True, + "messages": { + "medical:test:1": { + "action": "import", + "checked": True, + "files": {}, + "notes": "", + "merge_target": "", + } + }, + } + } + }, + ) + api["post"]( + "/api/manifest", + { + "channels": { + "zoey": { + "import": True, + "status": "partial", + "import_mode": "pick", + "reviewed": True, + "messages": { + "zoey:test:2": { + "action": "import", + "checked": True, + "files": {}, + "notes": "", + "merge_target": "", + } + }, + } + } + }, + ) + merged = api["get"]("/api/manifest") + assert "medical:test:1" in merged["channels"]["medical"]["messages"] + assert "zoey:test:2" in merged["channels"]["zoey"]["messages"] + + +def test_static_index(api): + import urllib.request + + with urllib.request.urlopen(f"{api['base']}/", timeout=5) as resp: + html = resp.read().decode() + assert "Slack import review" in html + assert "filter-status" in html diff --git a/tests/test_server_extended.py b/tests/test_server_extended.py new file mode 100644 index 0000000..d5e203d --- /dev/null +++ b/tests/test_server_extended.py @@ -0,0 +1,162 @@ +"""Additional HTTP API and server module coverage.""" + +from __future__ import annotations + +import json +import urllib.error +import urllib.request + +import pytest + + +def _get_raw(base: str, path: str) -> tuple[int, bytes]: + try: + with urllib.request.urlopen(f"{base}{path}", timeout=5) as resp: + return resp.status, resp.read() + except urllib.error.HTTPError as exc: + return exc.code, exc.read() + + +def test_users_list(api): + data = api["get"]("/api/users") + assert isinstance(data["users"], list) + if data["users"]: + assert "id" in data["users"][0] + + +def test_channel_search_endpoint(api): + data = api["get"]("/api/channels/medical/search?q=doctor") + assert data["channel"] == "medical" + assert isinstance(data["hits"], list) + + +def test_channel_messages_paged(api): + data = api["get"]("/api/channels/zoey/messages?limit=3&offset=0") + assert data["channel"] == "zoey" + assert len(data["messages"]) <= 3 + assert "dates" in data + + +def test_channels_filter_query(api): + data = api["get"]("/api/channels?q=med") + names = {c["name"] for c in data["channels"]} + assert "medical" in names + + +def test_file_preview_missing_rel(api): + status, body = _get_raw(api["base"], "/api/file-preview?rel=../outside.txt") + assert status == 404 + data = json.loads(body.decode()) + assert data["ok"] is False + + +def test_file_preview_traversal_blocked(api): + status, _ = _get_raw(api["base"], "/api/file-preview?rel=..%2F..%2Fetc%2Fpasswd") + assert status in (400, 404) + + +def test_file_download_bad_id(api): + status, _ = _get_raw(api["base"], "/api/file-download?file_id=NOPE") + assert status == 404 + + +def test_file_download_missing_param(api): + status, _ = _get_raw(api["base"], "/api/file-download") + assert status == 400 + + +def test_uploads_path_traversal(api): + status, _ = _get_raw(api["base"], "/uploads/..%2F..%2Fetc%2Fpasswd") + assert status == 400 + + +def test_static_css(api): + status, body = _get_raw(api["base"], "/static/app.css") + assert status == 200 + assert b"message" in body or len(body) > 0 + + +def test_options_cors(api): + req = urllib.request.Request( + f"{api['base']}/api/manifest", + method="OPTIONS", + ) + with urllib.request.urlopen(req, timeout=5) as resp: + assert resp.status == 204 + assert resp.headers.get("Access-Control-Allow-Origin") == "*" + + +def test_manifest_invalid_json(api): + req = urllib.request.Request( + f"{api['base']}/api/manifest", + data=b"{not valid json", + headers={"Content-Type": "application/json"}, + method="POST", + ) + with pytest.raises(urllib.error.HTTPError) as exc: + urllib.request.urlopen(req, timeout=5) + assert exc.value.code == 400 + + +def test_not_found_route(api): + status, _ = _get_raw(api["base"], "/api/does-not-exist") + assert status == 404 + + +def test_manifest_post_users(api): + users_before = api["get"]("/api/users")["users"] + assert users_before + uid = users_before[0]["id"] + api["post"]( + "/api/manifest", + { + "users": { + uid: { + "import": True, + "notes": "mapped", + "mattermost_username": "testuser", + } + } + }, + ) + users = api["get"]("/api/users")["users"] + match = next((u for u in users if u["id"] == uid), None) + assert match and match["import"] and match["mattermost_username"] == "testuser" + + +def test_manifest_post_invalid_channel_entry_skipped(api): + api["post"]( + "/api/manifest", + {"channels": {"bad": "not-a-dict", "medical": {"status": "partial", "import_mode": "pick"}}}, + ) + med = api["get"]("/api/manifest")["channels"]["medical"] + assert med["status"] == "partial" + + +def test_file_download_local_upload(api, tmp_path, review_server): + """Download endpoint serves bytes when upload is on disk.""" + import sys + + sys.path.insert(0, str(__import__("pathlib").Path(__file__).resolve().parents[1])) + from slack_export import SlackExport + + root = tmp_path / "dl_export" + root.mkdir() + (root / "channels.json").write_text("[]", encoding="utf-8") + (root / "users.json").write_text("[]", encoding="utf-8") + up = root / "__uploads" / "FID1" + up.mkdir(parents=True) + (up / "doc.pdf").write_bytes(b"%PDF-1.4") + ex = SlackExport(root) + ex.ensure_file_index() + ex._file_index["FID1"] = { + "id": "FID1", + "name": "doc.pdf", + "local_relpath": "__uploads/FID1/doc.pdf", + "local_exists": True, + "url_private_download": None, + } + review_server["httpd"].RequestHandlerClass.export = ex + status, body = _get_raw(api["base"], "/api/file-download?file_id=FID1") + assert status == 200 + assert body.startswith(b"%PDF") diff --git a/tests/test_slack_export.py b/tests/test_slack_export.py new file mode 100644 index 0000000..0298b08 --- /dev/null +++ b/tests/test_slack_export.py @@ -0,0 +1,58 @@ +"""Unit tests for slack_export.py (mini-export fixture).""" + +from __future__ import annotations + + +def test_fixture_has_expected_channels(export): + names = {c["name"] for c in export.build_summary()["channels"]} + assert names >= {"medical", "zoey", "153niagara"} + + +def test_normalize_message_shape(export): + msgs = export.iter_channel_messages("medical") + msg = msgs[0] + assert "id" in msg + assert "channel" in msg + assert msg["channel"] == "medical" + assert "user_name" in msg + assert "text" in msg + + +def test_classify_file_types(export): + assert export.classify_file({"name": "lease.pdf", "mimetype": "application/pdf"}) == "pdf" + assert export.classify_file({"name": "photo.jpg", "mimetype": "image/jpeg"}) == "image" + assert export.classify_file({"name": "data.xlsx", "mimetype": ""}) == "spreadsheet" + + +def test_search_channels(export): + hits = export.search_channels("med") + assert any(c["name"] == "medical" for c in hits) + assert not any(c["name"] == "zoey" for c in hits) + + +def test_search_global_text(export): + result = export.search_global("doctor", limit=20) + assert result["query"] == "doctor" + assert isinstance(result["messages"], list) + + +def test_search_files_global_images(export): + result = export.search_files_global("", file_type="image", limit=30) + assert result["file_type"] == "image" + for hit in result["hits"]: + kinds = set(hit.get("file_kinds") or []) + assert "image" in kinds + + +def test_channel_messages_all_sorted(export): + data = export.channel_messages_all("zoey") + assert data["channel"] == "zoey" + assert data["total"] == len(data["messages"]) + times = [m.get("time") or "" for m in data["messages"]] + assert times == sorted(times) + + +def test_upload_path_safe(export): + rel = export.upload_relpath("F123", "my file.pdf") + assert rel == "__uploads/F123/my file.pdf" + assert ".." not in rel diff --git a/tests/test_slack_export_extended.py b/tests/test_slack_export_extended.py new file mode 100644 index 0000000..edd73ac --- /dev/null +++ b/tests/test_slack_export_extended.py @@ -0,0 +1,203 @@ +"""Additional slack_export coverage — normalize, index, pagination, search.""" + +from __future__ import annotations + +import json +from pathlib import Path + +import pytest + +from slack_export import SlackExport + + +@pytest.fixture +def export_with_synthetic(tmp_path, fixture_export_path): + """Mini export plus synthetic message edge cases.""" + ch = tmp_path / "synthetic" + ch.mkdir() + (tmp_path / "channels.json").write_text( + json.dumps([{"name": "synthetic", "id": "C1"}]), + encoding="utf-8", + ) + (tmp_path / "users.json").write_text( + json.dumps( + [ + { + "id": "U1", + "name": "ilia", + "profile": {"display_name": "Ilia", "real_name": "Ilia L"}, + } + ] + ), + encoding="utf-8", + ) + messages = [ + {"type": "message", "user": "U1", "ts": "1000.1", "subtype": "channel_join"}, + { + "type": "message", + "user": "U1", + "ts": "1000.2", + "subtype": "channel_topic", + "topic": "Rentals", + }, + { + "type": "message", + "user": "U1", + "ts": "1000.3", + "subtype": "file_share", + "files": [{"id": "F1", "name": "invoice.pdf", "mimetype": "application/pdf"}], + }, + { + "type": "message", + "user": "U1", + "ts": "1000.4", + "thread_ts": "1000.4", + "reply_count": 2, + "text": "Thread root", + }, + { + "type": "message", + "user": "U1", + "ts": "1000.5", + "thread_ts": "1000.4", + "text": "Reply", + }, + {"type": "message", "bot_id": "B1", "ts": "1000.6", "text": "bot says hi"}, + {"type": "message", "user": "U1", "ts": "1000.7", "blocks": [{"type": "section"}]}, + {"type": "message", "user": "U1", "ts": "1000.8", "attachments": [{"text": "card"}]}, + ] + (ch / "2016-10-10.json").write_text(json.dumps(messages), encoding="utf-8") + return SlackExport(tmp_path) + + +def test_classify_all_file_kinds(export): + assert export.classify_file({"name": "x.pptx"}) == "slides" + assert export.classify_file({"name": "x.mp4", "mimetype": "video/mp4"}) == "video" + assert export.classify_file({"name": "x.mp3"}) == "audio" + assert export.classify_file({"name": "x.zip"}) == "archive" + assert export.classify_file({"name": "readme.md"}) == "text" + assert export.classify_file({"name": "unknown.bin"}) == "other" + + +def test_normalize_message_subtypes(export_with_synthetic): + msgs = export_with_synthetic.iter_channel_messages("synthetic") + by_ts = {m["ts"]: m for m in msgs} + assert "joined" in by_ts["1000.1"]["text"] + assert "Rentals" in by_ts["1000.2"]["text"] + assert "invoice.pdf" in by_ts["1000.3"]["text"] + assert by_ts["1000.5"]["is_thread_reply"] + assert by_ts["1000.4"]["thread_reply_count"] >= 1 + assert by_ts["1000.6"]["is_bot"] + assert by_ts["1000.7"]["text"] == "[rich message]" + assert by_ts["1000.8"]["text"] == "[attachment]" + + +def test_ensure_file_index(export_with_synthetic): + idx = export_with_synthetic.ensure_file_index() + assert "F1" in idx + assert idx["F1"]["name"] == "invoice.pdf" + + +def test_file_record_unknown(export): + assert export.file_record("NONEXISTENT_ID_XYZ") is None + + +def test_channel_messages_page_pagination(export): + page = export.channel_messages_page("zoey", limit=2, offset=0) + assert page["channel"] == "zoey" + assert len(page["messages"]) <= 2 + assert page["total_in_date"] >= len(page["messages"]) + if page["has_more"]: + page2 = export.channel_messages_page("zoey", limit=2, offset=2) + assert page2["offset"] == 2 + + +def test_channel_messages_page_empty_channel(tmp_path): + empty = tmp_path / "empty_export" + empty.mkdir() + (empty / "channels.json").write_text("[]", encoding="utf-8") + (empty / "users.json").write_text("[]", encoding="utf-8") + (empty / "ghost").mkdir() + ex = SlackExport(empty) + out = ex.channel_messages_page("ghost") + assert out["messages"] == [] + assert out["has_more"] is False + + +def test_search_messages_channel_scoped(export): + hits = export.search_messages("medical", "doctor", limit=5) + assert isinstance(hits, list) + assert export.search_messages("medical", "", limit=5) == [] + + +def test_search_global_empty_query(export): + out = export.search_global(" ", limit=5) + assert out["channels"] == [] + assert out["messages"] == [] + + +def test_search_global_channel_name(export): + out = export.search_global("niagara", limit=10) + assert any(c["name"] == "153niagara" for c in out["channels"]) + + +def test_search_files_with_query(export): + out = export.search_files_global("proof", file_type="all", limit=10) + assert "hits" in out + + +def test_channel_stats_missing(export): + stats = export.channel_stats("no-such-channel-xyz") + assert stats["exists_in_export"] is False + assert stats["message_count"] == 0 + + +def test_read_messages_invalid_date(export): + assert export.read_messages_file("medical", "2099-99-99") == [] + + +def test_attach_thread_reply_counts(export_with_synthetic): + msgs = export_with_synthetic.iter_channel_messages("synthetic") + assert any(m.get("thread_reply_count", 0) > 0 for m in msgs) + + +def test_fetch_file_bytes_local(tmp_path, export_with_synthetic): + rec = export_with_synthetic.file_record("F1") + assert rec + local = export_with_synthetic.paths.root / rec["local_relpath"] + local.parent.mkdir(parents=True, exist_ok=True) + local.write_bytes(b"%PDF-1.4 test") + data, meta = export_with_synthetic.fetch_file_bytes("F1") + assert data.startswith(b"%PDF") + assert meta["id"] == "F1" + + +def test_fetch_file_bytes_remote(export_with_synthetic, monkeypatch): + rec = export_with_synthetic.file_record("F1") + local = export_with_synthetic.paths.root / rec["local_relpath"] + if local.is_file(): + local.unlink() + + class _Resp: + def read(self): + return b"remote-bytes" + + def __enter__(self): + return self + + def __exit__(self, *args): + pass + + monkeypatch.setattr("urllib.request.urlopen", lambda *a, **k: _Resp()) + rec_entry = export_with_synthetic.ensure_file_index()["F1"] + rec_entry["url_private_download"] = "https://files.slack.com/x?token=xoxe-test" + + data, meta = export_with_synthetic.fetch_file_bytes("F1") + assert data == b"remote-bytes" + assert local.is_file() + assert meta["local_exists"] is True + + +def test_fetch_file_bytes_unknown_id(export): + with pytest.raises(FileNotFoundError, match="Unknown file"): + export.fetch_file_bytes("NO_SUCH_FILE")