Film m365
Portable Agent Skills for non-RAPP systems and launchpads for single-file RAPP agents
npx -y skills add kody-w/rapp-skills --skill film-m365Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 20 days oldThe repository was created 20 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Film a Copilot Studio agent in the REAL M365 Copilot surface — the ONLY sanctioned way to make agent demo videos. Playwright drives a dedicated authed Chrome profile, records the page via CDP (no screen capture, no desktop takeover), then trims, dead-time-compresses, and gate-verifies to GO. Use when Kody says "film <agent>", "make a video of <use case>", "location shoot", or any ask for an agent demo video. NEVER use the synthetic stage — qa_gate blocks it (synthetic-stage check).
SKILL.md
22.5 KB, as published. Nobody here has run it
Film an agent in real M365 Copilot
The one sanctioned path for agent demo videos (Kody's ruling 2026-07-16: staged
renders "look junky"; director/qa_gate.py NO-GOs them via the synthetic-stage
check). Proven end-to-end on a full location shoot (GO).
Work repo: your agent project repo (= $REPO). Python: $REPO/.venv-local/bin/python
(has Playwright). Reference scripts from the proven shoot (copy + adapt; treat as
the canonical implementation): auth_bootstrap.py, film_take_v3.py,
gate_and_tighten.sh, postprod.sh from a prior shoot's scratchpad. If gone,
rebuild from the spec below (it is complete).
0. Preconditions (fail fast, in order)
- Agent reachable in M365 Copilot: published in Copilot Studio with
Authenticate with Microsoft (Dataverse
bots.authenticationmode = 2— mode 1 breaks connected-agent calls AND the M365 channel), Teams+M365 channel added, agent added from the store for the filming account. Orchestrator + ALL child agents must share the same auth mode (ConnectedAgentAuthMismatchotherwise). Republish order: children first, orchestrator last. - One-screen answer rule in the agent's instructions (Kody's law): responses ≤ ~100 words / one viewport. Patch instructions via Dataverse PATCH + PvaPublish, save prestate sha256, wait ~90s, REVERT after the shoot (prestate sha must match).
- Dedicated browser profile at
~/.rapp-director/chrome-profile(mode 700). If stale/absent: run the auth bootstrap (headed Playwright, real Chrome channel, agent deep-link) and have KODY do the passkey/MFA sign-in — never touch credentials yourself; Authenticator number-match prompts may hit his phone on relaunches. Session persists; warm relaunches usually skip MFA. - Agent deep-link:
https://m365.cloud.microsoft/chat/agent/<titleId-pair>?titleId=…(from Copilot Studio's "See agent in Microsoft 365" link).
1. The take (single Playwright script, CDP video — desktop stays Kody's)
launch_persistent_context(profile, channel="chrome", headless=False, viewport=1728x1117, device_scale_factor=2, record_video_dir=…, record_video_size=3456x2234, args=[--disable-blink-features=AutomationControlled, --disable-backgrounding-occluded-windows]). Do NOT force --window-size/position (causes gray letterbox band).- goto deep-link → wait for composer
[aria-label*="Message"], [placeholder*="Message"]. - Fresh chat: if main innerText > 400 chars,
gotothe deep-link again. NEVER click the global "New chat" — it silently drops you into vanilla Copilot (the take-2 wrong-subject failure). - SUBJECT-IDENTITY GATE (mandatory): abort unless the composer placeholder
names the agent (
[placeholder*="<Agent Name>"]). Never film without it. - Collapse the nav sidebar (PII: agent list, chat history, account name):
button[aria-label*="ollapse navigation"]. The hover tooltip ("Expand navigation") lingers until the next mouse move — trim covers it. - Per question: click composer →
page.keyboard.type(q, delay≈65)→ Enter → scroll-follow while streaming (page.mouse.move(864,480)+page.mouse.wheel(0,900)every ~2.2s) → settle = main innerText length stable 3 consecutive samples. Questions carry the one-screen constraint implicitly via the patched instructions; keep them demo-grade (a "what can you do" + one end-to-end scenario walkthrough). - Outro: wheel to top, then ~18 × wheel(0,420) at 0.75s — slow pan through the whole conversation. Hold 4.5s. Close context (flushes video webm).
- Save DOM screenshots + main innerText transcript per question for QA/report.
2. Post + QA gate (the film is not done until GO)
- Sample frames across the WHOLE timeline and READ them (Read tool). Every real defect so far was invisible in logs: below-the-fold answer, wrong agent, MFA screen with tenant UPN, PII sidebar, letterbox, lingering tooltip.
- Trim the head to the first clean-rail, tooltip-free frame (auth/redirect and
sidebar-collapse frames must go).
ffmpeg -ss T -i take.webm -c:v libx264 -preset slow -crf 18 -pix_fmt yuv420p -movflags +faststart out.mp4. python3 director/qa_gate.py <film> --no-audio-required [--transcript t.json].blank-frozen-spansNO-GO → dead-time compression: cut each flagged span keeping first 1.5s (select='not(between(t,a,b)+…)',setpts=N/FRAME_RATE/TB), re-gate (≤3 rounds). Alternative for a static tail: 8s zoompan push-in outro.- If a transcript is supplied and cuts shorten the film, remap turn timestamps
through the cutlist (t' = t − cut_time_before_t) into
*_edited.json— the gate binds film duration to the transcript timeline by design.
- Deliverable:
director/dist/<Agent>_Location_v<N>.mp4(dist/ is gitignored — films stay local). Commit ONLYdirector/qa/<slug>/EVIDENCE.mdevidence. If the repo requires an org token to push, push with that token explicitly — never a plain push under the wrong account. - Open the film for Kody (
open <film>), report which frames you actually read.
Known traps (each cost a take)
- Global "New chat" ⇒ wrong agent. Deep-link re-goto instead + subject gate.
- No scroll-follow ⇒ money answer streams below the fold, never on camera.
- Warm-profile relaunch may still re-MFA (Conditional Access) — warn Kody.
- M365 recent-prompts dropdown may flash earlier take questions (benign, no PII).
- Co-sessions may hold the repo: check
git statusbefore editing shared files; own only your files; single commit at the end; token-push, never plain push.
Parameters
The typed contract this capability answers to (JSON Schema — the deterministic layer):
{
"properties": {
"film": {
"description": "Derived from `<film>` used in the documented command at line 63.",
"type": "string"
}
},
"required": [],
"type": "object"
}
<!-- toaster:generated:end -->
<!-- toaster:generated:begin -->
Deterministic steps
Lifted verbatim from the procedure above by toaster.py toast. Run them in order, substituting the typed parameters; do not paraphrase:
python3 director/qa_gate.py <film> --no-audio-required [--transcript t.json]
open <film>
git status
<!-- toaster:generated:end -->
<!-- rci-capsule:v1:H4sIAAAAAAAC/628d5Pb2NU++FVYerfKmoFayEn2eAskCAIEA0gCRPC4Rsg5BwJ4y/7se0F2a2Tvb//bqRn1NMK9JzznOc+5zdb/frL7LiqbT9+KPsu+fPL8Jh7sLi6LT9/+8b+f0rjwPn37ZBdh5n/68imLC//TNwr/8qmyGzsHd4I4y8GNrkx98Manvy3f//3Tv/65rNS6TVy9lvokgOsre7Upqzgru9Wt6724XNmhX3SruFh1kb+6brnD6ohT5I+n2r4JbNdf/d5jCEo8HzqfDuaqtQt3Wdf3Vg97WnXlKrdT/301z8/L1RB7ftl+XSmZPT2aOIzAdeCY3wIbPN+LXbsDLy+ugy+bqClzf1U1JbDe/7JqfLdsvPa5XwUWBasBy3ll9bkoV8Ap3y9Wrl11fQMeBpeAp2lXVqsOGFEOfvPLl+VV4FQT5+0XcNv23ro499/cMq8av219cNUuvFUIrHgDL8RBDCwDbuzOX1da668ey+ty6U3A1ald/f4M8+pvTwf//vunL+DKy+OXo6syWP2tB++5duu/389K95nGVRuVZbdcKxuw6bSy23QVPP///xWwr6vT9r69rpalFufbqQBfuthdtd0Sh/c81PYfi+UrB+yRtqu4W33+8eTb60k38t30l68AGf5o51XmtwBOABQRCPQS0g+4xeDep2//+ykDCAMoqSaAxQK81XZ+1T4R6Obejxv4yotBcrqygd9t+FpNqxfmVm9vRflmL7B6a/y6Bw96q3+8vXWNXbyAuOq+Jm1Z/PMnHP/ry8cGZQUi/o7ej/s08ef9EHgJXOv69sdtBv3XP/8FXCjarumfeAQWf/qf1QvqxZ/gbnw7+w9g/178XqggvgDBP2O5srvolZr/BvLq8wKGv7Srpgd7hysMwag3hH5DqW+v1Hi/F41fgOJtn6kv01XSF+n0+6e/rr7/H2L2fXU6v+3OT4jnT3gv6f7+X1n8/nvxnseV0gBgFyuwxVtXvoEvwHaAvgAkcfWfSFt93p1/+bp4qJdNCnyvym+rqew/vAJVlgBznjdWn39b/V/XrXJednhm+Nvq+/MC/BVsN7wtS2ewExfwCwDAos+R3f5U1uDNqx/4wHnAE688t6sA1POrel9mvxvmlgAt0Mr2QO3+FVSnb3egGn5ffAaVU5QFoIVstUDSz4GpT6d+ARYtNPGHA5YAibarJXxfVt8XqPyxVPwfA/689HvxfYnuH6Cw/+gW0/ziaxstj1Zl2wFLvOXbl202sCwGiX4aBtIKDLc7N6ps7+tKClYhgMOXJaNOH2fen+60le+uHD8rH6vPAI9xu1oYJfM7/xXx//mfFbLkCvBX4cVPRK4+B3acrQK77b4sWATEBgjq9wL9uvr1V+6ZERAHN7KdzF/u/wzTX3/9tqp6J4vbhSXBzf9i70fcRb8Xq9Wy0sKkRffk1ef11TF2m7ItA7DK6jNvdzbgOUAr3x0Qxq/2n48DI/PS81e/rbDvHwTzvIA+l3aAdeniZ1EA1Pje2wtFIFFZu+JO/DMuT6OBD+CZDJCv6tt5C/18EeQcsP6X54qvBZ4XfoosqA//WXvLd0tulzKzXbfsi+7r6tyAQliyDx4DCOIOB7AySM2fC7arvG8BRUR2886dNmgpi58vbz5/33y48Iz6ErBj3OZL2r+vSvBG84jbZx7Bklf/Pe6vfH177QZADkxrlkyWPxuUgeSC97AlpefCf3tvUYD3Hn6zUIYPcvDeZJ/GAsT9zFo/2CWzHwDvoENV4KrfPk0BKcEoYvVvFEFWj2dbhJ+8NcT+oyobEBxl8eE/F1wY5c+cK5y6EUHYlMFWXm69MtGC+6ulIXYLakDoMJL6Ajo6gPa/WQT0yOvSjdSVHXT+KzHvhfzzO6+4P+O4BA9fgsD/6PBOUz5a8PJ7bwdxADX//d/wV1DI1dsPZnSfCuDt/anvq8/PnNEI8p4PUJNgw8yHbacF8QMx6t/DuST4BzWsPkeg14Nt/+SnLy/2f5cY73D8GYie71dvgNTTX56SIFpiIp95c+WV7wKkbVN/go8Ct2rjsHgDiXwvk8IflriUvfsqQ5B2b6kqG5TGwritnwV/Xf1UmgArRZ87fvP2jNcSlXzhyxyIqAhEPQKMUkVLdsviuWLjZ3a/NAEgpW5AuCwsX4Gcxm3X/hVkqsl/egTIhh6UJdAsaVytgL0gdsTXFfefbgI+jbquar/BcA4q9Kublb33Nf9gC5AKu4OfoYH/1sVd5kveW2XHzd//7/fvflu8x6jvTwM/Pyv4P3npL0sPvPn+nw34BxetwI6/f1o9w/3BmIAJl168UDnQMfGidH+Wja+e8uWp/15i6z36H6oPAANItFcFAWJ9W31/BeSP90ABG/4A9NX5Y/f5h8R8B8Jvv396QW/RZwt2gFBqfxNAAv0nRj6K7DeUxpgRRVF6kZND7Pp/tIAC/T+APAZZ/Q37EK1/PE38AwD7PUzPZf7jXhvP/m84QVIjhuEEEKJN2P4GhJIXt0sTeHOW6LwFoDkCfdv+BuBT5k+aBgTWNWWWvRPpT2/Ybho2gCk9EL230nWzHhTB2wPMDqD6/vnL968rvgSKQ10IFrTpt/dbb4spMOiOz1a1rPnZtYH2bFdhAxAJ+hqoe6ccVw6ojCVfb6AzduWfWFpSgbLYizIW8l7aYbnU+/d/2E1sv2U26Ja/gigfQVwBHH7/9M8vq39UGRgqojIDzPqf974/9/j1VwE4Hi05erbAOAAFAlAUg4w1Kkjj6u8rArAhuN8Akvq+2PT9Wat/GmaH4I0nd7wUtZvFbvp8JsxKBxDC759O/uO5BcDjO6IWiQnQUXSghrymrJ5VDLYFLg92EWeZ/aeABLHq3lH7BgLQlCDybe88pdXS8UHufnn35qat99uN+ibx25MqqeZqx6lbQHEgqAslTL8sTtoOgNmqLxYAPu38EcqforVsW4C+1v7ZSkBj++94/u1V8Sfw4N+XoAKJdnoy1XOIWcRB2YOy7N7N2wBI2dX7xFHYA4iB5zt2s+gGRZK+ve8D2kb3rJsnTS12f/noz0+bfvm2WPfd6buuLP4r+x87gNXj8InlZ7KfdR+VLxItsw6w1uffP23HaiHin5/9ZVl6Ed6LvgYbAkH1NHbBQl4u01IOVvkxpoKxD4Rv6X0fXipgi7oHTSteJO4LDD8C/A7i78tc9BVQvVPajfe1myr/c72UO+CipQkTDEX+8v3j6W3R/Xh1se7XXwFRAT/fAvAH0IcPIBgWWQO6zyJllmC+Nnja+3Wx9zNDEV8IBgGLQs/Y/XQfDKB+9hn5wiLL7SV70+rf2Fes/eXDgBZUZ7bItv+qDYDfEPREwIqAGpZl8UW8tb7bd2D+XmTRMg1+XV3ewwG0nd2A1bvXPPQhXpZ3QEuNFwIHb8RuvFQF0BXLkq++CDrYU5b+qTv+ukpBBb6GmmV6egM8smgvG5TbY0EOUPnPmvJKUHXQst+y3E9TTev6BcAO0LZ2lnaAmvsw+qijcw/ob6mVZ3CWcR3Q//uo/2+UAYFBEI9efYSOwJBfFrWBfKXJ9gMb7ZIbgK/V+9rL24sJD1A+S80VC2qeqPu6EkFFrYivJAjWJivb5+2li4Cml/Xt0nBf/ejhO/nLxtsiHvjz8f2QAqgl0Nyh/87QTxNx9RMunwR64eBlMGu6j+4IRKUCxhewyoV7nle8eOdZykAtFKDreotgeFUFGP2eo8XtmWUgr59kYS/d98UZung+bFfLYcgyQz8Vz3XL8a+Ufb6CDvgsRUAZ2yfmFvH0bPQeGPIAtbUlYLcGZGdRsEPcxu9jS1aG7bfXaPQG1lqqwHsXwF9e7PiikS+LLnmJzxfOnrMK6NE2AJqmnL6sAOV8MNCXP1vQl/fyX6aCd654KW51KfbFs+hl+/v8AEQ6KHPfLt4AhrMvH++8BWDTV1gAKoEwA9F+idAlFC+7Xnu/uR+k9R7Ep8wNSxCZ70GQV364egMxVVdv8bMJfF1QsHpzvw3AUmcEkv252tsilf3uhbs3twlWAKhvVTz+EeTdauoHgNJq9QboIMjsEIBlGRRB7YJeAEj6a14R31+i+vv/nycw31+qGkglJ7MXsdGUs1+8taAw2vejiQ+a+XF4tvo4PHtRKOggy9i6WswOwT7Lu89FV08OWPL0ygIKCghwH9DCwOzf/gIA+9nxuwfI/efui/3F+QV6CaVf/vIFBAqo4d9OsHDljts/rqBNwur6+y9f3hdu/LdXBbxmInz11DwtSAmXAZgU9pPhngc4z7Oi2AWpibNvK6ZdzSUwH9R9BSp3kfDlQiYfYQDjhf1zWYLCavsKsN5yRglKBHjbLrNP0/nFjwF1kXw5mDmATCueFQW2zKv23daf+GV5femeoHL/Avi6e450KLZc/mN57w/HBzb7f3S/vLTG91//AKAE09MzWd9/On19X/t1+AckXPviAa9vXgdA7/D/OeEfle5Mi2AG88trKODBVVDgS4/49tMJFVCUQPY/9cPf/zi8nyv9Mfzt9PcnFFefnw8s8QmBZgyLcoHYy76nbYs57VORP0+lFh7ZlHkOhNXz3PjnozD4b23Wh3+Ht/dFF222X3NvaXSg+grX/zH1Le48T6reAd0uB3tls5BA6j8dXhL65fnnO5csfeZ11x9/NK6fbHxNbfaiq+IXHgB5eu8D7jtVvZ87/F6QX1fn6qekP9H1PBj+/P2nI0uA0dWLt5fGv5TFizSWXgcmhNdYBrjU+6B1uSgfywE1YJjV52chuQvL208ueU4xu/+zTkU97Gc+XTL5oXmX8ljk+dKRFzKEVh+C9MkTy6Kn5/n5TzLlfcUctJDp48DiJVra94Oup+eAzb+8B65czt5zAJ3ngjoYQT/G9h+j6HOeBT0tyxablsH58+bjQAy4xLkuoJFfPnANptjXWftzweepEQAJ8O3tYzxetLi3xGtZFxAOyJhvN6A6m9fUWP+QMoBaCgDL508FQCN5deVN+da+eOt90l560wewvr2OysEU8eOA+fvqVZCrpQoXInseKnlL/v32rwuGFlvKAqT0ea76ur56H13dF94XEIItgKb56wuNby+gvoL4J/a+Po+zgbvtjzP5RU2//8Rmican9x/2+IDi2uWsHoQF6IYu9p/fPX8ABL7+5497+OXHSB8HbN/fQbr8XMH7OIjySrdfTlnBlcXkhebsReUDrqDwxapFAIOVABqAY5/+9a8vnz6ayutHCe/3yyfEPoHbwKkOxG2xZvluaXzNsDz9v5/aFIBh+R+HIsA7ItFK3OufDUyhJEbQiX44eD5OCIZ+CtuqrlBJj2Xhjnea6MmWFO/vclzxOX/LCOww7gciQ6j8KJBty5LiNXnwYwJtA3YfEFmSMnVN8wRmcuc+okY5TTqMlsK7jDqt3dxtldr65Qbe7tlhDlGL4/1IUUdLnt3b4TgxMuFqrhFx1NHM4plgpkubTROwGdeE6FqEUerkEnYkzfC6jujAH5BkGr3r8TrA+CGgMDg9OZtUS1DkeN2lmq5BJS5J8eFygKJoSvfr6/rmR/YByaw1C9/NvOiVDcNcGo0rz/oxmVQe40ejPO9jNCZi6xpKIRG7a5zdSukkPW4yheMxsy117oxX82EUt+a24OIo5Xn0fGxVaB36D3U76NeLulPDq3BLSFiSjUeZ3g5IFBCHe9+p0nDZIPOml7bVLd9UeFVuLySBmJJQ9NjawjfHKLjKtLDfZmJIimiKn89ltw+oio+b8YbjnAHDFfJoGVujXXF/k5yzbIgn2/LL0qdhRJrDcJQyCY+TA3PYViEy9lE1BptmgFn6ccBu9VhAbK4/ZOdBeCBoIpsVaZ7uTIJX2/0dJhxvH84msZduRmoyAQy1qDECKRYzgUiz7OmyufMzG+vhTYRJyTP3CIx7VVBUN1PtJOoYaGPR5KeKho42vD0S9KlAj/FkIIMnRX41e6VnRboHbzLGu1K3bF2Wt0smcfQ1UpOC8A2M0oN4DqSwv+dat4ZFX0IHh7nadoyl5w5dF3rFsAcXFs9NRxnb+pIS4Tht12zWWagkw48dK0V7nFYGkS7XirKBipliz6oQa8ZZPLrBTei1gITEknd2xlQZI68YRAH3e3y/bSx4Qkf3gMFoCJuNI9hIu9vBjhFFZ4oMhhlhe7yhOI96uFLXro/+zszz+hDf24eo80TrFBHq5cKJkdKO6x4Kr4SCnFrERt7DU1Sb3nVzMqItSlygKeSuUMsHFwt2D3fmyKw3eXynko2CX5oxMkWafyisril6Us2ui2IMR2OM5YWT0FD5YSCm5MQd4YMyNgSZnoMiv+Bs2U0bm2h0P99Bgy4zohVxx9KXhO2uKQp9hs9p60h7bk6vE/D8nMxaKBuZyUzRTmGrmbmK1iORz+KFafgmXFsOi88btFPatX1U7KirWbmgbyAQW7QHJbAP+6aJJHimpImEoT49bH1/R1O6uYf4TGTihuUPeHzbPCTtkZl3U73BmLnlkTn2DtI6VrYMqireJkJqucW5x4GoB5gQhcdRCtsryIuvo2jE6qznnExunGgi2G2l21bQa2R7ro6esjFMtvFPV+gx9I/ZhY4SJLMbLlNmanvllGzQN/wcNBT7YNaRUXGeLUY4vt64Gl5VUZGZgSXfuDQUKddVQkVrJYmL4m2CQ1h23W+Kx+nWF8lYcmO1nm38pFl0sO8ZsT6eT5fpTtnmeoY1a9tupGq4Xgt+GnvkpviqVUMnsV03x90IdntAfXzm54wN/CZSt2VkJxihX2B1G+umuOa3cCfYduauLYGQYlyZQ/MhJnBEbS6haJd0JGv1KNEwi+FMAXd050nxRIdGl1eIzJP3MduuNes8szSBRtQQXy0yu++RXsrQuXSLc3wOj9WwsR5bJnxom3WuGM2Dy5Bjqsy4dgmoR2TO7bYpvdK2I36S2f5s7/s1ym2EWuBpiBU79UjKpboTu5JE12t5w+AwDTq3Hif3Idh4mzZH6YbxNIe5z0XcZ0iejBzsCpiSN801rNchxKfJnMSDSBacf7Ain9j1MBmC/rrDI/bELpGA4nkrVc7l1BvAMsUTBc7fZdRenkvEEFVW2veOIZ63dVFEG1SSNtQBuE5ImdCjsSbWjvVY+9llU0V3DVIdZTwGU8SHW99eh9ZeF2+hmzw2qhlu5Id5f/QM57ZmP+9KwzSlPaNcmLEXiP3aKpFq2Jpan2d6UM7WJtwrxWNzUGURRAEKFCHmshHks4a3/Tzwj9ildMsqRLLqaFAFicHKoMWGOPhvrZa6055vA/Dp2DGjkHe64t8An6sE7Q9LH4PxhB8S3BiDimZC0Qwy6QJ1wn0Yj+fQ1QzN9AlTu4XnbgyOGsp3hFOva4cupcn2BuF2I8cdaETEQLV2yAlSKlsXJYHQ+ODm647xW1M8DQ9hbdmJXDRMU28DfcDJWuOcmGOUbURFUKEpm63k8P6EsrQqs6ZndF6UttmlUa4n9mbyCcIbl2CvCA2NYpfA7ljoYUpjIa73BY0ritFTm+FePbx7gwToRecydWjQw4RygVRXg26E4eHa2qIdYqw8hPtLWZ9SA9tkB6ljh7Ny4LkOY85cfik57Wojek75PscKThVdLQ0TGHigkRvySLYhUZNbuuopeFdHKlpd6L7BHpAZ8BaqCZeKuF04RY807ZTt7uvt7rFmbqi032WIBmtbhWErGEau3KbKVReb9u6cs+D7k+LAKdUdqGAoiJtk2RdIY+HgJkLboQ/TEy6taZqBzuYJg+mqmnMXbTWrdnrLQo5rTgiZaQvFl06WDCKF2vXEqMSaxRtucHDNg4u15GGcYJX3nQj4wULpWh0f8LHmNYVCr7oOP+qLefb3xGbTSsepPcllE/cqG174rABdPqBxzOXE/dBy7qgnU6xuONkjUzA44rwapSPrpFREH+0G066d6ymW3huaRAshes0vQnu5ZHDTHWfKdcKNH/Pz9iK3HrymWH7abdRgl6YDXW66TQRHPG+QlWy0J3xApPBynzobtitLTXo62573los2KQIUUcOkxykyWr466Gq58Wn62Hqsr4NauW0amTrnYj/PE96rzRWnYE5j/FmZDtKwwaGAwlXaZKuH3SYx6Wk5rWln0DCZNT+jcJ5p477TFAMndjUapua8PerE9lJ3+Da/MPFBufDH0+54B6rqcrw+ILx21YvjoONMqQnOnYwCFjPpiMwuIzbIRh/7awEGceyG7mbUc8eU60HtOcODLmfQ8z36+LBRkzFtZBtwJ9HuigeHXN3NBfHjkS93WUQQMlCw+YAbjUDPzGkNUxpMSxy6DYPqgfVmtudhXEwtL1g7hXxxmCDw7QlmjR3kXhqD1IWB5YILpz4Caidyzp2vzerAS7dqZ1kzl5rhlg+jA/U4W6N/AsIylPUWs2T/6to+hyKXCzwfqPmhcmwiFhdO3432Tr35epJAKZfC29Etm51jPjan0wYN1/F08yDhGjsSt2mgQYgTau2X/OlxskX9dkS1SxJy57yCSPeI8Xcc3/r7G19cdhuKP8cWUXAqFZRTHEDMOQ5gEicS3FbudOGyplBc/Z1adykJx3dujcWSdxq4ETvU29Rd58JuraGlQO3398seMaBMUglVQZoGJROo1AbSN2vHZE/bW37ZdnorO4Og3gBDzjHQhRymBshjv+b37TkS+p5lxzuthFGOJ8dLvr2zuHJR+P1xi3HJBXV4dntKPPW+uSNstCYrwnV8Yo3tjpsZy9S6ksShITpvBCRBXIROfpQzx82NtrErYTKcnVq1QGpBketpwjq+PGpoJ5AXtJ8i56gza9W+XLVM46D2YLbD6UrPawEi5WsA1HO2ts0HLmPiSUSrWiaiKHJbEasqTNrUYkSFYJDj6gpjgnjHXViiIv27COEReecNnSphqiH1R1wDhma6ThQhye/4s3ZcSzzac3cYzgKtOEQJ5uQct72o47pY9/sYyA+fNVqcPwS6H14fQr0BcdqSLoaFY0heuSGur1LXUM58J0e2zO+Q7K6VEipPUBeZG6ozM/5e2mS+Vy9cr9OCEThnPjkk2frCzfusujC0PZwf3E05XNfpRW446AytCxFuPJt2GERT1yKc47kPcUZCCF45YqKGNMLNjo0yb8+iEAoTwSnHtvNAf9UJFTsYodix4q3f7g91AkaOzdG+KT2xs28NGRAjP6BzeJIRqXicj0moomCmhJjtuk2p9CBSeh7jhC5zegkQCtgQRuZQUa2LkO5lAz4bw8Ug5uO+7p25QJlQidfqQAFTJ6SZG7IrXQhFA9EhyWBnS3ub9/fRRd5JekWlKafqazTe+ikasBayJxOLccnTum+Yy4O8EVeIwwQxPJ7MEvVMtSIKAdGUgRofMpgSm3m3Dk8GuV8rLhdp8yTt16k8INBe37vCkZO5Imwaptx64Rx1uDJyEh6iTkFeKpHZ7VtKAloKFeHEOtFznhMiZwSXDmIfZXTwgyHccqZJVS6sYEEPG7sd0hfpOq00rNPx4mYcXMZUiLGD4Mw5TY+01Mgyc0oND6WrOVow04vYtLkEMr+mKAem5iByzWJugiiD9f509mUSDjfieBGuJHEBU/aZAFZuivqG3mpqCOa1ospSyK3vGo7eoUHc1zB5oPrg1Pi0Ix5zc/IfSIsfzuEjldTBZD1ow6OFx/HdLYfOZXszzppxXzN3C8x+8JCGG/aB541fQh2gwZ5ATfJ8Fize2K9ZoPOaYxYytl8CHp+vRwjeifzJk+qaiQqWiWFZqg4uFyMeNzodYUIhkhEHU8gbxEokLmtMu4NUrmZ0rWy5YDT2vhy7mdPg6UYdb4dgYhKYaWElk9K56+nd0SBGvLRYVD264AlQbA0UejMF1ze2VDaPEygXzsdZsl9f8ylN0D6Fmis3x5Cibw3CS1wu3a2TXTuyNKJMLJwPRbyLznAKeaGr1C2kslCbn7moyVvuXGBD++hmEz9fYxPWO17m1kl3pUTEHy+N9QgP6xOx5iWeldT6MKW55/f4pEnIVpMwuR8KeVugMopuG+MWlakfTmh/7BkJ6g7uKMnlSEouteHESz7UibsWwK7V0OhgsLWuUKKEa6O9RdYGhmp78rUHc03tOVS13Q56cHavFmDI7tbV+sSKdMgfDvC0DJY+50jiTgsk4XjJNlF3YMxJEga9RgMbn6VzaSrBfouhzNq83mu03oac6nDG0B9Uk8UfwYalZ0xgjYBitPqCli5XcTBOw+PaxNaX8mZHZskzlzIO13aAI+xg73a+URXQ7lLAnF7QxKWgJPtsMY/OoDaRxPcTP2mPqoObMC+GwoHhrhe9CxdujnmRwQFgKirhaMiXhhHmTabpGg+EeO14/sCe2lqe12PQdKbIB5wWMid7y9qcP6AaBiMOrIwO7VU0/Dg4AVw0CAs/9IBSWleLW5NuYdRogVI/CMVDhhUk9XkL4w/7igNac6C73SnaXQ6trN4zYabYLlmzI0Hh8MY87LumrDc06XcHOtqZptsC9jACjZ1gHkcVSGnECQgWWTHV4KKdtHQuN7IPFxAGUa6iKg5SzgdIJGQ7F4gDty9yZHuT6crLFMgwyRZKFT/2vW2l1UhpMndMVnHHVbWeoowbc95V7Lnqj5qTbYnWCBhnQM+NrDnWdjTaPF207wS7vtnvH/RY54f7Deu3lE4VlzQKAiiWL21pD1c4MVQI9da3dJt7xtSI8ICg98FRT3BNeg5DxIFm7ONDbl0sI7aO1whldROlsHRD000KESx6f6i3TMNMP9GvDc8UvuQU3kG8zCred73S2N79ttMZTb7vBJZMNbL3eLkq/NN+RBo8D/mA4I7OrPaJf6WvthU9DH+G7Qt1dQXJRSpyvDFqQotOT6fYfQyEzjqgFHXlnTEKxHmdKECQaVRr+Dtv69yA/HvoOLatNmhSigImXJm72c47tiTv7V31gPQeqNwuBlgWeJJuSpjGSNrx1UxQYaOabxPPontjmu7SfkAIGOGuwQTExJ3EcwE78ZBXWmekmjtSu9M8heYRn9mZrEV3PjlpuDsd0YdldR7c30sJK+gu0dms39bbYQcmazN1KN+Cri3Q+m3B31Cjhzz0eo6Y2Nkkvra5+1SAWRTJKia1VatYS09OutlLqGAaAG3GPTyiDkp1x9vxBB+4zme7frwh9j48oBJ+HiwjQ/TbcCfo/WW8t825xgblcrpp8GzYfk1tL9b67F3neuwRaFuV1iXSpqT1TmkT5d66MIM22jNBr+riuSUgkt1xdR2tr+T0sGE6Z7XqZDbHdWfi4oindzLToUI5yt6DygZvRE/lGfO17OTSfdCjU51ZlJGIe7VAiLNiibN2f1DIYIaJfmNFZiiD2KQvtluoheMfq9ZGRQnZbXCRNoubVx4b86BeaBhT91dYYvwbQSOH2L76Ni4eypbRJvE+ULbKxpNeZnJBQNiD8U47ArCacLgkZVUI2D25K2MjAmAY2+lMDOU+NfjKLofCF0uqZnWBwYL7tol0oh67pi/O9yxt7cmqMJm43YbgnE2IFGf3w+wW1947HzVZw0mjY2q7nR1kprFp2qxvynwjZmvGbFzexIekZTGCbSlykwbaZafHlVrYseype4sRcFQ40SKo4uBYk0cPQWulbrREPKktfqxidjsh11w5t8He21xpVYT3QPo2l7rVcaABbmtXifHLw7hv8f0m8WYLi9aEdk+6M/p4NCKi11kxoRSxbfZsYbJ59LC06wRT9NneyRMRGu1BESDkJIrqVoM9BlEtaqCxa1hVJJPQWkrK5dXoHLhi5DQ/1sycPWbipIhVWFlNWzH+uov2cqe5ttpsDhZKDg8/95iYJ2AHhQZ9pC8TmpwAJ+B0UKIc2l9Jcd+mKODFifccyzooGOruWWI/9YcMw8+deAc9U4lcmSnvE6Wr5InwmYIhPapW9pTjJBaYu0P3pvsFPbJgz+YIOW3dIF43IVqkM+Y+QQgehz3Vc7GjcXY2e6UjjoPBpHRv46fNZYZAr25tUS7pHIL6KRsZwsjNTlE5kMI6X2ORe9ATBRPKGa7nbjxJR6vaTuKh0ORruqdPhuXnMd3otjzQzHEz3LHpUMxeG/YPtwcJwqgTKVEdnV9SuiJzONjASYhj0imXtRa+MYTYJ/K2peNhnQZm1o6kNx/Ju60e6ciMjtTBSyliN7KoexEqXBHOE3xNrmccuVXF1lk7sr03g/uel0VtVINE5VQMnQIKJQZcVwUkqB/lNM7YFfLiqUoqMiOGO3xH4CZXWzSOnZn0m7UobcuCJGWq4OgakveHHe6zCVORwxx77Aa01riLd97Ba0SVmkLoPKe1MaMPehfPltzvqUGrwromlTHvvFg3EdGEJVLPmLi6Z+eN18m5tbMwodUuR9jUI95rDbZeMxaiyxQxRYhRZQ6CVrZGHo7Xu41BmgbluWEQyO4+PwZc6gaMOXDEbdtHxZ4YxCOWpslYxqjWQ3sU7SNMQTe7eTp1fcT0SV2chyZ6OIKneL6B3pFwZzvpWNRO77pa3a99xEZtCx4YMu94NYWG6k5tqZvkVycMDrzN3sDs2p5ho4OPY3d5APDfNtZ06KrpkB2gx67ChXrYX6sETcOjbelXh0mufCwczhiqQofCN11SFceJIrW9I1gyPJwI0Ec7RrzJG4u+CdIIP856EPBO7UqBVcMRHahVfUqPeI4b8JpG5slFq+lmW9LgdUFWHIBvURsNHgvmGdrg8uuMBzokb+f+tFd027mcTiccmWZkNim638YSm8sxsvfRDlev0hmq251wnJtBlCtu7IdeMajT5trhNoQPTVrZCjElGi2IWK6YqFflx2EMeuCSLZZAe9FNdwwIZSLVmCzoXMsm+g4cV2LmTgwHYj/4yp32jg1vGmSjK+YZcurOKmjXOpxiGDOtU5bsFD7zHUfKepnoWMGysGB7p21pugo9sr47ia3fUVLIqPHmjyPae7eo306Bew62cX8EbYC+JxMypirc0TenAyVxq2oXiy4xFc8X/Cbtm8q4a8yshIlFmvjd4aqLSSi0f5myI9WUHnYCkmgmYOs65tMGu5E+ZZqJsz35d04/nG7nrtDwC7QbfRIWWvJm1FSSFG1MzbsrdUMQ84AqQuqtzzgaELVbiSrvWh5qUmKIXw952A4Zre7Z6rqfKyOemwreD93VTR/nKE+mQRvB5BLM58pGd3ex6ZG68yDFVXl7jdo7r7+upxj0/8Y3BLokyq6B+65skV2rysZpGLMjNvbMiZuz7NyXM6KBtNT3WPdJSh+rCswaNnLel9RJXk/r4sChJruZ+dphrNG4j3XGnIdrXHmy2jMBVA4H2YkbKj5UWV+nOoEdJmOvONTQXzVWog31lkh80tXd2kN1wKDSNbvksFbOJzXBB69QwFjSAW4iL4ys914nItJYKV1EsfodI7VC3E7rfmMo2o3Apx2QZJSZs2R5qnkIXj+O+QO1t8PGsa43zJE7PnUmVz0U6eZEQegldsiA0y8B3d6yPlIyVmmmsycW1x3bGbhnugYKu7RddrN1xmQGsNucZML1tjtQJFb28d2edepugdHDNQ7BWRM1wseT3ho7Z84D0XI9vOu8tSVoEVsgPYh7M7lT5wksdpXutFDsZS+2tWRm3XC4VsHo6dy+cgXvxEu5ClWdYN9wVwe51ylKZFFsanivBwNV0Ys+rUWBJ5jOjMZSU2hDyxoYLfRAcAZHkqdumuVNlKPcJKdl75CH52oqSP7usS18KiOCq9OV6JqV0CzjBrQPMdE4HM7qXSVVvu+C4mTYrrg/QBCJD/ykDC2YUfQpUEyxnLNmtxdMa987xyFTjZTZ9Z5bBhalW51888jsWrZOz2Ln9dbEmPxI4novmt0ROpyKlk6ONnMmQqp2xsDNdiSU9GtS9fBrlOFdIRNICukmkG6USQlBq3nugIlqwm+YtjuSdYafksust/FRO5GNsZ7rhtHQA65UtR0VVOMEiQvxAhiBLjNR255WMpSZDvckGuHTeDDsnU5cK1xl+ZRxdCLwJ4eaKLi7yJl6UYoITD3+QS4zk5qbM9valYDkxcUmMvSxDQ5eLV5tsx1hhLcJgI1GYu3DsWDjh3+fj1ORJdo9gxRcG73rIEcU0ENoIPba+a7nyLGYO5MNkvlY3c5gBKrObiJG5HaPZC5q1Tdn4xvaoz5l0XGUtrg2Z042zHNyUbXj+bQ/RJ18za/xA3Guck+rdz2RuxsPZ/mFnYwBU25dxg6JdchsHUcyOb0lNGB8LSk9ujoh03m++fyx6szdlalOk8NQOAkJe21XnNnRFmryQtdsrwuITTtuL+Kb3EUy1EQ0oquDguN7I0w3WHlwh4Gt2hpLhuIuKIabqM5dUsqhwXR9gC5V9IC1ovQGszxp1qYk6GzGRWum6+ohHlvOSS2AsqKTbfhG6/cw64K131oDCTTBPm4jvUP0JBL3YU+YHRkeC0v1REbOnJsN0Jjrghlhzo5isW4PgX+rLXukrLua0mKZOKqTD7ZG6PhNnoN8KulxjVEldudnfZ88ykuB0OdAQ4K+Uxm9zpuLJXu4dWf9/EayWZk7hggmyUkPM/KcwnmP0XKx2QLOiudYtIutnN7L+uR78y0XdPw821eSPvft/UGSQafxntthaUdejNZA1Fozc8wxe3xD94ABC7jZB+sWTGpkFrBZV3jkhPZ5u7Z2V19NzbgyZHVSekVe53sCaqv28WD86D5pDUaF6pQa2tZujlXVjvWgXwzBOqWFpvepNt325EHbIy6tnUPeobX1LSxYb/AfYhcLRz66QWnps3503e4a5HiHZ4y6phh9risoSUJ/M9TtxlrbRHO4we28t5mE73yPEby7OODIpT7dAvw4n2X+eBwoy173uHGoevuI3O9zlx6nnoX0PZ7e5pBsQ52A+Y2HJg4tXPrzncVPQy1ya7vd3TN67WoT0Ap5NLVOLhT3UhV1JqgOPZpN/NGTs8k1LYvXVfZqIQ9O5iodNrv8Jh/Pmz0YU9YEFfiaf06T/QajSNNyUz0oBRF2pJROLzfjWCSjWPsEcTm07GHPIXo6RTcEzx25ReKpPe273KY6ISdyLCkqKhzOaHQWhbF73HZ0LuPK2B1m6Kj0Qmga9/uhsuvJeujr8k5VOTta+J274D3QP+tQgehCE6ezaiCsoNdUdPCY64PDFYXOim6OZuGWKQforpVU0AItXiYkeuH4ffoQhKZ5sMLGKqwRZYO4ri5k64zHxB9SO23YNGHG4rILcq6aPes6tedwRMqksSQCBgOZmh3PSC6McjkpJ6ga2R1CceH5stU5RsPgsm4brw/WFV3BfCxOZsPeyIz2CbTYHqIpEUCnwA7sBbHoPd8fof2eLanDBD3q+DFE6cZEfPsgxHdpC+XXCjlnCJHdRZMs0yN5tBCou2Wm1RRkkVsMub/2wRhm9bFN6a2AyTIs9zqdVPzmKjnnzXqfjT27SyfMbq7n+07Y74fzmWyB8GHAFHoCzamHZ/sUwoU8uCaDq/TeOrYDtkePpxrbCYQ10iNpPYo9G+yzXq0IN1W39RUUDETvzC5sc3qw8Itb3HA9S6/0KVOwjkxtRxaAGK8x99r4uDtfvcbfOyiALyvdk4d3Smt8onbOdb/dSNiN0kPtRB3EIo2wLcq0bT9pCYILEN1hwjAZGur2mAemQ8GL/YRWR1wowFB/95w0wuWu2MEaJtDi8RZG0jzaRj1DXSWcm5o5N3Dg34BCYbfGbFAMYJb5SgH4eYIVK9TV0KLGnDeMGD7YYdh3fnOKcHFqW7W4KxhWoKfmilE5plZJKh58uu1nAiuM6w7dl9Vt1m3DxQQ3jhx5nKdybqV+7QL1pd2khJ50oNVkbId3WCRDGTOcHVeNuwrItPM69Q+TGvtrj/PKgayCQM3Cvq2EQyOu7+iFuNkTW57uLDmpVzYAS/Lsrj1r1LU2pjnK9MBpULje0SKz7k1cqB5pz3Hcb5++LB9z9N8/GLl8mPFt+d1FGL7J0uHwNfeWv7Hg+eur4Lbj0oRHIDaCIriN4R6L0iiFBASJux7rsaSHB7YTYA7mMSSDUliA2zSNU56DUaxt4/7zo46vX1y3Cxds+I9Pyyd3vz0/w/jtpx270m67b977Jy2fn9Fsf0NXz7864Tf805f/j9dev2TSfXv7++tTkf8ED7oxMBz9ijxfev5CXtlMH58HXT4n/bPbi7MT2CX/+LXGjwc7O3z/ax6W32J5fRAULAqW/df/A5zs/bBnRAAA -->