msft-deck
Produce a .pptx that survives Kody's review on the first pass. The historical failure modes this skill exists to kill, in order of how often they burned turns: handing over a deck with a broken/ugly slide he had to screenshot back, overwriting slides he authored, walls of text, delivering HTML when he wanted pptx, and asking him to open/check things you can check yourself.
Mode detection (do this first)
- REVISE — he gave you a deck he (or a customer) touched: make ONLY the changes he asked for, in place, with python-pptx. Never regenerate, reorder, or "improve" other slides. His words: "keep the slides I had... THATS IT". When in doubt whether a slide is his, it's his.
- RESTYLE — he gave a deck and wants it in the house style: keep content and slide order exactly; change fonts, colors, spacing, layout polish only.
- NEW — build from notes/transcript/md/conversation. Distill the BUSINESS USE CASE, not the conversation that produced it. A transcript is raw ore, never an outline.
Style contract (extracted from the canonical STYLED reference deck)
- 16:9 (13.33in x 7.5in). Build with python-pptx (installed, v1.0.2).
- Fonts: Segoe UI body, Segoe UI Semibold headings/emphasis, Consolas for code. Never Calibri, never the template default.
- Palette: text
#1B1A19 (near-black) and #3B3A39; secondary text #605E5C; accent/link #0078D4 (Microsoft blue); positive #107C10; warning/highlight #D83B01; white #FFFFFF on dark fills. Nothing outside this palette without being asked.
- Type scale: titles ~40pt, section heads ~19pt, body 13–14pt, captions 10.5–12pt.
- Layout: generous whitespace, left-aligned text, consistent margins across ALL slides (misaligned elements = "looks vibe coded"). One visual anchor per slide max.
Content rules (KISS — he has said this five times in a row)
- Default ≤ 10 slides. One idea per slide. ≤ 5 bullets per slide, ≤ 12 words per bullet. If a slide needs a paragraph, it's two slides or a talk track.
- Customer-facing decks: strip PII — no customer employee names, emails, or internal identifiers unless he explicitly says otherwise. Generalize ("a national retailer") if the customer name itself is sensitive.
- Output is a real
.pptx on disk. HTML decks only when he asks for HTML. Never emojis.
Self-review gate (non-negotiable — this is the whole point)
Before telling him anything is done:
- Render:
soffice --headless --convert-to pdf --outdir <dir> <deck>.pptx
- Read the PDF and look at every page. Check each slide for: text overflowing or clipped by shapes, overlapping elements, off-palette colors, wrong/default fonts, ragged alignment vs neighboring slides, orphaned placeholder text ("Click to add..."), unreadable contrast.
- Fix everything you find, re-render, re-inspect. Loop until a full pass is clean. Do not ask him to be the QA loop — no screenshots from him, ever.
- In REVISE mode, additionally diff-check: confirm untouched slides are byte-identical in content (same text runs) to what he gave you.
Handoff
- Save next to the source (or
~/Desktop for ad-hoc asks), versioned Name_v2.pptx style if a prior version exists — never overwrite the file he gave you.
- Pop it open:
open -a "Microsoft PowerPoint" <deck>.pptx
- Report: file path, slide count, one line per change made (REVISE/RESTYLE) or the slide-by-slide outline (NEW), and confirmation the visual pass was clean.
Parameters
The typed contract this capability answers to (JSON Schema — the deterministic layer):
{
"properties": {
"deck": {
"description": "Derived from `<deck>` used in the documented command at line 29.",
"type": "string"
}
},
"required": [],
"type": "object"
}
Run this — do not improvise
This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as msft_deck_agent.py and embedded as the fenced Python below (sha256 34c202d558e621bc…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to msft_deck_agent.py first:
python3 msft_deck_agent.py '{"key": "value"}' # arguments as one JSON object
echo '{"key": "value"}' | python3 msft_deck_agent.py # or on stdin
python3 msft_deck_agent.py --tool # emit the JSON tool contract
Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns steps, execute those steps in order exactly as returned; if it returns instructions, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent.
"""MsftDeck -- Build, restyle, or revise a PowerPoint deck in Kody's Microsoft styling, self-review every slide visually, and only hand it over verified and popped open. Use whenever the user asks for a deck, slides, a pptx, a one-pager deck, to "restyle" a deck, to make slides "look like the STYLED one" / "not look vibe coded", or to turn notes/a transcript/an md into a presentation.
Generated by the rapp skill from msft-deck. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""
import json
import re
import sys
try:
from agents.basic_agent import BasicAgent
except ImportError: # running OUTSIDE the brainstem -- stay executable anyway.
class BasicAgent: # noqa: D101 - minimal stand-in, same contract
def __init__(self, name=None, metadata=None):
if name:
self.name = name
if metadata:
self.metadata = metadata
def perform(self, **kwargs):
return "Not implemented."
def system_context(self):
return None
def to_tool(self):
return {"type": "function", "function": {
"name": self.name,
"description": self.metadata.get("description", ""),
"parameters": self.metadata.get("parameters", {})}}
# The procedural layer, verbatim from the source capability. The brainstem
# returns this to the model, so the skill's instructions still drive behaviour
# -- now behind a typed, deterministic tool contract.
INSTRUCTIONS = '# msft-deck\n\nProduce a .pptx that survives Kody's review on the first pass. The historical failure modes this skill exists to kill, in order of how often they burned turns: handing over a deck with a broken/ugly slide he had to screenshot back, overwriting slides he authored, walls of text, delivering HTML when he wanted pptx, and asking him to open/check things you can check yourself.\n\n## Mode detection (do this first)\n\n1. **REVISE** — he gave you a deck he (or a customer) touched: make ONLY the changes he asked for, in place, with python-pptx. Never regenerate, reorder, or "improve" other slides. His words: "keep the slides I had... THATS IT". When in doubt whether a slide is his, it's his.\n2. **RESTYLE** — he gave a deck and wants it in the house style: keep content and slide order exactly; change fonts, colors, spacing, layout polish only.\n3. **NEW** — build from notes/transcript/md/conversation. Distill the BUSINESS USE CASE, not the conversation that produced it. A transcript is raw ore, never an outline.\n\n## Style contract (extracted from the canonical STYLED reference deck)\n\n- 16:9 (13.33in x 7.5in). Build with python-pptx (installed, v1.0.2).\n- Fonts: **Segoe UI** body, **Segoe UI Semibold** headings/emphasis, Consolas for code. Never Calibri, never the template default.\n- Palette: text `#1B1A19` (near-black) and `#3B3A39`; secondary text `#605E5C`; accent/link **`#0078D4`** (Microsoft blue); positive `#107C10`; warning/highlight `#D83B01`; white `#FFFFFF` on dark fills. Nothing outside this palette without being asked.\n- Type scale: titles ~40pt, section heads ~19pt, body 13–14pt, captions 10.5–12pt.\n- Layout: generous whitespace, left-aligned text, consistent margins across ALL slides (misaligned elements = "looks vibe coded"). One visual anchor per slide max.\n\n## Content rules (KISS — he has said this five times in a row)\n\n- Default ≤ 10 slides. One idea per slide. ≤ 5 bullets per slide, ≤ 12 words per bullet. If a slide needs a paragraph, it's two slides or a talk track.\n- Customer-facing decks: **strip PII** — no customer employee names, emails, or internal identifiers unless he explicitly says otherwise. Generalize ("a national retailer") if the customer name itself is sensitive.\n- Output is a real `.pptx` on disk. HTML decks only when he asks for HTML. Never emojis.\n\n## Self-review gate (non-negotiable — this is the whole point)\n\nBefore telling him anything is done:\n\n1. Render: `soffice --headless --convert-to pdf --outdir <dir> <deck>.pptx`\n2. **Read the PDF and look at every page.** Check each slide for: text overflowing or clipped by shapes, overlapping elements, off-palette colors, wrong/default fonts, ragged alignment vs neighboring slides, orphaned placeholder text ("Click to add..."), unreadable contrast.\n3. Fix everything you find, re-render, re-inspect. Loop until a full pass is clean. Do not ask him to be the QA loop — no screenshots from him, ever.\n4. In REVISE mode, additionally diff-check: confirm untouched slides are byte-identical in content (same text runs) to what he gave you.\n\n## Handoff\n\n- Save next to the source (or `~/Desktop` for ad-hoc asks), versioned `Name_v2.pptx` style if a prior version exists — never overwrite the file he gave you.\n- Pop it open: `open -a "Microsoft PowerPoint" <deck>.pptx`\n- Report: file path, slide count, one line per change made (REVISE/RESTYLE) or the slide-by-slide outline (NEW), and confirmation the visual pass was clean.'
# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = [
{
"cmd": "open -a \"Microsoft PowerPoint\" <deck>.pptx",
"line": 37
}
]
class MsftDeckAgent(BasicAgent):
def __init__(self):
self.name = 'MsftDeck'
self.metadata = {
"name": "MsftDeck",
"description": "Build, restyle, or revise a PowerPoint deck in Kody's Microsoft styling, self-review every slide visually, and only hand it over verified and popped open. Use whenever the user asks for a deck, slides, a pptx, a one-pager deck, to \"restyle\" a deck, to make slides \"look like the STYLED one\" / \"not look vibe coded\", or to turn notes/a transcript/an md into a presentation.",
"parameters": {
"properties": {
"deck": {
"description": "Derived from `<deck>` used in the documented command at line 29.",
"type": "string"
}
},
"required": [],
"type": "object"
}
}
super().__init__(name=self.name, metadata=self.metadata)
def perform(self, **kwargs): # toaster:generated-perform
missing = [k for k in self.metadata["parameters"].get("required", [])
if k not in kwargs]
if missing:
return json.dumps({"status": "error",
"missing_required": missing}, indent=2)
resolved, unresolved = [], set()
for step in STEPS:
cmd = step["cmd"]
for key, value in kwargs.items():
for token in ("<" + key.replace("_", "-") + ">",
"<" + key + ">",
"{{" + key + "}}",
"$" + key.upper()):
cmd = cmd.replace(token, str(value))
for leftover in re.findall(r"<[a-zA-Z][a-zA-Z0-9 _.-]{1,40}>", cmd):
unresolved.add(leftover)
resolved.append(cmd)
return json.dumps({"status": "ok",
"steps": resolved,
"unresolved_placeholders": sorted(unresolved),
"note": "Resolved deterministically by the agent; "
"run in order. Nothing was executed here."},
indent=2)
if __name__ == "__main__":
# Standalone entry point: the deterministic layer runs with NO brainstem,
# no framework, no install. This is what lets a "simple SKILL.md" platform
# keep real determinism -- the host model shells out to this file instead
# of improvising the procedure in prose.
# echo '{"arg": "value"}' | python3 msft_deck_agent.py
# python3 msft_deck_agent.py '{"arg": "value"}'
# python3 msft_deck_agent.py --tool # emit the JSON tool contract
_a = sys.argv[1:]
if _a and _a[0] == "--tool":
print(json.dumps(MsftDeckAgent().to_tool(), indent=2))
else:
_raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
print(MsftDeckAgent().perform(**json.loads(_raw)))
# rci-capsule:v1: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
1---2name: msft-deck3description: Build, restyle, or revise a PowerPoint deck in Kody's Microsoft styling, self-review every slide visually, and only hand it over verified and popped open. Use whenever the user asks for a deck, slides, a pptx, a one-pager deck, to "restyle" a deck, to make slides "look like the STYLED one" / "not look vibe coded", or to turn notes/a transcript/an md into a presentation.4---56# msft-deck78Produce a .pptx that survives Kody's review on the first pass. The historical failure modes this skill exists to kill, in order of how often they burned turns: handing over a deck with a broken/ugly slide he had to screenshot back, overwriting slides he authored, walls of text, delivering HTML when he wanted pptx, and asking him to open/check things you can check yourself.910## Mode detection (do this first)11121. **REVISE** — he gave you a deck he (or a customer) touched: make ONLY the changes he asked for, in place, with python-pptx. Never regenerate, reorder, or "improve" other slides. His words: "keep the slides I had... THATS IT". When in doubt whether a slide is his, it's his.132. **RESTYLE** — he gave a deck and wants it in the house style: keep content and slide order exactly; change fonts, colors, spacing, layout polish only.143. **NEW** — build from notes/transcript/md/conversation. Distill the BUSINESS USE CASE, not the conversation that produced it. A transcript is raw ore, never an outline.1516## Style contract (extracted from the canonical STYLED reference deck)1718- 16:9 (13.33in x 7.5in). Build with python-pptx (installed, v1.0.2).19- Fonts: **Segoe UI** body, **Segoe UI Semibold** headings/emphasis, Consolas for code. Never Calibri, never the template default.20- Palette: text `#1B1A19` (near-black) and `#3B3A39`; secondary text `#605E5C`; accent/link **`#0078D4`** (Microsoft blue); positive `#107C10`; warning/highlight `#D83B01`; white `#FFFFFF` on dark fills. Nothing outside this palette without being asked.21- Type scale: titles ~40pt, section heads ~19pt, body 13–14pt, captions 10.5–12pt.22- Layout: generous whitespace, left-aligned text, consistent margins across ALL slides (misaligned elements = "looks vibe coded"). One visual anchor per slide max.2324## Content rules (KISS — he has said this five times in a row)2526- Default ≤ 10 slides. One idea per slide. ≤ 5 bullets per slide, ≤ 12 words per bullet. If a slide needs a paragraph, it's two slides or a talk track.27- Customer-facing decks: **strip PII** — no customer employee names, emails, or internal identifiers unless he explicitly says otherwise. Generalize ("a national retailer") if the customer name itself is sensitive.28- Output is a real `.pptx` on disk. HTML decks only when he asks for HTML. Never emojis.2930## Self-review gate (non-negotiable — this is the whole point)3132Before telling him anything is done:33341. Render: `soffice --headless --convert-to pdf --outdir <dir> <deck>.pptx`352. **Read the PDF and look at every page.** Check each slide for: text overflowing or clipped by shapes, overlapping elements, off-palette colors, wrong/default fonts, ragged alignment vs neighboring slides, orphaned placeholder text ("Click to add..."), unreadable contrast.363. Fix everything you find, re-render, re-inspect. Loop until a full pass is clean. Do not ask him to be the QA loop — no screenshots from him, ever.374. In REVISE mode, additionally diff-check: confirm untouched slides are byte-identical in content (same text runs) to what he gave you.3839## Handoff4041- Save next to the source (or `~/Desktop` for ad-hoc asks), versioned `Name_v2.pptx` style if a prior version exists — never overwrite the file he gave you.42- Pop it open: `open -a "Microsoft PowerPoint" <deck>.pptx`43- Report: file path, slide count, one line per change made (REVISE/RESTYLE) or the slide-by-slide outline (NEW), and confirmation the visual pass was clean.4445<!-- toaster:generated:begin -->4647## Parameters4849The typed contract this capability answers to (JSON Schema — the deterministic layer):5051```json52{53 "properties": {54 "deck": {55 "description": "Derived from `<deck>` used in the documented command at line 29.",56 "type": "string"57 }58 },59 "required": [],60 "type": "object"61}62```6364<!-- toaster:generated:end -->6566<!-- toaster:generated:begin -->6768## Run this — do not improvise6970This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as `msft_deck_agent.py` and embedded as the fenced Python below (sha256 34c202d558e621bc…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to `msft_deck_agent.py` first:7172```bash73python3 msft_deck_agent.py '{"key": "value"}' # arguments as one JSON object74echo '{"key": "value"}' | python3 msft_deck_agent.py # or on stdin75python3 msft_deck_agent.py --tool # emit the JSON tool contract76```7778Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns `steps`, execute those steps in order exactly as returned; if it returns `instructions`, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed `rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent`.7980```python # rapp:deterministic81"""MsftDeck -- Build, restyle, or revise a PowerPoint deck in Kody's Microsoft styling, self-review every slide visually, and only hand it over verified and popped open. Use whenever the user asks for a deck, slides, a pptx, a one-pager deck, to "restyle" a deck, to make slides "look like the STYLED one" / "not look vibe coded", or to turn notes/a transcript/an md into a presentation.8283Generated by the rapp skill from msft-deck. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""8485import json86import re87import sys8889try:90 from agents.basic_agent import BasicAgent91except ImportError: # running OUTSIDE the brainstem -- stay executable anyway.92 class BasicAgent: # noqa: D101 - minimal stand-in, same contract93 def __init__(self, name=None, metadata=None):94 if name:95 self.name = name96 if metadata:97 self.metadata = metadata9899 def perform(self, **kwargs):100 return "Not implemented."101102 def system_context(self):103 return None104105 def to_tool(self):106 return {"type": "function", "function": {107 "name": self.name,108 "description": self.metadata.get("description", ""),109 "parameters": self.metadata.get("parameters", {})}}110111# The procedural layer, verbatim from the source capability. The brainstem112# returns this to the model, so the skill's instructions still drive behaviour113# -- now behind a typed, deterministic tool contract.114INSTRUCTIONS = '# msft-deck\n\nProduce a .pptx that survives Kody's review on the first pass. The historical failure modes this skill exists to kill, in order of how often they burned turns: handing over a deck with a broken/ugly slide he had to screenshot back, overwriting slides he authored, walls of text, delivering HTML when he wanted pptx, and asking him to open/check things you can check yourself.\n\n## Mode detection (do this first)\n\n1. **REVISE** — he gave you a deck he (or a customer) touched: make ONLY the changes he asked for, in place, with python-pptx. Never regenerate, reorder, or "improve" other slides. His words: "keep the slides I had... THATS IT". When in doubt whether a slide is his, it's his.\n2. **RESTYLE** — he gave a deck and wants it in the house style: keep content and slide order exactly; change fonts, colors, spacing, layout polish only.\n3. **NEW** — build from notes/transcript/md/conversation. Distill the BUSINESS USE CASE, not the conversation that produced it. A transcript is raw ore, never an outline.\n\n## Style contract (extracted from the canonical STYLED reference deck)\n\n- 16:9 (13.33in x 7.5in). Build with python-pptx (installed, v1.0.2).\n- Fonts: **Segoe UI** body, **Segoe UI Semibold** headings/emphasis, Consolas for code. Never Calibri, never the template default.\n- Palette: text `#1B1A19` (near-black) and `#3B3A39`; secondary text `#605E5C`; accent/link **`#0078D4`** (Microsoft blue); positive `#107C10`; warning/highlight `#D83B01`; white `#FFFFFF` on dark fills. Nothing outside this palette without being asked.\n- Type scale: titles ~40pt, section heads ~19pt, body 13–14pt, captions 10.5–12pt.\n- Layout: generous whitespace, left-aligned text, consistent margins across ALL slides (misaligned elements = "looks vibe coded"). One visual anchor per slide max.\n\n## Content rules (KISS — he has said this five times in a row)\n\n- Default ≤ 10 slides. One idea per slide. ≤ 5 bullets per slide, ≤ 12 words per bullet. If a slide needs a paragraph, it's two slides or a talk track.\n- Customer-facing decks: **strip PII** — no customer employee names, emails, or internal identifiers unless he explicitly says otherwise. Generalize ("a national retailer") if the customer name itself is sensitive.\n- Output is a real `.pptx` on disk. HTML decks only when he asks for HTML. Never emojis.\n\n## Self-review gate (non-negotiable — this is the whole point)\n\nBefore telling him anything is done:\n\n1. Render: `soffice --headless --convert-to pdf --outdir <dir> <deck>.pptx`\n2. **Read the PDF and look at every page.** Check each slide for: text overflowing or clipped by shapes, overlapping elements, off-palette colors, wrong/default fonts, ragged alignment vs neighboring slides, orphaned placeholder text ("Click to add..."), unreadable contrast.\n3. Fix everything you find, re-render, re-inspect. Loop until a full pass is clean. Do not ask him to be the QA loop — no screenshots from him, ever.\n4. In REVISE mode, additionally diff-check: confirm untouched slides are byte-identical in content (same text runs) to what he gave you.\n\n## Handoff\n\n- Save next to the source (or `~/Desktop` for ad-hoc asks), versioned `Name_v2.pptx` style if a prior version exists — never overwrite the file he gave you.\n- Pop it open: `open -a "Microsoft PowerPoint" <deck>.pptx`\n- Report: file path, slide count, one line per change made (REVISE/RESTYLE) or the slide-by-slide outline (NEW), and confirmation the visual pass was clean.'115116# Ordered commands lifted verbatim from the capability's own documentation.117STEPS = [118 {119 "cmd": "open -a \"Microsoft PowerPoint\" <deck>.pptx",120 "line": 37121 }122]123124125class MsftDeckAgent(BasicAgent):126 def __init__(self):127 self.name = 'MsftDeck'128 self.metadata = {129 "name": "MsftDeck",130 "description": "Build, restyle, or revise a PowerPoint deck in Kody's Microsoft styling, self-review every slide visually, and only hand it over verified and popped open. Use whenever the user asks for a deck, slides, a pptx, a one-pager deck, to \"restyle\" a deck, to make slides \"look like the STYLED one\" / \"not look vibe coded\", or to turn notes/a transcript/an md into a presentation.",131 "parameters": {132 "properties": {133 "deck": {134 "description": "Derived from `<deck>` used in the documented command at line 29.",135 "type": "string"136 }137 },138 "required": [],139 "type": "object"140 }141 }142 super().__init__(name=self.name, metadata=self.metadata)143144 def perform(self, **kwargs): # toaster:generated-perform145 missing = [k for k in self.metadata["parameters"].get("required", [])146 if k not in kwargs]147 if missing:148 return json.dumps({"status": "error",149 "missing_required": missing}, indent=2)150 resolved, unresolved = [], set()151 for step in STEPS:152 cmd = step["cmd"]153 for key, value in kwargs.items():154 for token in ("<" + key.replace("_", "-") + ">",155 "<" + key + ">",156 "{{" + key + "}}",157 "$" + key.upper()):158 cmd = cmd.replace(token, str(value))159 for leftover in re.findall(r"<[a-zA-Z][a-zA-Z0-9 _.-]{1,40}>", cmd):160 unresolved.add(leftover)161 resolved.append(cmd)162 return json.dumps({"status": "ok",163 "steps": resolved,164 "unresolved_placeholders": sorted(unresolved),165 "note": "Resolved deterministically by the agent; "166 "run in order. Nothing was executed here."},167 indent=2)168169if __name__ == "__main__":170 # Standalone entry point: the deterministic layer runs with NO brainstem,171 # no framework, no install. This is what lets a "simple SKILL.md" platform172 # keep real determinism -- the host model shells out to this file instead173 # of improvising the procedure in prose.174 # echo '{"arg": "value"}' | python3 msft_deck_agent.py175 # python3 msft_deck_agent.py '{"arg": "value"}'176 # python3 msft_deck_agent.py --tool # emit the JSON tool contract177 _a = sys.argv[1:]178 if _a and _a[0] == "--tool":179 print(json.dumps(MsftDeckAgent().to_tool(), indent=2))180 else:181 _raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")182 print(MsftDeckAgent().perform(**json.loads(_raw)))183184# rci-capsule:v1:H4sIAAAAAAAC/5V62bKj2JLlr8jiPlTkVUQAYo7qKjMGDQgJhMSoyrIK5nkexbVb394bdE5mdpf1Q4dZ2EGwB9/uy5cvF/rHF7vvorL58rPos+zbF89v4sHu4rL48vM//vEljQvvy88vdhFm/pdvX7K48L/83NHfvlR2Y+fgiee7KXjQlakPZnz5X8vnf//yz/9cVmrdJq7eS31h+zjzvm0av+1emf9tUzbgeohbf2NvbuXoN7cyLrrNMn0TFxux9F7/0m6usduUbRl0m2VaXITfNq2fBd+Xqf648Qe/eW3aLPb8DVirt7Ps9W1jF96mLLLXJlqu4m5TgmEb8D8OYt9bH1dlVYHLsvKLHxsNGDFGfrGstukif9O34MJu03YTADPt1ahv721asPymqrpp+VsW/vfKDsHg94iu3Pz+5eOEv3/5YyK4ndup/7EAGJKVZbrJYnBr2e2hWpc9vywG5kDgcVF2m3XIEDv+xi093/v9y+oxsFLXN8UGjPBbyN50jV28nQzZxSYHhy3AEGAgMMIvujWMP0B0/MnOq8xvQUhBYKIy9xezP0Meg2dffv7jSwaiDCJVvQAeCjCr7fyqXVHg5gsIFm9tvtvAwj/D8mfogPHv4P9Y3PMHVlDyn//5T7BH0XZN7y4GgSW//G2Tt0H3fRn/e/F7cWtKr3cXKKyTgVtsEPG+GeIBOOwDCx8xL4vVa0HctN2mstv2x0YFn6O47comdu1sE9hx1jf+Ji8Xd3fgyaZN4yzb+BMY1C5eXD5+W3BWNgDwmzLYRCVYOuj8dfXXxgFuBgBZvN3+XIEEwPcG0jusmzHuInDtNAvyoT7MPoG4GGN7yy4gNL5ftBGIp2MvSFjmj03cLWt9oAGMfiegD7JjBABuF2s6f+q+gX2yeIEtGH1Sr5cVpMuE0S46YNwHDAGcAVaXQVGcL9sucYLcaDESHL4I282r7DcuQMj7JvjULFn0Y3H93/62uQI/gb06fw3P5qtXvp22uvi3ZRDyY/P3v9/3uvDY//3vm9/7HYxgiyGhPfjr4h8+Abe+rhnj9iAaud/8Buzpwa7ez3cKyNLFWsPnApeGH8dvU3AYkGlrQKrMdgE9rN59I/H7cs4fG2lNz8YPQaI2ducvXLJGb82M3xcUN8C/AIYl2KD58O+PzQmcZAQDQRh//5L6frXu/+F9YQnVjx8AQidGfWwE9fcvPzbG4mZgilf2Trc4fV3P/ggvWA44B9ja/ct6Bby4e7tnTeT/6Z8P3yxxWgLXLowUv0EclYBqVmrzf25W29wShBbw4DL6vd8boSCD3S57/euH44C7wErfwPCsbMDftrLdlR0zG4QD5EWZxW20siCwD13sk/bGn7Y5CxtvgqbMP7jkL0ySexCwAji7ffPHhgdZs6TPYjGrPQRp/3hstMd+wzGP/bdlgXdI/zLpncHVO60XDv6xYf7CVosTGxskXAPC+OZdgE5g+MIZn7B8LG5ZHdKAs2++gpRYLvwPu9ct7aIs1pz/INHGD/zGL1x/9fmK3e8bhPhJb74i6A8UBX6fNuQPPC5++7FZS9L/QNrm68JVIBGXhByQH/CP3W8/lmUOi8t/Ak8+/LD0N5oA3OkAavr2l1ubh5/HTpl54Fnk2wtptJCfV5HdLpjhAPuVmf2uKwuxf8Kas7PYaeJPZyxn68C0DOAcnCSw+6xbbbjZmd91ACwLQWx+/Q1hEQahf22+Fr7dfHdA7qS/rdj59TeURRmU/vWvoGACH3o2KJQfkwgY3+MceGK7LsAaBJyegjP8+hsMkxSP/QK2f/2T4Z2s93/7V4CoFvAWgDPYFCY5BAbzR7spwAmhKA6jDPxfFucplIWR5WEUd8vow/rv18LbwIgUsArgOHDucuWmJejtAvOVcar38daYLDB2/GXIShDr8dVXBdIFxHvxQNyBirb5bwyuukUVvMlrcTq4idDLzSU6GwRdMY8i2HLLtVdB0m4Q+Af+8WBXvZ17WXPn52ZlGJCZ7yMsqQVQmvmgXoEohWtZWOkZuBVEdU3X3G5CABvgUeC1dsNcLp8M8zWP289pfubn/sIA//YhAtr/o8QDSMrFp5ABUXRBVdhUn1QG9pg+U4P7YImmX1zwVRRAQv7JOgBsm9aOvU8WB0Hr4hwMBOi3N005fuQF/wbWMnNHYMAjf3DmYga4sv/c/cfnKBxwB8gNcIg/nn37Y4Xdm2nXR+9hPzZC8Ad1Fr4PHoJVgXYMG7uKPli0G8tPd63VA2RfurCFm65x4T6KyfdgJbk1tddEBJIirjY3QfiT2Iryj9qzWRKofPlgXztfhJufA2HQruUC6BW/KYCXwaZFt+jCpt30BfDmWpL8qcpiFwAM1HT71b4rygjE6o/NcS0/WTyDUvf7FxusveAJrNT4HVjeb0AcN3HwpqdPSxYDwFGXortQH9Bm72Rajyf3XdWvlAiC44OVfq0i6J0xcZv+eBf/9dRvXfupA/6QqMuATyrx8zJZq9KbRP+ilsOFTb4CxvxeALrqYtsB/PrhtxUqcbuaPUYleFAtom5FCuuDPRZCyrJPlWEXr3f6gikeUK4/P1TC3S9Atfq5+QWoI4gBDX//vmTk6tfv398VovsONErlBeAGSDcvboBujJt//6t6/PVZU/1FSAGTbvxhpbVVFoPK8hb+i4j9AWLPrbLGt93oA2jA3g+KXBRXkJXjSjWAc7N4Ff4OCGxkVwsqlhGZXVXLiM8EBXeD4PsnG30W2bEpAdl90PFnBQZIDpemYknxZe5maAHOARk6ZfOnzFtAB4rAQgKrwAEeXqr6aiKAEQfQli7SzfYWNQIg9A2gEYDBW2P0roFt9y7lh3h6n/8dgUV+BaBLW/QQiHSxKiJwCeioAqT4Y3MpywqsBko4AFgAsnJVzUvk3My3l/perjUcoOlTQTrvzkRhFodXf8mtPxVt+67CYMK31RpgGwaSvdi8ZeIqvr8t54nf+QFg68XAqasE/bkcCcjLfLHrLRA/CcAGSHNeHbB/zcyltgPa+pRFX9slk1a3NX3RLvISwBUA4i9i9BP6JwAYEMY31z2Wh8Uyb+mhFgEIRLD7lqu//hvi/TbtyurXu+Hzvkelu2YXiMOiacAJgIW/JLD5fw27j/RcZduS6ku/FZfN58jPNuPTa2tWfip//6N5yfz/y2RQ24Gnl2YVqHeQQP8/zdavZfrdr8oGVK917cruoo+OFfgOOPnb0l9uFnm1kvOHisxt8PzrO2LQh4D9bW00PyXyd+f1/UOHvtXZ5isQkr+9246PIH4qvj9K14qv0f4E2NoLAqXR/tFxLnwIusAr6AH59/cH69cJoAVp2qUTBcIRWNnF/vpp/Yph/fvXLxT45YuKTzH46+2NX0vr7n2qa690+yUl/cXSPF8bpe7tgx29WNUBOQFWWsoI6Hz/CdrUxq/7GLRi70b543npJCCRvoDHiyADCMmBNcunpctuhmX0P76sHeZy4RAYmHPCWoF5/+MgXLd2+CV+FE+6IbYKMU9X2t6Lgk/C+TMVQPVWpgMs7Fni9MBd7VHcDzp2T869o8+QVWyvQ/4gJzXsS1+exqkp456J00GmA9/e7nQoOE3U/VLehkoegvpcmLj1Ot0D8/XScv4oa9F4pI6ia7k0Ue1ErRKNE1qnY9RSuBpxmbbtR+W2J6b9QUztVOPjEO+uTXD2FC5Hj1Z0eoqpkWLyhVa54NLys6Af7qqo6dMjttzufj2A2OE4rvYZO1k6m+Fn2VdUtU6VKDuNPN1ahmc2ojDGWzY6isfoIYb3u8yFYY0cq5AI21ChCSy2Nd441brOD7RqnS97+qCZZRJQVybQVOKoOKZAi8q2uzUYdof8YWdzAk2jmnFjDU44YFaPGwfsfnqqXle7Bc4fLAaTGuw6VnYZyaqlPC3LaAcSNuL9UST05+nAjExswGptTKdOCWG0YrYmbzHCkwlZZs9lomdJNBUEOQNdZkop0Azv9exkecYzurT5Vhn3givvj96UFLJAMactA+7VVxF2n69UF5Xi8bzZo+mezrvUspAbKh6GkxlZySuEzlv9jCkvraeTUUQNVlFaITdp+my1N4tpJuD/M2dIlaw5OvG4Z+OlDQVZJ1+DW7rPyyCbApzoPq+FLn08AaYvL/JMUyPFaTb64giG1c4sFnJMlBLhGZIvR9FLGwV49NDctNi/7p/3hLkbagpi4u2HwLpTt3SuWdi5eVaG6+wzU4j9XhxV9MUPGj9p+6PshcUOF15lujuxTH7iKeysW9bzqZ1FogzGy+OZ7TClhfZCx3CmJWpa/lAg5FlqyJM1GRTB/ZxzEIKgnSCmakjcQloBkQS6fXBXnEjqSj/teKYk/Vpq4Svcc8mWbfdpe9ghg0/sDs6l151sBt6aMXo+vwiXyWvilaop8bCU1hIQMTzeMeHqglmd+LrsCealxTdN23tPw7a7mmJNUlNe2JAJ0YWlIOuIPK5zxDHuNfQJqleyI7JVpDl9PMqdpXK5syej+xltYLRWLtzhKo7jFRE572LYUBtWF8a2lPNckUR1m5/ejteGQzZs2dd4VdMoftTWfTx1nk5gdwZPS0o57+r2OipumIkK7Jg+rWWxQRC52WTOCAHWeFrEfXf0d/trgEuC9BpoyrwLzMRE9ImPdb5RAzlXdmeHwu5HU3EectvflGDmkTNOEocQvjNX9jxreM1ESmRyp3uS6QfzJopKnYoqemzHZquyfglDyaOq8k5z8bA0z1Ic0ALHZETLkF38OOyAGufEPa8Iolg1Gndk9AO/d49Nzdt1EOy5Wy22Ev1grmJRQixXHaWyuluiIDqPROOxpgom+u7Ar2LnpwyaeDUszxF26NW6VbcBohm0ZfNnxjzufSdTLzfdOdFAbJecEpSkIMahi4WlrigW/+RCGqd8TWle7f1AHJppTvfkXrCP99OcEUpb7znsmtK3u90KWXyrewuekXa6xWdmziyuu1LiscWiGinMtOIMufUf2bXc2wKPyO4wn6Mo9/YFfbfCW4CNIVf0HVHFtwKqEr5rn5CKH2clHq/Qo1T29HnQnZtDnsb74EniiQPLONFDoqDuXPOWrZKxv4cGOynvmR81JM0WhhbyE7t35bxRTqfuyG5L12VPZ3ZHScWEsfQz4C9tcmivQGWFmTAadUXfhJZSImZ4MbpwnEas4R6XCoBq0mnhgbh+c01FEYHZ9MFpJ/z2IK+hKCtieWb4BAkvB4hwQGPCq45RKwJ+45Tj83g6864GQ4VjQlueAERSZRiyte6x0cKgSatlMeOLgy5vNdyQGQZqYCa/lxxGs1dYSAu51y/0w8QYNc3yO0wHyXVSLgKTlee7QhbzNsOv6OllXm2q4m6cBEHKQaOlIK8sEueONsFVrx2DntNwq6vwgZstTH+qoTmUyvN1d0noLHT8IDxwxTyAErPtqxnnssOtHbmy8qqtONb7cKzdXth2PQRNbkiBmvY83bDqBlktkkqEtacYRguJmjJJyHS9ehcggUSo5+uDfNBnnuW4jOT8Uz8UhrB1o7nO70G4r7alMPKcWQunKo3vYwKRo6UHhG4eUSHrH2H2VGzkQMUHSwkG7REnTHphTy1nYzIh6BRxY8/nAAqvB8ZlRHG0nszjPmmFzlqMlxkXxQmE8eVoe/5eDNpcn7IjMxvdAyZqz7+FMugi9YjQz7DLcletirz7AwpqeTS14XYdidft/nrQe1ApexZIJlEJid1LupZ1Y0macEiKlhRe0uMwYonTHDLC60ibn3fkFvdnIRQ9ReC3VMo/1dqXbodBumayIFU3JmFAoWsNgnFZkaqrBhitj5iljhInyIe0ipMjO5WJ7NOzcvYz3ugE5XxIYppEDAclBEZuaZSIrvvRtcKGpYLoGOpZRAWdLxanHTMKbX9kAYg4KtDI7ck8bffoSX7d6Oc+GO77+35U7w3ncZVu6BEgNM3pUit7OOmx79v4Lkg4cjK1I9AScOK0xW6sLw+eZu884vY7i3Xlotpz5fFK3ZRSiGWfFOSiG9ApO0fF8JrjPau2gnO6PcP64L8subhx5iyaL/Za2ocrJmATZSSe8uR4oBxl/c4c5kcptgqKYHjNbc2eIz2hcmLaa8mMpbTwoGdVjlcPvUGezCkg2pu5Y2/kU5aBTNMZv7wBAcCe9udS8ET8PLvXMWyN8KRJ0s7lmVdPPIpz6sNpPvB1t+UZE+5O+JH09+hlvyf96FJFIy0RpSWW9LbRzuVgPlhEkcxtU1yu5FZJe87idTEHSENFCcWKajyYxFm27OKGni+lTBuGJrp3v32ysO1xaUXq+GOMBrGZ48s+FiRLeURag720xMhUgpfLU7u/Z+pL6JmZO6K8fPFGUN86F6UgpqUVK3ei7lAED+N1q2alEcI9xUoB0x1470xfdrcooCCbj59mJ9RKLk2CO7Xb+4x2bKQ7h6H2bnds20RlsL1lTgkLTN+7NTiUw6U8pEUwQUN9XNxexL1B6VsSQqFxV4+wENfe40p7d8KUFeaanuBCf21FX5RE/w7tZjqIIL33zkMVySSteyRXNAE8vsrtKbRf3SHQjoeBdQLtgD1lvEJIktAOuhKBqNVn30QhSJ1GN+Rj7fIYWBiVnigDnyCGIqFWa9RjrAbR1PHF5UWll840orMfdDn6KOuQ27ZHumBtJWTPiqE890Oai3abVRrfbW8V3/XN5b6dk5CPbukU2T1PMEKBbIOMeFxPCd5NvujHujMIos5j8MWVb0ihjvw0pkJ1DzNKsK9hHuhmAOGk7eHVBd7ju8a36NmERltBJhl7+vqth7Invu1V8/LqKlRGleSaHLO9h9z8xkA8uyJSOkzbzgjMG3UbbroRTn1uWU3xGOkEgl5UH7z0YqvuXuxWNV7QxO9SkuI57HlMBQXv0izULtqxkhIIe5as0PApzovtEeG1O99Cp7mFS/Lik6ys3YhWJkzIi8V9fB2l3eNyq5uq2p7VgngMyMDs0+y2vd9xgRdLtaqiCsMuEIUJEBbsrkoOlRzxaBk7cLdPkpR6obkgPBygdFVNpYDqvkQoPdk9ZFTDLkiPTS0JhC1MnABks+LgXuPkGulXin5ozZQQxvGYEYUMkwZZTQ4N04SByaMsVtDeqbwLoCOnuN4R7NENAa/ZXB47T+Eo5maBqV1dub3jVHTMIBh6cujQTCXez6jr8Kx9Em2OtT/CcP1I0URX8ieVKS88mLwKoRKTtKWORgLjHF0toAgF90WLr23fpuztoHUG0uI2Udx1uJT6yqJC9mTf4xy6ybbZOMbVY2HWIBHYMNpdukPtqKqJ68QkFE2rd6o/EM/ZeUwkFssWVUTeSR1DzGBbdTD5wVWlmiozx2qGLkTwqzPtxYKfo5mMHOI6aEBeS9B4UbHKTD19n9NE0c5Uo1q+eiqgM7ctEFo+JI4Jqkg/btEmaWqX1HQetgACzrYX8E1T1wXamp1TDeVLolBxut6Wc+wIg858vjwfL3NAbI/EFXI7mK0IJ7GBhIuux4JzyRG9pPIRoRwzsF6I6FFtupPQ58PXo6NBwPONTLLtZXTcHaq6Pp6gUVllULSb7PkSK7rb3Owt8sS8Chv25DjneyTzRVZCYNBH+yIUiYSvm0KMJGqP+oY24YTAgqzYhbtCyxmFrtXB7mckhdEHcRysC+wQu7t50AuBtPs7PXPk3oTp2lJLMcHvSN8IZX5FJPiZBMcKGRLqxcpZJEfCqHZd4gbUZSJ2yjiMXVNPiUQH7TamTKWvtwiWkJxOqgKFN971mDdRV/Squn1NAf261HTKFa5nnOPBNEDD3qU37fRQ7CfJOw8jO+D0Oevdp4XWCelfnrf5ltOu5GSNd7zf57mx+113OOvtA87pxEzqOdL0Ag7IC+s6hbnDco/UgVz2D73NPs2hd+ptq7o73JwjHkbPCSyHOzmSWDiSzs49mHzf2JM8GjXz8CS2r0dzF63ttjCkgB97vnDnE9bc9r16KOiyZB7t3rw6eRanHEpaGXp89cJr2EKFbE5TIdCZnrEk0Kb4OR93iXOHciWVdkjTb09pHAvjlnJU7MI0uErIT07b+kR31khl2k86dAvp4um6R9oidmpPs307donxOsylmQ91/qqbGDa2ltqd7/MoQkfQUhB3w5ng+YyebtIDi09JQuc+N0z4i+rKAfdY0Ua1TAYd4/S83mfrAfwBJGR8z0g47FoR9w+OQb+m+oaUx1Oizfj46kWMrOGrau2Sru6JvYO0Z9lNVeqWmc8hHyH5fOsgZVftcGb2i4Y6jgQTYcJETOeLalnyszsP/cFV4oF0CjZ2nX7gM69xeieWesnLX6BmXfZQrDjqyaHcRnPh3EuIpjgQha2rAimFW1OD7y+vm8wLGaidLMfSvg5nBgrQk9vCg9ne5HMfhumOEMlX4rtHpSJQRb1dKPRKlw2pbZ+6QBkgVLCBpB22f00NTg7bwn9Klcq3eIzkwzWiJbrrtRN/oPa3ZjtulRfogHivLWiLvyq4mNimoj4LehZQinRYKrGvVi5lfE53nKuT9DMizKMgq0iO9+LRk3uRtOEUp9Nyd+oErDM7sSe1XUTOpg5bsUm8poT3LCUbAs9IBiTRyahB7NPDoxWjchAa1GrYLJ5G0CeVdzjSKQo1+Cl3eCaKmSZuJpfjvOPJrNsbGuBTt6Pr/QxyWbxbAIZUFLnNQUcLpZic67HXLoH72sHVoQoMTnpIuALFWxOUhGmau214rCgyzgZ2Gkjj7lM5jY+YMZn1ySd68kHQBJTHs3GFcyIzbVBUxGf6JG3G304y7XV6fNy1RHLBJUpSCpLYyjahd2gwO2Vc7hN6T5MVjYTArfvWO3VIBslYcSmdKIcw2+Bj/NrhTnI1pBLjq6S/sqy9y60axaPSu6bOiz4fk/i25+4dZ+hNJ9MUJ0hFLPHTodHn7tEH3uSdDjbv+kvl7lzCI9Uo6M83XXefmIRUgV8dsMmbjP4yGM3lwaWqerDq9JCRBiRO+sCek5vpzoQx19ZxKkzdnbf10dfPFGl2kqSBWmzSNisrpDmcThwB5EQ86HlamaOE89iMFecdeVMObFadb32cwpRUwdN26r3yRXcxXjDoARfqsNUCqtqPtmPs4wfSCKZrlnblsH79PIy4hPZUKtlG2yN5Nh1SKnG8KfemDr5olFdU20QD8r5kLkfUYThy+6ws+NQn/cwcOBoATTMluT027pEYnQhv/Z2w34VbguwiPqldQhuIhtWHWcFRcmbVAIFC12vxouUZX66uL8IbWefZZ0lVHQk7wNouOnfFLF+Fy0zu9DE411aZ6Vc4KC8yZGwTC2n42bwz+nwKzP7E5hQoeC0GsfMEEmWk2ZKT8PaYkUSdR0NF5rOGVo/b9jnszIKrwTElkqrd6NJ3Tod3vEzCcsQrFMLZxAmXrh6aHC67SjsMIjVze1zkhHNtklICdzyrdhhqKAoQyyy8f2G9UdfmNbKZA+NAQXYln1Z4QR9hgMrnOg/xAmgMSp2srIcTgpTI8qUDYY6MEIm5z4KcZOgga23CK6F0jY467hZQs/PYWsypyUPau88+PHTG4wu5RfqQv0y4iUpe7fgXGEK425ncwbP6moBadQmio9XETcLb2euqiwS6Civqm9QMTuQ+knPzCDWUcA537VaBhrvaxViqQo6XPu0LWbrIeWjPYQ0EVOiSUd0HSEyQxenmJFX3ojNxt98mSX0/YdvQuNC5e8qplMFm89lIzsWaJ92gqmeVJFByaumnK10Y+pjj5CURVKdVW4+mrFrAp53M6jJ378ca001Pzl7e1stznEUkeqKkJGv8YkRkOWtbE2v0Adn6z7o5Xf3d1EsjuVcf07M7Pl8zaSe43QTdTtqJk1IMz7t+DFHHjR2XHvyt1I1WfLn4jXuBvQ60Dbn4ulvPbDo6xpy20tw19uk8i7ZZY8xudxCufmtEO1PAxKHvLLnD4opxz7GouscdojM2RwzVOUjtLjzm+hOvJHgHR6AHOKKNn1oPkMMaHbPEfGobDLrtalJ7sMDANjtesgchSwfiUN0BHMX+6j6fGB7Al1mGa+k+PgiRO7mSjtMYYaSkbafuTGXe82FN3vGJZiZ/M4TBWBzu0/5TPANPdLiAmeoTt+6RTccZAjmPG7eHzZcVlaMHPJLBh0J98Hmm3kjtJj9gN4EKbKynC/QUcmKCE5SMXMNCK1tWm8bdUySyze0LdJbR407VeQvdBgXikpVoOlXsuheePL8uKlo4ezcGThMtnRMTHho49UrZpQtkVMa4VCDb/VBmxDg0hfm02AboPua1qwadaUyMOopMXzZ935hPiXTaWm69Hr2bxx63seZFpnodjcTuEU98UCWqdCDloxoEp8m0UC311FpJYiyyJVo6hL0RELvBCP1BAHqKMDOQCsYBknnnGGAsQTqWa+bOUOA134kqUGU1VOkCrknnaJdeYoM95bXz0NER35p+eB1Ag58qQE2xJ9POKr+S8lcBo6Lp7/KR4F0Cm4f6afNSX+/cc3czlMt4enV83R/gsTzse9S66A9+ktG7VACbWfzcpMNDqj1eA1n4bH2yKE+ipA/U3EZNxuwKBMbwOYEdvnO5gK3sSYIxgz75hvqi+Qhzm1c005qEDxAbUzMO590pZJgv374sLxw/Xuj98aNOCHqIwuXyI/eW35FG9g4nwGPSRUja93DaR/DAR1GaCmCPchDSxWFkR2KoD1Q4bnto4BMBhoCRlO0T8I7CccqjEWd9Rbf+yq+wCxds+B9flnfkP9d3bz//smNX2m330/t4Q7i+W2z/DdmsP2j9N+TLt//HtI/fJ/z8/u/vt3n/CQa6MTAc+QGvk9YfQZXN6/M9Zpv14V+PvRz2BXbJ/2t9YT11nwM7O/z48e3HS+L3omDZf/5vskCV5oEtAAA=185```186187<!-- toaster:generated:end -->188189<!-- rci-capsule:v1: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…(truncated)