From ccedc1920d4fbae083d034b3bb269d0a82c6f2fc Mon Sep 17 00:00:00 2001 From: Felix Rieseberg Date: Sun, 26 Jul 2020 19:01:57 -0700 Subject: [PATCH] feat: Somewhat reliable shutdown --- package.json | 10 +-- src/basilisk/BasiliskII-worker-boot.js | 90 +++++++++---------------- src/basilisk/BasiliskII.js | 8 ++- src/main/devmode.js | 4 +- src/main/ipc.js | 4 +- src/main/windows.js | 20 +++--- src/renderer/controls.js | 10 ++- src/renderer/dialogs.js | 24 +++++++ src/renderer/emulator.js | 6 +- src/renderer/index.html | 33 +++++++-- src/renderer/ipc.js | 2 +- src/renderer/screen.js | 24 +++++++ src/renderer/style/base.css | 60 ++++++++++++++++- src/renderer/style/index.css | 24 ++++--- src/renderer/style/oswald.ttf | Bin 0 -> 153152 bytes src/renderer/style/spinner.css | 80 ++++++++++++++++++++++ src/renderer/worker.js | 64 +++++++++++++++--- 17 files changed, 357 insertions(+), 106 deletions(-) create mode 100644 src/renderer/dialogs.js create mode 100644 src/renderer/style/oswald.ttf create mode 100644 src/renderer/style/spinner.css diff --git a/package.json b/package.json index 69babab..79f74b7 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,16 @@ { - "name": "macintosh", - "productName": "macintosh", + "name": "macintosh.js", + "productName": "macintosh.js", "version": "1.0.0", - "description": "Macintosh's System 7 in an Electron app. I'm sorry.", + "description": "Macintosh's System 8 in an Electron app. I'm sorry.", "main": "src/main/index.js", "scripts": { "start": "electron-forge start", "package": "electron-forge package", "make": "electron-forge make", "publish": "electron-forge publish", - "lint": "npx prettier --check src/{main,renderer}/*.js", - "fix": "npx prettier --write src/{main,renderer}/*.js" + "lint": "npx prettier --check src/{main,renderer}/*.{js,css}", + "fix": "npx prettier --write src/{main,renderer}/*.{js,css}" }, "keywords": [], "author": { diff --git a/src/basilisk/BasiliskII-worker-boot.js b/src/basilisk/BasiliskII-worker-boot.js index ba172d7..c9333bf 100644 --- a/src/basilisk/BasiliskII-worker-boot.js +++ b/src/basilisk/BasiliskII-worker-boot.js @@ -1,30 +1,9 @@ -const fs = require('fs'); -const path = require('path'); +const fs = require("fs"); +const path = require("path"); const memAllocSet = new Set(); const memAllocSetPersistent = new Set(); -function memAllocAdd(addr) { - if (memAllocSet.has(addr)) { - console.error(`unfreed memory alloc'd at ${addr}`); - } - memAllocSet.add(addr); - console.warn('malloc', addr); - memAllocSetPersistent.add(addr); -} - -function memAllocRemove(addr) { - if (!memAllocSet.has(addr)) { - console.error( - `unalloc'd memory free'd at ${addr} (everallocd=${memAllocSetPersistent.has( - addr - )})` - ); - } - console.warn('free', addr); - memAllocSet.delete(addr); -} - var pathGetFilenameRegex = /\/([^\/]+)$/; function pathGetFilename(path) { @@ -37,10 +16,10 @@ function pathGetFilename(path) { } function addAutoloader(module) { - var loadDatafiles = function() { - module.autoloadFiles.forEach(function(filepath) { + var loadDatafiles = function () { + module.autoloadFiles.forEach(function (filepath) { module.FS_createPreloadedFile( - '/', + "/", pathGetFilename(filepath), filepath, true, @@ -61,10 +40,10 @@ function addCustomAsyncInit(module) { if (module.asyncInit) { module.preRun = module.preRun || []; module.preRun.push(function waitForCustomAsyncInit() { - module.addRunDependency('__moduleAsyncInit'); + module.addRunDependency("__moduleAsyncInit"); module.asyncInit(module, function asyncInitCallback() { - module.removeRunDependency('__moduleAsyncInit'); + module.removeRunDependency("__moduleAsyncInit"); }); }); } @@ -90,22 +69,26 @@ var LockStates = { var Module = null; -self.onmessage = function(msg) { - console.log('Worker message received', msg.data); +self.onmessage = function (msg) { + console.log("Worker message received", msg.data); // If it's a config object, start the show if (msg && msg.data && msg.data.SCREEN_WIDTH) { - console.log('Start emulator worker'); - startEmulator(Object.assign({}, msg.data, {singleThreadedEmscripten: true})); + console.log("Start emulator worker"); + startEmulator( + Object.assign({}, msg.data, { singleThreadedEmscripten: true }) + ); } - if (msg && msg.data === 'save') { - const diskData = Module.FS.readFile('/disk'); - const diskPath = path.join(__dirname, 'disk'); + if (msg && msg.data === "disk_save") { + const diskData = Module.FS.readFile("/disk"); + const diskPath = path.join(__dirname, "disk"); fs.writeFile(diskPath, diskData, (error) => { console.log(`Finished writing disk`); + postMessage({ type: "disk_saved" }); + if (error) { console.error(error); } @@ -140,20 +123,6 @@ function startEmulator(parentConfig) { ); function waitForTwoStateLock(bufferView, lockIndex) { - // Atomics.wait( - // bufferView, - // lockIndex, - // LockStates.UI_THREAD_LOCK - // ); - - // while (!tryToAcquireCyclicalLock(bufferView, lockIndex)) { - // // spin - // } - // if (!tryToAcquireCyclicalLock(bufferView, lockIndex)) { - // throw new Error('failed to acquire lock for index', lockIndex); - // } - // - // if (Atomics.load(bufferView, lockIndex) === LockStates.UI_THREAD_LOCK) { while ( Atomics.compareExchange( @@ -217,9 +186,9 @@ function startEmulator(parentConfig) { var AudioBufferQueue = []; Module = { - autoloadFiles: ['disk', 'rom', 'prefs'], + autoloadFiles: ["disk", "rom", "prefs"], - arguments: ['--config', 'prefs'], + arguments: ["--config", "prefs"], canvas: null, blit: function blit(bufPtr, width, height, depth, usingPalette) { @@ -266,7 +235,7 @@ function startEmulator(parentConfig) { if (audioDataBufferView[writingChunkAddr] === LockStates.UI_THREAD_LOCK) { console.warn( - 'worker tried to write audio data to UI-thread-locked chunk', + "worker tried to write audio data to UI-thread-locked chunk", writingChunkIndex ); return 0; @@ -279,7 +248,6 @@ function startEmulator(parentConfig) { ) { nextNextChunkIndex = 0; } - // console.assert(nextNextChunkIndex != writingChunkIndex, `writingChunkIndex=${nextNextChunkIndex} == nextChunkIndex=${nextNextChunkIndex}`) audioDataBufferView[writingChunkAddr + 1] = nextNextChunkIndex; audioDataBufferView.set(newAudio, writingChunkAddr + 2); @@ -290,7 +258,7 @@ function startEmulator(parentConfig) { }, debugPointer: function debugPointer(ptr) { - console.log('debugPointer', ptr); + console.log("debugPointer", ptr); }, acquireInputLock: acquireInputLock, @@ -302,23 +270,25 @@ function startEmulator(parentConfig) { }, totalDependencies: 0, - monitorRunDependencies: function(left) { + monitorRunDependencies: function (left) { this.totalDependencies = Math.max(this.totalDependencies, left); if (left == 0) { - postMessage({type: 'emulator_ready'}); + postMessage({ type: "emulator_ready" }); } else { postMessage({ - type: 'emulator_loading', + type: "emulator_loading", completion: (this.totalDependencies - left) / this.totalDependencies, }); } }, print: (message) => { + console.log(message); + postMessage({ - type: 'TTY', - data: message + type: "TTY", + data: message, }); }, @@ -332,6 +302,6 @@ function startEmulator(parentConfig) { addCustomAsyncInit(Module); if (parentConfig.singleThreadedEmscripten) { - importScripts('BasiliskII.js'); + importScripts("BasiliskII.js"); } } diff --git a/src/basilisk/BasiliskII.js b/src/basilisk/BasiliskII.js index d69fb7b..e44f54b 100644 --- a/src/basilisk/BasiliskII.js +++ b/src/basilisk/BasiliskII.js @@ -5017,9 +5017,13 @@ function copyTempDouble(ptr) { return 0; } - function _emscripten_get_now() { abort() }function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg, noSetTiming) { + function _emscripten_get_now() { abort() } + + function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg, noSetTiming) { Module['noExitRuntime'] = true; + Module.print('Hiii') + assert(!Browser.mainLoop.func, 'emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.'); Browser.mainLoop.func = func; @@ -5039,6 +5043,8 @@ function copyTempDouble(ptr) { var thisMainLoopId = Browser.mainLoop.currentlyRunningMainloop; Browser.mainLoop.runner = function Browser_mainLoop_runner() { + Module.print("runner"); + if (ABORT) return; if (Browser.mainLoop.queue.length > 0) { var start = Date.now(); diff --git a/src/main/devmode.js b/src/main/devmode.js index 633870e..3b77d54 100644 --- a/src/main/devmode.js +++ b/src/main/devmode.js @@ -1,5 +1,5 @@ const isDevMode = true; module.exports = { - isDevMode -} + isDevMode, +}; diff --git a/src/main/ipc.js b/src/main/ipc.js index 8f014f1..62cc160 100644 --- a/src/main/ipc.js +++ b/src/main/ipc.js @@ -4,7 +4,9 @@ function registerIpcHandlers() { ipcMain.handle("quit", () => app.quit()); ipcMain.handle("devtools", () => { - BrowserWindow.getAllWindows().forEach((w) => w.webContents.toggleDevTools()); + BrowserWindow.getAllWindows().forEach((w) => + w.webContents.toggleDevTools() + ); }); } diff --git a/src/main/windows.js b/src/main/windows.js index c22efa3..e3af442 100644 --- a/src/main/windows.js +++ b/src/main/windows.js @@ -1,7 +1,7 @@ const { app, BrowserWindow, shell } = require("electron"); const path = require("path"); -const { isDevMode } = require('./devmode') +const { isDevMode } = require("./devmode"); const windowList = {}; let mainWindow; @@ -26,14 +26,14 @@ function handleNewWindow(event, url, frameName, disposition, options) { resizable: true, webPreferences: { nodeIntegration: false, - navigateOnDragDrop: false + navigateOnDragDrop: false, }, }); - let newWindow = new BrowserWindow(options) + let newWindow = new BrowserWindow(options); - newWindow.webContents.on('will-navigate', (event, url) => { - if (url.startsWith('http')) { + newWindow.webContents.on("will-navigate", (event, url) => { + if (url.startsWith("http")) { event.preventDefault(); shell.openExternal(url); } @@ -47,7 +47,7 @@ function handleNewWindow(event, url, frameName, disposition, options) { newWindow.webContents.toggleDevTools(); } - newWindow.on('closed', () => { + newWindow.on("closed", () => { delete windowList[url]; }); } @@ -66,7 +66,7 @@ function createWindow() { nativeWindowOpen: true, navigateOnDragDrop: false, nodeIntegrationInWorker: true, - sandbox: false + sandbox: false, }, }); @@ -82,8 +82,8 @@ function createWindow() { if (isDevMode) { mainWindow.webContents.toggleDevTools(); } -}; +} module.exports = { - createWindow -} + createWindow, +}; diff --git a/src/renderer/controls.js b/src/renderer/controls.js index 988bced..44f212a 100644 --- a/src/renderer/controls.js +++ b/src/renderer/controls.js @@ -1,8 +1,16 @@ const { quit, devtools } = require("./ipc"); +const { getIsWorkerRunning, getIsWorkerSaving } = require("./worker"); +const { showCloseWarning } = require("./dialogs"); function registerControls() { document.querySelector("#close").addEventListener("click", () => { - quit(); + if (!getIsWorkerRunning()) { + quit(); + } else if (!getIsWorkerSaving()) { + showCloseWarning(); + } else { + // We're saving, and we're doing nothing. We're making the user wait. + } }); document.querySelector("#devtools").addEventListener("click", () => { diff --git a/src/renderer/dialogs.js b/src/renderer/dialogs.js new file mode 100644 index 0000000..efdbde5 --- /dev/null +++ b/src/renderer/dialogs.js @@ -0,0 +1,24 @@ +const { quit } = require("./ipc"); + +function setupDialogs() { + // Still empty +} + +function showCloseWarning() { + const warningDialog = document.querySelector("#warning"); + + document.querySelector("#warning-quit").onclick = () => { + quit(); + }; + + document.querySelector("#warning-cancel").onclick = () => { + warningDialog.classList.add("hidden"); + }; + + warningDialog.classList.remove("hidden"); +} + +module.exports = { + setupDialogs, + showCloseWarning, +}; diff --git a/src/renderer/emulator.js b/src/renderer/emulator.js index 4ec9e6e..3e3f46e 100644 --- a/src/renderer/emulator.js +++ b/src/renderer/emulator.js @@ -1,7 +1,8 @@ const { drawScreen } = require("./screen"); const { openAudio } = require("./audio"); const { tryToSendInput } = require("./input"); -const { registerWorker } = require("./worker"); +const { registerWorker, setCanvasBlank } = require("./worker"); +const { setupDialogs } = require("./dialogs"); function asyncLoop() { drawScreen(); @@ -9,8 +10,9 @@ function asyncLoop() { requestAnimationFrame(asyncLoop); } -function start() { +async function start() { registerWorker(); + setupDialogs(); openAudio(); asyncLoop(); } diff --git a/src/renderer/index.html b/src/renderer/index.html index 0ca36ca..1271ab6 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -2,19 +2,44 @@ - Hello World! + macintosh.js - + -
+ + -
+ diff --git a/src/renderer/ipc.js b/src/renderer/ipc.js index bd50d4a..df574a8 100644 --- a/src/renderer/ipc.js +++ b/src/renderer/ipc.js @@ -7,5 +7,5 @@ module.exports = { devtools() { ipcRenderer.invoke("devtools"); - } + }, }; diff --git a/src/renderer/screen.js b/src/renderer/screen.js index 1b733fc..7204475 100644 --- a/src/renderer/screen.js +++ b/src/renderer/screen.js @@ -14,7 +14,10 @@ canvas.height = SCREEN_HEIGHT; const canvasCtx = canvas.getContext("2d"); const imageData = canvasCtx.createImageData(SCREEN_WIDTH, SCREEN_HEIGHT); +let stopDrawing = false; + function drawScreen() { + if (stopDrawing) return; const pixelsRGBA = imageData.data; const numPixels = SCREEN_WIDTH * SCREEN_HEIGHT; const expandedFromPalettedMode = videoModeBufferView[3]; @@ -41,6 +44,26 @@ function drawScreen() { canvasCtx.putImageData(imageData, 0, 0); } +function setCanvasBlank() { + return new Promise((resolve) => { + stopDrawing = true; + const canvas = document.getElementById("canvas"); + const ctx = canvas.getContext("2d"); + const bg = new Image(); + + // Clear + ctx.canvas.width = ctx.canvas.width; + + bg.onload = () => { + const pattern = ctx.createPattern(bg, "repeat"); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, canvas.width, canvas.height); + resolve(); + }; + bg.src = "images/off_bg.png"; + }); +} + module.exports = { screenBuffer, screenBufferView, @@ -48,4 +71,5 @@ module.exports = { drawScreen, SCREEN_WIDTH, SCREEN_HEIGHT, + setCanvasBlank, }; diff --git a/src/renderer/style/base.css b/src/renderer/style/base.css index 7bf75ea..14bb9e6 100644 --- a/src/renderer/style/base.css +++ b/src/renderer/style/base.css @@ -3,13 +3,71 @@ src: url(garamond.ttf); } +@font-face { + font-family: Oswald; + src: url(oswald.ttf); +} + body { - font-family: Garamond, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + font-family: Oswald, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; margin: 0 auto; padding: 0; + font-weight: 300; + text-align: center; +} + +h1, h2, h3, h4, h5, h6, +.garamond { + font-family: Garamond, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;; } :root { --canvas-width: 800px; --canvas-height: 600px; +} + +button { + background-image: url(../images/button_left.png), url(../images/button_right.png), url(../images/button_middle.png); + background-position: left, right, center; + background-repeat: no-repeat, no-repeat, repeat-x; + background-size: contain; + border: none; + outline: none; + padding: 5px 9px 6px 9px; + font-family: Oswald; + margin-left: 10px; + margin-bottom: 20px; +} + +button:nth-of-type(1) { + margin-left: 0; +} + +button:active { + color: #fff; + background-image: url(../images/button_left_pressed.png), url(../images/button_right_pressed.png), url(../images/button_middle_pressed.png); +} + +.hidden { + display: none; +} + +.absolute_center { + position: absolute; + left: 50%; + top: 40%; + transform: translate(-50%,-50%); +} + +.dialog { + background: #ddd; + z-index: 100; + padding: 0 20px; + border-left: 1px solid #fff; + border-top: 1px solid #fff; + border-right: 1px solid #aaa; + border-bottom: 1px solid #aaa; + outline: 1px solid #000; + text-align: left; + box-sizing: border-box; } \ No newline at end of file diff --git a/src/renderer/style/index.css b/src/renderer/style/index.css index be332c0..d420944 100644 --- a/src/renderer/style/index.css +++ b/src/renderer/style/index.css @@ -1,6 +1,12 @@ @import "base.css"; +@import "spinner.css"; -canvas { +:root { + --warning-height: 250px; + --warning-width: 600px; +} + +.emulator_running canvas { cursor: none; } @@ -17,6 +23,8 @@ canvas { background-repeat: no-repeat, no-repeat, repeat-x; background-size: contain; font-size: 12px; + margin-left: auto; + margin-right: auto; } .controls .clear { @@ -41,12 +49,10 @@ canvas { text-decoration: underline; } +.emulator_running #turned_off { + display: none; +} + #warning { - height: 150px; - width: 350px; - background: #ddd; - z-index: 100; - position: absolute; - top: 200px; - left: 225px -} \ No newline at end of file + width: var(--warning-width); +} diff --git a/src/renderer/style/oswald.ttf b/src/renderer/style/oswald.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7601ddd2747739757a6f9b71c482b44df3cf9a5d GIT binary patch literal 153152 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≻F!x??*eJH7ldHK*_?gd1h?ao|0G%dZW_-LDXo zIBZgIr^E$#4Zl(2I9HfGs>aE0^*`0Pjx7PdK}oNNENQJ84}z{fyqU=SgJ;D&f5dG$H?6oTyd=!6G&r_^MqaTpG23e`AxiJE#ft~p#!aJE7Po;k|4UT+{7r6EuF;K$~_8Goy_T$N@_b>&BB2Tsv@b=r(X!$JsFM zI+1!3TDc=^NT#o2TX9{BXPc0YJa|(+TafQ&NE3?iZw+#%6kFLUaBYW>a=m;yi5Pfr z$Z0iV6G*ce&u5p`q&^3?aaJ9=@WmSBHjX-N!f_#msILS6Dv`$sYPton+35?wBcA=m z?04oP-Yr2&YR9N7**qtAGjiU7x(><~PohPmvewk*V^N1fRwnCGh_Br6sIUrk8UlBB zZtah(jZ)%-T3#JsJP7z~o`IqQ!)<8SHsrn;Zzu3O310VhKw$)T0hm&MjpCh|1>k08 zi;;3QYEAvO38~F$ig8?rr17;5Uf;s7F`H5n)D+l~H5HGb*=^Ey8sWb*sQNFvb+Z{-GRB$2$*j{j)TZ6@a%AG0a6a*`BwDaV#L=Y zUXL2ktO;DZaK9ek)7h=^&wnN6+fn|Y`_5P<_}DOug#CdIe0~G?@K1o-Z{#5yr@!!U zaM>fk4UgneJQ}j{A@DnI11CKW(&TvXtPe3ixY!BcfadTdp3FYsCP+L|A@fMbcpU+* zv4Fpt!L2-#XF(2<15Rr$`1;R4B4UF)p#TzvBFGf-xD#>#7yAZM1`jL}OTh29@iJb{ zE5H}8#MygQ>^WWy3B|YInZH0>e@Ij6xfeY421tJ!!DBDt^C4epfrO=vw}aE};0qvE zSjangCnOeKd@;r-^bB}6IH)~*3GaoU>VEKH*YIUHd+ZqSR9EnokZcU{ReXpK^AWz9 zuK}LD0DSh_Av^Ga%R2`Cum_ypalRhXk4Z=oN+7-e08)}okbRI;=UDK6xAEincD{oj zkGc8^KLPTDS0Pte3;Dupd?!DdpTbXt>}MC>%}?iN@G~I=It#Lea!5nYfgI&Lem-zZ z75kK503Ps9`Gx!np5Fj|_Biw} z)(S@O$}v&@I@^?}v85MwR3LF!=7o^?wY~i^n0ad4l~*<^Ml}^A_45A$Xp@fN}de zBrh*Q;_-X7jlaZShVG0({{yr`NK)`FBs}j)c>!b$kUDkp4*k-3#$BqEfGQB=^um~!U)OjnIaSpF2V$KWksZjf`sfO5iMfa zP7%va7IEw+kX0l=T0yc36C@QRuOO*}MP$H2c_}0pQc?l=+H&@p$idlLB+1AZHeqMS zhywO8T$~g^s_hgm;f8j=!|W=Yr|c2Mq6CueGH~WAM5U+_)ncBg5w)UD)C;d@5RFpG z*9>ctR>=0+A*Ea>rId>x$y^L6We;S3y^vw{LwdPPESD0^m5?9~LJBzqS>cFSE!IF9 zISSbTNeD<*FbO%~MzIN!&@E!CI2KaTpT8c0B|6W5Cy#4jLm zxDhhSn;~)iwYWvxDsE#}Kw{|wTQC+`k^-nMl zBOrrKW4{Ikc|FTu*Re;~>5$9lA*ZPkcY(YNWh>YKv^{EBr1%Zn%kB_&0|!0|&7wQm zU7)A#W;cVvdXPN?X^jz*RM42>KFCP!XQzn=*aOTU9uyC;U$UZ!^W(E0s2IQ<~u|2R~JypC2ZMv0^CY>T)V!snFi&w;};x+NQcms0Ww;-8& z8}hk#A)R|4lDPwr(0u?I-ACeM@h9<#__O#_d?x-P{wh9a=Ri8UAJV5c*tw9gdLff~ z3o@y9*qh>S&_(!C{9Sw{{vrM;z82qze~E9!clx?jn?{ZuF>IX}bvD*DD%biF_3BWs zF7@i6tHbGSQ10vGJ-+j*_v&|bW$JyMOz(22`P2ojGCzmQ;WE^%9~{~=Ibo=qTr)W_ zGG?sXG&-?naA@n65kp<0a+OtcxI(-`qnn1du3tSqa-7jSJh^3XXlP_&i!8y}w4$bv8PbdN`Yua-H5{eWPr)zELJtYFn?i-mA94tJc=5w%)6>-sSKZ z8|M`7Y^+xsTpws~iJ?(#SfkP~wFn6)hqJy^scxfMq*GoU&L)q3zN}Hm{KJh^lDb^R z`EyEjI2%3M=2e56~R;( z==ktRNbBLu)VeC4INcIF7zCyIcG*Gt_8A~LobGyUJF2OCqLhMqN=V|9I{iZBlZCTB z@f2$sC)TK6)ayHDs_krSP`jW(t$u^r6%Dd0@Ls8l%b~#4HsNg(srZE_1&|w zEs@P|xSVRUO6v4IGca^G8{87KE~g5!#=x~i*K-&qjcS2SYJrUb7^y94Yz*u9cbGU! z3_U7LdX(X#>!As(?~#K@->WpQ_i*!qdxu9yHjQi^-K_6jvuW_yk&ynwFO}}WBbD1g^yrAWpB^-F5OF-vzLm zoSe8XSMsT=m+4&&HJ`e`RRyfWZ5UL6FsNd&!NXW=a70#C$;#ml89Lltqy=`GQZ$oA<+W~HiEo9R`n>s71eRh#Kmn(1;B8%Ji!QL0g|wyZwTvQoo{ z+Jcce=t@Gw;VPEt9jj?$0Mz!=!fs~tz}mG6{Nfz6!y31wVQ z3~rd*yk*nmhP5O5iCLd{N;D%g7|pAnoM{wrkJ?KOY8NQ86VKH_*r2QoE{6(wm)b?{ zK<}!9)Z3(+JUn|FRKPT(HS=R@3Ys@WSCT8r(m@Dkja0;XlhQyrTR?@ zd^XK$Xt7#br>q@NkXyf50nO$kpzd<24K8u&#wRD%Y}RfeJho+4W+lpScRAI@l+^3D z&Oi=$OyVt+p+c%La4pqsJq!t@b1_0ycr^wfqqd{5DQxS%L&Ax61R$Z}v8@u1ZB_8t zHlM1EH3y?t_OIpj7yI*a4+GD=gLCmQBi}(rPjlxmgiFI>k8CY zP47~A*W*&KmdB;m$EDWKrBELpSD;=B>hUNmuEV3Q{2q0_cpQOravejx)qEX+a@6`d z)chT4c?zL~^lJNDf%>WCfn=3%QWsrMiJHHP8a?G|e&y=(I#+NHP{iQqmZ9wtYK&0E z*vQa!B`1|;^r%S9qtH4IkFp{=JPIv?s|rD79mKr~K^)bt^myRC+CsP5;$pQ2iUaS} z8oJdMyH&`#RfrX>veq!N1`k6NBbg_tK$Up2i)t*1w= zr$?=iN3EYnt(PZIuR#84`5v`?9<^TTBIPL#)H~4rKsjoCRVvJ*;x13IT28T=k0($+ zwY=g$kE``BQPY(N;I7uYTzy{W4&FM`<7(`P9#>N;#JIzwtOe-ta?v?Toe9cNCc#x{ zj6+$m9gcdXG7g27aXCso@f$`qjZO~JRtR*}uv{>`b=`7II24iwl#3h#u2N-8;i|yY zQRfieE?J_ZzBp`X5}0{CwqaWaH*MDr150Zgw{DtL-^-G*VQA2fk8T=NAIj>v9QCqK z@Uld|VPrGDS6|B^fY%cAxXNOYOu4FS0w@$EZ=m*|k@Xw4Y)1~10h(K^Uq3p5&7gks z$k61(u*}w};5wJnSrR<5c?*{REhF-c!==>2;Zo<4Tb<2rM`^Ic#6y$oR|QL?OEFo7 z+fg4vWw{;R!ohK+T(>&Q@k~vlj7hhnE?6!Iv%dC(t(}}48(cMcENVEDr!scjDwcMu zSlaEZ4+XAYH8MWA?Qmih^}(-@QkaVR+$zd*t0>5=A^^9$SgEk9gen}WRNhrMG`M+0 zxpCIZ8?{*_Xqt0Y+%YR&J}d54KH%GK!tWO7>T>W)NrZhTzmo~@C-27Z1K><@Xd*w1-$%iZ z@1AA~nL`31ulFChN0fEF_GfWYPY z3|~hR_`o;Q;x`uo)=uDqF>t_;>pn6*!e1@^fonxQ$9!)b_~@H&4^I0i3)3-IJ^{ekS>n-MinE|IB}S*{LToPmDcfIAuMZQ#X-|&e^-2 zH#wS;n>}gJI&S){WxLZ6eDJ?i~r6s?$sny>aXpOWg zTWzhbR(GqXHKoeRaB)?nN&$?r>0ed z>jg9#jaHMd&C_-1^g4sis&^Y&4O)Z2U@|yNCbQ9^wpeX~&2DozjyQt2);c-epXJH+ zA0gc# zN6U(E=PmbP&*9xS-ghVQ+Sejr8_LRhs**eQKJ7ab`C>s2AcAVDA z&%mq+;Zm`8>1tuzdGGmZsv7#Is&#mu8GLb0lk^I|VDF2<5y3z7RS?D1cyCs`fjwz& z;B8m5%XThBRP+rqrNcd0bCd-`-U{W=caCxyPL7h_wYvQHJ5T?7!uyf_Tfc@nyq!jc z{tNvc`DJ=k{{pZ6h^VWtH`KvayLqBvwc)j)FV2%1_8Q(Bt|O}rU&u011aJ5Sufe#K zy&mII^F-q+<0HmrrS~Osj=9`C(R`Qr4f7`RCX2>WiFdi>Wy`0QBY2}$6?;wAe7uXT zRXCUGP3u{lNwvy$kL^L*GqzvY-nDJC?Xn%W9k>4k`G}qaO81p{u`A32)hLYc7vs&t zOxWgoX0d*SGZp>|ZQ*sSExaCc6Mw;4lFj5G z=6Y)|kGc-?ugTcIlZw4TA7i%ie(XE?9(MLLV6L#5v|)zte@Q#$>)s}PtQG91`*1K{ zx)JSP5Ut&Q5~ee3B!ayrgn2M{o5!8gbe@aT(zcD$V`j_28R#q)&SIRzPvWeY zcbdZ4F!MBvvtypPM@WRqI+xg z>$z32L)h=MhT-iDACEQaH}Z>O`^Z9maqIxCFE}r_@=VXf^l%*nN2ngBl-*%~|Q{hp0DU!#)724+&%#ClQ>AvQLXhY=f_Ft2z&%&g}h zpa{OytcjU=6`ZZ$sbXAmnf*d$vz*ziU^b^RoAkD@9_GG*;V6onhRN+f7T2k?#zmZ` z?jk!7E)z`HKohtJV&T-qh_^R!8^Ge&d&tW?p%kn^lIbTLd~=w_JA(8Dl27Erv1yP+s%GDJRxJey$-!#ND+GMvY7K0~bX zg2~GmE@Zff;f;i(CKFaVhhCg8VIKw9xRx$K3T*t7Q z;d+KYWcVb*rx-rX@J9@vVfbT)KVkS&hR-tm8N=ro{+!`282*ys^9+B*@Yf7qWcWLT z=rzo}Qv5x`R~i0+;cE=B$_>;%GV?XDV5*87V|bk535K-{Pcl5k@HE3ZhG!U_Wq6KZ zJ;MfujSQO@HZyEt*vhbtVLQVPhMf$%82TA@Gwfm5%P49p_!qDp_QSHp`D?Fp_8GDVG=_(!!*S3 z29D<54IItA8#tPKH*hrfZs2I{-N4b@yMY_Qa4EBOCBtP5uVQ#L!)q8`%kVo4movPM z;R=S=GhE5=28OE`-pFt@!vvokIRBL$rgCKgaOr41dA!mkgh0_$!9!zr*B<3{gkm zn;mro5Oo9)bp#M~1Q2xu5OoCbkIX#ovOo}MT(=^Y7vYR457MX^vC5M!PN|I&XwFud>FmR+W$4^Yf$+bhPN~P8TtkHaKE7lzxf?e_ziaXyWr*f_kweauN98OaJB9a&23J-=cO`WNV>K$Ap%=wEz7WGGJfYyyKq+J)DQBiC!65<;SS3i2`~ZlS9;T>! z+o&EZF|;2R#mXL@T+7VeMv+T`o=CxM3#0>jNImFLyWfLq8ci+iz7JrlVSo%U3^EKc z3^R-{g#YXTjxdA(InPkZP{mNqP{R-_u3<*UP|wi7(8$ol(9F=n(8>@aT(D(l=wOJe zx}oD@n8XmHD9~BT@Jfcu7+%HjYKGS^yq4j27%pdsoQxHKE13LxhASD~z;G3#-pJ&u z8Q#S3W`?&gyp`c?4A(Hco!PpB$?s%{{0bl5&F~(E=#fANc?^iuLu~V84N`z7VIard zjuRD;Dx8I>&_Cu@A>X0Q*le^USl^{3fn?Bw8zXKF7(nze6VXuZOhK**H%Wnlmh0vY_ zuS2MZ3K3e0HL)+?t5fXDr5RM(U;i27)dIvidnSLEB9{sjcxa*~)T5^G@MvKy`w(W1 z(n&v1fw4+rd6Ux3TX4=4u^eKi4pB-hIBq#l5GoIkQeb(RHz8&+VDrb!{stgMHDiAB z(-3X3u*C&e(c?jxM301qgHyl^#$kXe=F;mJ10|Lj7z3q9-Mb4b9f{?2KAR%OB&qof zUIA`cKN;&Ww}Nv3c>;cCd15DUO^@F)d$%w=&hQDKit$(m9`$hBj#w=O4~o=wIc)DKrQcOm%*Nvkj{!OC z4e4Vw+UHC)4L-rAH_o*qrXW9q(6LyaTqBxAm)_H~kLj^-6Llr|cLk&YMLmfjsLjyx2LlZ+YLkmMI zLmNXoLkB}ALl?s&hHi$*3_T1}@P+vXN*(hd*#rNg6^S*XZBkH#Dw*o(9>d59?)@_0 zWH+n|O?Z$Y&wGq}&QlUo&bL#aZ~9VIv49aZ^~E01AF;4u%b=-2zr~sjr$l|p+$qB@ zs*ZIU4!};0NRx5Uo~-k2#XDG$UoD*v__+>pR#`=tCWrsdA%!U9pE9=I> zrUF@hArbCGFQk8QJ)`2{boec3)SYj}Xc5(>()0B%q`K5{H{9ICcn!wMg-i|V86O;! ze_I)~OYKm6{oPJ^Ig>@+} z;JPVF%41v)(vtP zEGMzE#;3*l6ZHw|QPfw@Qgg9Ji?A=23`19WXS&;E@nSgZ+z`y^r1B5{WpiI z2j%~se2KK(MBP9b-j&^g`~z9eXsm58Zc1z$EGDQ}}a`{bp*OVrkV|8ik(Dw0C+9qoIQp^oAgAo{fd3a#ii#a_HX7r{@^LSI( zJl-74$BB?TvA$&kKHYen(?)0W z4zk(2W}N(3iCcr{oL+#=>0#9i=JdD>oc#C)E|bpYak%Idb98y={nJ%6^vjs;eR5;G zF$X)Haxu$jVm`yZb}}1#rsz&nE&O*2e19umJM*QT`O*$w-VGhP+t-7c_FrR^ht52v zz=s>KYwCCKw+>$nf5C35x8Zvw^Su?mKZx_~4&in@6J{j4F`rI%Vkxi}s~>&}V2;v^ z@L`09h0uWzVigK@eI{e<0DC@h{%{)RE;TH)E`;`8=&!|i1MZzd$T>EfX<@UOP8xDz zWAm6!8ghKaU`&mLT*1Q3BZP~fM|bKvSV)|R^b@G zAK~_bXRzB+#e8qZTm{9|Us5!sOp&IKc4tOy3TK zSs+hdW!TE_0K+F4{tv?k7@lU>#?Z(xh2dWq-p}wViX8na5*D-vFVJAf{3COXqaD@5|>%@TgmS?B{@?o6!Fzl zhuP|>X52+V*G=IvSM1T|FndpL^%@Cr6y98vs>LW>bj8{{HUv^V4-}*d>j1Yn+R&TZ0Vi*07ry>(;P?8SB=No3L(;yPmFF1{o z8uvcUXWWN$tr|{zrStip)3s{c7j&%}w~4M*<2KW^YTVa!ts1w5u2ti<(Y0#acDh!L z+d)^Ual7a$HEuUurN-^0tJJW1AcK(X1^BNS_Fo1y{o_k0fi`HC1C7tBl>WI)6qtG( zlT*9YjL7GLyto4?_Yso*K>B(!dgD|yp~t|)R|eIlF!cW}s%7)0jiOq%CyOTZ^qGB# z%-#V>T`P%=lIRyj*&gLf&C6;tTD776lJ#Zx&4@cjFObABk~kG3I@jVqPZU$|1(Nb4 zPf{P3#Cl2W6veo`prnR7)Sj$wK^I`CyRyFQA4{4@x8%d#Wc$A|4=`Vk~nct?RXya#iBZH9{J}yd$Rr2l0HOc?=DIGpd?mF;xm#c*`s`! zd7014=hJ2X#ohlvqJJTYJ0$TC_%!2xN)m&ZKX%}+5XH1{SX);KdGYxo)pzC$(MNhQ zb2FTGIafem78iE-aQ{>9E-&>zL?;dJ5OrL?N}@w_egbne9;kWLe@vv| zrs~&4F>dc&Ney?Xy}177^UcZnvVWX=B!0+u&UXCIiehFOA(@B+XH*nj2*0Zmf43x> zhN)%!EJ?pm5+!?S0o38hbFM2S@m5hp1d+72(mr*qg?J>bF>RM9x*i#(UO!Cztf;2; zT`#148n^e#`Q~K)GF?`?5MR_i*C()#IB+4Jn27w~>cqcZ5}{7A;6Em5YSLne8ImZg zsaPa1Nn8i#6 zx>nMM=*~%>m((b!{gN1#%&R0(;^VeRYL6&Vcc^{Y9e1%rp9=k_p}$lTse0ZJ^=e7~ zVM%;pm^+et@o>B=(La&I9g=uR5>H{H2FhnzD*m~UBmSwFtiT_6E*beUc_IFjhlx}_ zAOG_6_0v#p(q4w%t>=qWKY7KVK2xuS`Vq<8v&oy14?uk(5qXj6Q@(GB<~)yhUhur` z`M|SQ6qC=Mua4`t57UReSe5U+rKt|U@*>JW9Qq+cnCs~`?>Uv@9C=7q*WurXf9u7?G#W1mcZv$)9T1V{FDQbZVi`jB3^O-IQqO{!)%c@KohM!^ zsZn<5_krC1Px&=1xu9)e0!}E0d`SO2-j7D!p-)PWBt}Is6?G4NQf-o$1v%;{xgRX| zi{$FDgKDd)FYBU;*&md`|LHKes$q5^&h>fAV+)Z zmH2rjesX;rub;u2wGXw79q~3wqF)r#cu53*`pD%=E;n*JmUe|0-)YMwQA$U-Tu{5T z{*~)Txt^B!rLPpzLGF*s@gjeZq_=~Px?S!sLxz|IR*3x=j3f0aKDKOjj-xW6)AEU9 zBh&k#9}id)(S0^leVD0LLe!9N$0?9l(dx9Uu)RoSaAgL}Kqf>j7529w(|}_> z)6;-snkW-60%-pQr9v%o-BLw;cS`6qsO)bsSyUf(%%L)cP49Qmb0SYE9?~~5AD>ce z(AQEQGwK2R7m|%__Q{a#h%MLev0|?rIZflij#cF3Pa=PXTmPE<9#GE0U(7e;Ed0g7 zj5F9I-*6^odXo?}zhrBMKMg{s`Axfv$`m&9D=-IHG-Q53ipn^) zj|rV*mF+B*f&bO^45k+)3u#P|$70LL3@gn8KcGHD@17@>%uQ;V#TPipK735!M#uC6 zY7e}{__~6b{y|)Q8B_mFPCxQD@DWYk!6^R~H+dIR2NX8bgV4jcW;A4aO!FXQ4=Zd& z6Vp2x4UuBaYN{s`7=l!fvw=6`$YnAPC!s64;HPSCfe_VwV*La%q_pV;W=8|w&uTnO z&uv<7?SafBbn0KXZey~j{$(3n;Y^6P=ka|-We@3}u_1*Z+n}$qJs?pZwAM0NP=6QW zY*N(gS6dfTJ*4)vSOFw(W<{=UqV+Y%Rx0d7XPtvs<(c0o|1qLHIaaBgQeLNF7DMvB zWZJD)S?5vSIQA=SrD^K(m z5LJ_i9DA56kSR|wlXoj@hWnr=kgnKrZI&?rnV_0!^_Adv`$nnI^|X>%IMm9gk^)M75Z7Oy<(4 zj5MY8$Chghh78CK2vfDG#^a1ys%|u*Rw3u)I3VX_AL0Z?ISxipACXPMaXqc2c=9Dv z*9aOi87puEQUg1z>_N7QbXc7*0Mkb-Ym?R>ybGgq8zwPp$7ac;HZI`Cy!8F za<9Usc?l*3az8&qBj(Ec5eI9qiU)c~)s@C#CUa?)8D6I{ge^l)OX&kN4;U%0(Tvyq zLaC+{E4KvlD10HdNsq=u_-Jf~*)XPl5M`Z}R`MXN& zN@cO->NG7at%qn@=pR6MXE2uzz&Fbfv&ey{2^VN-?mYlsS0Yw8DNYVjJ1j>mgdLu& z5^ciw9_VA9OpCB_r`6nVCs)!PUS)kdUfPup+L!MfAVoOq^v-WqIxc6v6hz9J!pNFYo3Pe zM|=x%Ct`(jF%Em+Dve8?%VFvt37tr@9BaW@c&+kwY<-sgI*n z@6uBKG)HaH(pvL4((5DjS;$V%^wDmB?TMmkgjvk-)XY>hjZbP%%<-b>`(Qd-;#~^c z3!xqUms-9L=)BF1+i zk=vNCTu@jo!R6AF16AO1<7R$M&5%v9U%08U<-*OX9nkxV#tTvf zv)!T@**0oTgjsVfC?7D&Td*zWlDA++tdZWL$gNSN5IKCmWa@Eo_1~$Q97Em^%}-|PgP1_S4`xs^#Z7t{t8B#}colTmiXDTAqaH=}HhQ#Qjzozg~l^52xgO^x%gGLv7%O@0}te8MOn z$0;AjDSu{^`{U~6!_-qnH9{c9;h@Rs!%WU*>U-m1&1dSt5Ee1@LHI$8i=|B66IVBg zbRx&dl~m2C2|~+iW)IXnd7GK)6T*`2ub8f0)Frar=c$?-tRYr2dLZt%wW2z1{$6ID zkJFzK)p7cds2cT?91EM`l)cQPL8fqqIOS~EkoxS`4Y}TMB@7UQ{J5F}ij*G1s z!3rU)0(uW?u?Sy`|H5H^v=}`7qYX)*4VvY+9B`q3^h22FVWMb<+P$!S?309V=}o@0 z4?|;;rfMm|Bp_@8-KPmPtds9kHMf<~X?v`InkPY~`zs=wQbVmm++pPn^k|$IfT_4q zVfYzDv;`O={XLRcz(mA5duWf!R0UV*z1}=E%Q1Zw){dp2Z!#6DYF5%zLaR;P=eZPW z8tR)Rb(W|`pF*T(OLV8C&ZX*DES85IVbuNziT;>GrztOohAzz!LsN`(VE^|CN=e|c z5`W5T=zk5=^iS)=q52n+Q!^Jfhfwk}7=Kar3``;<{0x@Q5l^5dAss7mlEMzGJfiFO z9>huEzlQ2HoPWLps|VeKuZt>Kn$rbgT{I!F5*tR^`HHBYW%x|FME z%KHDkA#GRVBK$U+Ps;Q`GI>NW7Y$=E*dwi{I-+w3RBU<#1gusYSPVQX#2- zCYjes>JKEf1!^%L>TtV6&v|DG<)SR%L2gwuGvZl6Cah>2Lp0Nu&(0tVaHL)aSv7Mh z@WIQbFV7%9S#Mp3Ozo4$+g1SbgYq=4J%aPUeR5^0TO*h@WmaM(`uG?=TkKBrLU`Z9E zHAd7841dA!1%@v(e3juF4Buw>_j~WV`5yAg{oh-AKThJOsVt@l$IcxSpjJvT zM|)|wXNV!KW3X0{p_ZYQp^2f9p@AXd6DDac$5$@fDaK*lWeWQ4&tT>4t$3dn)(h*o zPjSM{a=iE8eJ=jK%7236wkn0yF!QqT1#MZ^P9%uWb*_&x|97J0%!r+;UQedWx=AG?5J4 z5OI%W2It8)Hk%8O@~NNDXK&beK}4hSb|l=mtoc8yQs0=!`k0Bu~M-OH4t5U zC}8d30H?$)731+$KzWI=g%i3Eu1Qj?D5yVK=xI12XSaoI>M^L%l4A87(AU=<&3*91;&K#~`mj zS3z?I%@c7G)D{gV#}%BXr$sn9OqdZrTkQw6XRP98_hXl8NzfwHG@ALnPTydG@-tx6zcXQeil>n_ILGzInyv5S)%V3&oDqvIi|xaa2s z*fYV_EE4iicVJQqE_mh;P{zb^Yt@yqvbDBUo1!<-G@du8pbxBuaZ*Y13M`JamZJn^lSZ{7Eoo8G?Z z?fc%%e0R*dx4irKUvuBP|8GnGe$D$!-oNg{v=4JWT=L;{A5Hz(`|*t*-|@+UPpqz)|Lnl1f$V|OfeFDG!TG@@p;@7;!pFnQ zVmVv}m&q0JlZ2QsR(YLzgl2?pq`pa?V=AzhJ4=$s=5>xLnz?L=5xI|+M&zRy`F)JL zKW5n#%T0+rP=ahP7E?lYenP4?k^kCGp4>J+~aB0xX?EMUf&wVDnOVO;og}0qwi9cS!hD(UrQH6Z__au(Fq_)ZhD_#>W*clk| zZpXDggYOUd&4QlaBP5A0j>o+8_alB&{Cxu#`V4>1;SwME-t z;UcQFxZJ4#@1vLePUolN8m2!A!ybMKE|pq>_ZeLNH1w6#h0vw)zp(dqTqSioE-bnq zZxa5cd@hczorU)Xyt65ySxAHU_&@RbcptM>i7Ttt;4-V5K_s_WANq$>#+0yWLD=)rzxNghIE3v_1EH+at!%HuT`X5})bVkr(V})2! z#__vxr4)UCiuX(8-^0jve-*6!dx9Pfv&y@5_>5x)vu(*MS_SpUE^Uw^{|S?p>l zT)y>vT%y&1OT21vCD=2vM`7-lU-G2#ARPkV55gY#pA-TWBe}u?^3#6 zt>SP|*j4<8{0ROEY#^D2E5+Jy8PyVqkMipT3$94}oPQZj`mKUXunP{sfc`2v?1B#0 zsd=z@OU18Hpr?m*BfWe`P~zID-{K0YE`A%oO>pxXTrl=KTp#vh96b4&pu(kSc62A7 z#wB76{PPMy!(r%UKCWit@t?!b!-ZwVLYk1mJ8ioE&?zd(U;CjN3>Eog9w)&pqs_p1b4*XG4+`)_a&*L@f=I?CUz!9gv8 zS0jAem(LcQ=&n`ZVzD;`H7P|j zk}4@r9&Rq#05fFi2Iv+S*>NQCr9Z;9ZAXu;SMa#tk6W)&6E#))NNk;wkE*y>|5M+Z z;ka>LZ?)2s2ulqZ&TKuTv@_T0UC)l<05PdMktMzD%NwA|xipjx$JxOiMZRL3Vzy$LVzuJCiYF95Rs4_QkBavdUn%x0PAfVT z5v5+4tjtrcQ~q4}y7KR;WL2JOtZJ6(O4VxBTGcUCuR2{_te&D?q`pplyZRyZlj`Ty zuc+Tvf2!W0u2DCt`!ouTO*2WeKy#PoQOz@&mo#r^KG1xvIixwO@oPQW$=U_lHQEQY z>$ShszM?&>J*Vx~&C^}2yIFU?&Zm1$_pVXIMPyx;ha@iXHt;|XJnalo|NwAS>5>8GZb zOn)+cXx5qUG*_8lH2=~3zIn6xfW>G@v5d4-Sms);vfO0(uH^~KPc8pr`J?51%U72D zmeZCFOT?4@YooQ#ro>6qnYI$!6x(IC@7V6Q`E1YG zUbb89>GmS~B>MvUwf0->57?{izrgN_zu5m_-)=u@Z?N||1c%j;?kI9ha?E#JijCZ#6*AnC_R|DE)|Zk5~N&T^NzE8UCT*Sqg@ zf8YI-`&aJYyWeqt=HBT(=5BKLCo7Zf$=^-ho?PQ`d-6T)o^XmTB{?NOWn9XvR9ouo z)MrxvJN5O{f28hAJ(k*(8t|&T4sRCru1xhV^e*?V@jmEX@BM{$t2dCQPAg2Cl(r!4 zuC&L}o=N-fwAa)Ap0)|crcX^@m|m6sZ2HUTe@_1-gU_&Jq-ETn;mi10#>*LRW_+Bn zHREu`xs2{iF4K~km06lOHFII+^32;aAIf|(^H-U#X1<%bF>_bu@vI41bF;3>x+R;> zz9##Y?2mGEIpcF?=Pb*)Dd)R6Pvo4<@sHp}m`9|IC>k+o#D)=va-F%?<=&qAQ0|kt z&*yHyKjnRx_jTUEyfb-S`Re?U z`Q!8F4iwcDClzNGmlRJb zzP$Ll;@gVvFMh4~uO;(Kt}6La$!jH_m7Ff+ODC89p!DN1XW5NqcbDxeA74JV{HpTD z%Rd>NHG1{vcSiS)DIIg!n4gdNY)s3T{;}S%OUC|S?2pFQkM)ncecY$x_Kd3?*FApp z_-W%8jlXXEFULnJk}L8m##Vf%;=d8k6_s-fr zt8+G)ZNaJMxYKO*&9fhw{fF6~%|13eFlXMJYv!z(^ZcC8=IZCB%pEm%^4#yw{rf!o zytVUwJnyx6@6X#d@A$m-c?0ux^WF1v=Z~2`WB%>)pPT>T{JQy(1?~l77c5wC%Yv!} zKUwg?f>$qdUiR2!O$)sXpI`XOqVz=%FM58lesSUAA1r=mgS2z6WhEHzTdqeFF9XEtmRjhh&m2cIHtKM04 z>PGX8D{s8x#vkAK=8bJP4%|4f5iL{|k2aXjBH;@Tt-nIa*VS!W#|Hvk>qMFxG&)OU zFzQbnGwV(qJ!I=4jlT6thl8}VtgJTh9g8cXnsL*|tJ29N=$|}E1_riNi?-=lG#wwR z;;E${R`F>t^TXk^Zjt7_G#VYlpyM-DLJzh0WR>8hHlO_0xL(Ysbi|g0qB6F!Dj^&f zr(TTjkdV;mK}gar7?O*{-M@p@n-Io?P+Tyr{vCd~7|%A*pY99gn?!pww&|!R@(m@@ z*rvG=ouO)03KGINB(J8xF3zDdV$2&Ic|7RT@w_2N+kdv}Y=2U3purXN>9V?9Cy3on z+8-f?-121)t$1kJf)#hKUNFB(-?PKnlt+#qC!r6A=hFxY(vq=?%$G|BU8`^nd^*Zt z7zp~$9Y21&zN@R_?2#i!&U6O4_p0?~v)P{H-n%!+VbbgMNg1BKrZ8&y6>O-)Ugf;W0Ro{o-=sG93D2z`vXxDQ)sl>=s?KlC@d_@G^hjZ?d>L$$w2%y z`{Bie65kF#AzYc@A(i;65iUBqJhC^W)ZtM_dpjHI>gtk{lMTV1<|DiD>_5{JHbDd0 z_3fnImlur&+Rmlh@m+^6D0NzzDJ8F{s3ZdZfppp(xhLVTr_nSo(Z|h>V9ZIyL<#G_2oq(f&QpMrBo;sTug{WoTQ<)wzf%~ zaaNU)ot>Q&ITwxg3`8Ocq3VX85ULC?kwP`3{9{6IICU^rNjBa8w9O%I(m74s(L<6A z2BV_46;H3A-D|R?<>5)UoA;7FU$t@|Vrm@VeR^brx-&=J4lhmpM*^ zUuVOwnFd2B^iBTV>-X;^qkL6@!x0FqlYMR;>hnOr;i%4pUk7@6Y*{7ccuLasxebe5Cz0LkAA-}^} z<5NXSrj49dl3yj%c)Rj_!|SgB;-_voNPePQ0g+}Oqz#Gno2n9QUYt4@hD0|9+tLBl zNVIlG2PHqTSCDA)VqE`qS}-Aum&TI@;+taiKOKgs=$GhVDqbuM%aEIvp}glSG>){i zw0imk1$#~bo{S{7*E=yI!|y+Jy5VF)UteDc)7-w~Xf)K_cKY<0Q)l+?*|XaA zPNy@Po9ok=vFspbbQx8#Xtmo;`UVCD#?hz1sSWzk1_g8un=R%ujv6(+sIYhx>bMc9 zq{NpT3~Idj1qDS}>DG*l43Al@4A#>I@yHRMZbvALhtsM_FtIlHUKPBAxOan#RL9d9 zdLxE|lwt`{8k+Y8_6Dl>+;)dg8OfS9VcMuF{)nf|H>@WSCIQOHg{n>Bv;v$~&^9m} z;%OVGiu84zL(}7MICP<&mKp?q&*5|auo`zy`Ta+aMhNF44ZabvSfuN8fm@9N8i}g4 zTC*z$&0s-RO8vRxXa*0}97#&*>hkf?aICt}tfmbiTEdi(qsNXNi%Y=zwJD`D=i-@O z>@|jZdwcEn(ozIQgD{SWMlrgGX;d_Zp`g&#<_evKkJ?Om$3q_4820WD2JLnqU*8o? zsD--WIfO82Fs=skhF_$)25CdeH`>bKHZM-4e03T0TY|ZXE*Q>bD#1|RusBcj(ao@V zGvd4`5a__|V&5j-M>+=voZlwyOV#SKvTqmvBioe9wr`&XiM94#Z=H83EnV<09|1s@*I+CtExzwSaQnb{QiGawMZGITD@x*Ipljv83;_COvd`2 z8lI|$$h(yDSaOTZc`%=~z$R!O*po`xAgx)XB@fbu_~@#ti`cvv*Vcd1-o<$Sr)g5m zTrk!W{gQ>8lZBKrbDY*hzdH8r-Fxg@1N!)?`i&dE*s}kGPjR&NOnrT|S)~g1bm19; z`*TO-p}VV!78K-qjhs&rip8RG9Wo>xuB{Tk73_n3WBSFF0{4v6C4Tp&T9<$CUUI^> zj=b+9CLfpIvfdbpOq*uB^7_g^+O%n89!R5oq~FIi=dVx5nQ-9*%_C(nHzbdU^+`LW zvHB!uo?M?$-yvrzFzbWw4#VF5#wt?d6C%?JimT8L4y$t-$tKFZn5-PiT^#vn7r#=y zq0@(BfXhy?g8G_U`TPhYM9gdPZ-LPr2_1AE~KXZ&oTzCZ%%j+{((ibIZ$7 zZmNW~em>w+8ijs7UyfVpidQ(E zsxp$3NeX@ID#=IHWVes(Uq8&hepp2OxnM|29lC;*o?EFm7@CuknwnJjcJ2m;*ge&i zWc_-5BvRboo|Dr(ZXC&^jGwQrj6Eu)`(WwshHK!PNtVcb2Wdg@1I+^alAA+vCfF)B-m*Nb9Rl&%w1}xa2G>W{!U^kjvBCWpn)T`q^< zVxe0M|KrYCGNPxSwSdAvPe=VpJdIsFoDE|H9vk1&aF~9CA8sH`zU*i;(%qP3pi`F$ zLsFwZ9No9?SWB3VtWmglPE~RVa)H!&j zwQ9f?GuTqwq)lOe=H=%+-ovpqtaB}98a=R%e?!IPa3!XEeoX>`HfMYl-1aPI=+ zbl+?+t2ZG+6AH zRQ5(5IWlwRC6&JnUtVXABKA*}!2szH>&Xl`R2NH8nggZLc^bt&5|(q|ldR641v(oI zYUvScp+M(npKaW@Y177ypMKgD47M~K+lA*yJ^9?{Qz~Qa=_YQSBQMYIce~L9)YRnQ z8Ch1>aHgg@Q;mC9=%X@@7%^i;TH1^mIXS3})HzdT;F*{~vVA_U$(vqZ*N&hcKJ0Qe zH|OV*{Crx+^`~@M^YX>9-y!2^92dst5vS(R!SQ%9Q6+nw7++QTs_jvQIoXMCHge|7 znGV5{l!d`II-WLb)@7Irsw^&^Hf`G6@tOFPOD&x}4UHhI4D=q}hdP#^$7ECu)b8HD ze}6(b6u=#|Trq4&`DPqqiLMj%(3ZL<(1#0~LkbNKFS*j-Ba3k_;eG3zsF|Y*OJ<(e zYPFL3`g-1!URG9C?djsR|X!JqQChl zZ845ElXhQ;MiCmIJ-qW9j^@_R-tMMTr!LTXl;s!YxEv1GkW5^F#-*rq>;w!@PIf6e z8}W21TzONZmZZp6f(vvoGE1MK4T?gm(`d~O*EhB*;}Np)2w953P?V!a|J2`7+m>TN zoR*I(9XWDjLBU>(N%4O($mw6=1xQJqFSZaa?!|u-)HE+=!H_L;ks&%9zB|n)Eg*@mhT8gpULSK^c+0>X*ZZ zbT#`ZvDKozLr&}+qBc+jhjks1M_8Xx!HT|56YnGXk`gBu^ zXQ6yUWlc}ErO|F=nk^~T3L3O$mZCvbL?XRy?Y=CRt`jlSsdF_o8O>Vc3Z+8m?+rw< zvdrD*+S<-_o3o@cC-sGt3O3fENK=N-a42{AK1EwNr!<4#O}|7~o0Kq;!ZlLUt%{h3 znpY`HsErZ@*F0!vNU8m96+TFjt{79{4HM4RPElX9d< zQb?iGYPGZkc7}K-hUhQ>($se8(sJd23s=I>}{Kp<2dN z-;|Lq0j0aKq@*M_1(PL+*PiBPpXNY^9Zi9~rDsy%XBr|{=YQoHnw`nDUj~r`3I`W&l5%hr2c*<3?;S-^4H=J>R{?h z-(VM{C33}1YV4-QH~_CFTie{{4xM)Tcau6_6$$$=NJJt&GHJar*dCpl+LJLkzezU& z;}2ED;3G4Am{uj9OFpOLA9US~&f(A;4kqCv8AGd8k?Vh&Hdte`ffimhP^{?M?C(_6 zQ#LDWb1nOYu5^dgvbh-=aGzRmzm{Mw~ zZA627bUMVqJ;{7uK{=gf{RUx&gm66rhH*b`MK8h3uRdGqGuWUntR77O(B*YDqR zva{2WgVwz$+m!0oqa_r2YufzXJ}cIn_r-SaK2X=G3wO4htKGS~dW?Y&;^8#3{Zm;} zb4tgJEfZ8pIk}kZp^s9DPJ|}ar56+mtvxj>D=UMP`_iIO4n0#eh!Iop3_7Q$yCR+b zAUY5+y)qmK`K)R~Bowt+ROo>Xgd?0nmpEq72u~yKvcWH*9cU0~S(io|9LZ>+7BS}H zp*9o7T)rLG!L&;B>5z73X;nfvE>67|-ytEPj?$3O_(=#!qK_`d^N(Y?Fhs)l;-|(wN2e&H9jW`N=CXpE)?a!sZ;$5h-%x2vZ9f;S>Xc* z4s6}i5)8KXVpT}2zc<>`7dv?Hw5r&Vq>Xeoo;$klV94f4PtQU}xX|8RJx!}cc~_c@ zSTe$~an|5KKxKB?t!9hek%o@j$bwufb4fER`Y_p>l9J-GTC=iTPMeCeX=9;~KBP0b zF&UrgDiHW}YPBORub_aW`m(~|h+1#dYk5r&V*qDc&Nb8eKxefY>4K|JSfS#4B}Owi zT4FsM*WA&EcpXN^tHf2sm_qc zqI37}+`4@`$8F!fW!ugzo44ZgXUFzkbu9ykEiT;EaD35ttVUjBsheU9pC=77iKyO&B z4q37>pp(M4n}YbTJsnDlMy*zDtU5m>+m5IX+pgYsKe!n>M3fivbF2xW{J0vMG7qZLkiIR_J-bBe8cN z&&ds;{(EfBLz$$zf3k!4{=`Fqyh;#u?i2(SsqcXX=WjSjqjG;O@{v9kQ|maZ5%Cus zsJ5y#$Oa7^_GDy&q_gI(qX(+9dm<=QF|`UqS6c1#=~^w< zk)YC#N;V~rm^7ulti+mKR!~IqL%PLl;h7UyMc~ZLFURVb(IZKjuObxcZ1!KfxD*R2 zQ9q>Gv|)4|29iBFqbnCpUV76tGn#AaLpB?CZr||^&f#^TvNM^LoJI~kO>yyC^#FNW z8hx61A7>H2o8w~y=cQbFI!(Rp+b^7g2YlwCDX7 z#}tb8c7#lNE}n-|NyT6dG4X35|j=1(;qn4^307W!3rwt(NC~-<-OGIa+Ef za*#C=`ZasW$F$^6A$ME~4g1E(wa76AEu5C-XD!!ybl;&vhiDEy)!Y!kNH7*vp4|yi z6GF?eb0-!P?-4Bi00IG18k-4pC+Bk7kQG{Kt zo^I4b7NPaTi4#rA)P(v@S_6;*E(tLbUpo+|4e33}t15=ryf}3*6%ySX>|3=^BKlTt z$~U2Jm1y%~T>o{Nv;t&E7{3)y_l08hKOKg4aTSa6()@Cbl&|^buwq>fa#^gixxE&> zBvfi$EeGj<@cx|#n>u44L3h_NnysVJ&a;i3owe#5>FDcsBapp{Y-MK@k+IJr5397K#-JhSA=hG%d zF)M3-HKV5rjBm6yXRCWl$x67(mB28cX=Ho#h2XQuk_?1 z1Q}j6hGVfKSIxny?FjaG>JCTn$!5eN#Yn$Y5{HzTMOE++Y9JH1NM%u;&G4wzh%mL9 z>ux+ph*FNSe;h9?oiU zB`2q(rO}0x$;p@<%Y?Plr+p?P9b?q$^cb~2b*d-ogQhe#q012G_}I{8{b^2t{h_c$ zw35$1Lu_wE4QP&HeP<}d>&+^pxmp`rH!U2*s(Y+$R4dW@5u&uAj)X}hFwlzc(W6IC zoWe$hhSokT^>&zoXG!o3zM@-+DLoIL#v?qssIIH-FnZ62Pjz9}#55RgYi#b05bTqV z!i6OC-r!PKPmBu(lbkjkk6qjb9im68BOMKOCy(#nap>gfrjE^<_n$u79<1^RieO{S zuFYr8bSq67PVK_vqJs--41DLA>S@_79sOKZ8+f`#9zCdNRO>CsA3b@-#4!_Q&Aald zg;!wSZ$?Q$3eo_%PteX?1dW9irNyJs(=76iN=eNG$HIb4x7}v5*^@FxmQ9|HQP>%i z%dvQVT1!hucTaauUm&D#C8v44ZZ#dW=MB!ZB&XYKGMn@&lUAidm%?m!q@<>J+-9Rf z8S%Fmjo2jI-;>hQA0jHP-iYGYgBjm^-<*%=PW&RIjnA=d+t#nY{P?piTehI~?C3bRZ`(Gq-M3DS4;zj% z=m&f%TRwW@>9+N*P^i3o?C6rxiOBL;&umGi+cvNtXq{S1Yil9gryl0DPjBaU27 zg)8**Cm$Dy_}tsJZQi_X+m_8=e)Q?rUw;kP+S|`k*S29vnqH69&iL!~iSDM+eJ1oX zu%u-4=y798W%sS@3y@5wE85z^VV^!6ZfpAnpU{4Xw9amNY)ouB*Gah2O3o(se23)! z#Z?GB>SovAKBr+bPm0}&-A8c7%LF-OC|Y zep~mLKkb+1&r;-vQshimb9V^es2DP}AV;HHf7)O;co54M_5J<5{ylrpSExB%=TkK| z_V?A*^;NqHGVD5?L96G{5+X~|@d=cH5}&@dw(hLKfUf`{(C1UNwbdGoMuXIX=EJpo zxMoXmEx{!oE>+tSTuE?&hYN{4i|eYym6tUNr-KjAKK$1A*`J=tvB}fmz1a$T)WUR2n8r|;C&^_YvF2|7~!`8eWBp*^Yiw0Ny#OIC-2Ahp$u7d{;9U`r$t_nw~ z)IP!A>q%OVic>%*VZwy@^CwKeq*0X+<+UoG;PE=`Qn=~p+7hH-z98&FZ*br4-Me;d z-~Kg5EWbiS)Y5oz@3!q2nm~T^cQhQ?w~u`7TgL@M)m%8Vj#sJ$pH`ook&)rh>y&~| zCCUx!(dV8xamwULQ>RwWoIP{?B0SiKnw&mr3TpS6GttSixH3mioQQp_>x^2u10|}Y zOG88bA)mJEB))mib#-HwK_$tD&sCj;H&{8IFPGyYgoCy@E^$C%>&8v^hQ=3lPfrsD zgpd)|sYB$vMkmd(-W7?A9a}Me^q8sG?SgK$!#kpE>{v33wor=m8l5)36kjwo)o`Z@ zXJGE3e#nAxsg{-VkkH=+|B?3fg561$`AEi)JjU!+#xSQa-1g9X0vgLFS+nGPLR-5^ zxa&m+k3GRq=kWsvbh-lv_V3&M^>%c04;)457E;lVmYUTxOZ8x&c~fd?b-LT_uwen1 z)tR1)kssQC{6E^>13a$tJQqB3X3q59F$FUK1{gE~APA5ID+q{1#gxU!vLwrPEIYPi z-^7mN#Cek4WDbUwlP7nd+`GA(o6SwK+0Bjb#^u_HY)h6bOB5+mY$znr%b=IR^xkLR ze+mE=DN6F}8G^vfnRCwH|F68?`}G~}>Fs|U$Au>kP|vf{xJ1G$Ql*{NA8||hl5#sx z$yhvInX9{PFiQP|w83N4Z&%x3_uRwnQ?=wadc!%~mCl8|t23nFGppWs2|C7$dp&nB z+-}|RV4rG$z+dENz#qc_G9|;uyQwKpOp=h*LjkFmB_uJ=l)KSVOKja)S*^v?4ye`1 zc9T_3EF2<%+}hp)klX&AcIpVhD91L}O-5q+lp0Oz@UEH7Lf^7Yn+8-Zt+g%tgyx58 zSkbdBxWPkvX=T?l@1EPUmsTwskG%5XyFP5Yu#zi3$ae7&@4DL?4?ppvovYX`_B?O5 zq&{*}SXlsm+bL;9o&l=3WP>TAic4R36sovVD(h|weza13SZxYr3CDi_JSpuM?S1B|GIN~_mY_j?42Ch5l*ID%N=xaAQM{rNb_%! zb=H~|mOj!PY!PxBogZl)_OedC1hfPHmbvIF$1s?84bM}0-DBE;?m1gf;8CQIGlXkm%%{e$P5~(bn*IoFtkj^GnqIK zk`dP+DB^8MkXAWi3UaE_g3$C>Jf0TF9eBULw%|S)ri(DSgo?sqhNo63Ype#n9d1Hm zzHZVAVbaALTa8{S6BneJ2*N@V(VX1g4EJ7RleHJd2V}D`wjRW8re#lNv*Fd110A*4 z;*<)pjQrBK9E(POd^Lz=vJf+wVjQfXIfT}VL^038(QX5_PUC^2o{g+Xqd6@&T!Z&D zhfkO71l4uCsl3+?U%z&P_*`y{j*sAvRUd?2F1HZboFBP;dt@F0+fdzo&N%qz7;3La zPFwQGk_dJpC(74^@@WKuv9X&|GgA|H@6P&DTX$ht zoPmJH%b+~P;)$aey-f`l;j8TF>1yuk={tP5@A!$Mi2b8ZK&p%chlEAM4dJ+X=Rt|j zi#tKmkmH+sq^*iH^(=|EyZjE)172kq+axFPAyH3a^vOv4Hq55=e8D5&rbkWo*ud!(5 zMBWwBDtilL8Hb*UF2kD{4<(@y?Q3!9vMM<9L}>o-yq*v1HeY9`={jLG>(quim}Z~+ zoTC}?^N}tm;0$er!j_+_v0AOtLM|hoS__0DSqxqo6Ixq9KtU)SUmsUM&IW74!=BwF z%7?bA*+o?BkzzjQdg$zK`}|w3EcZ$2%2J=ybU)lD58t=i?)z@u+z?sn>gsIDTtT3M zsw3c7;c~NS03(W-h<9T{A>oA^W+VtnJ&Sx?N2RtmReOlw4Efop+*_?wE24$((&h|=1qyL>V4<^rFN7~5;VIzj+r^{(qNu|UTDw4ojNWk)p0*x+3=!Kl`rr{iUNLTTe%WvPcF7D3N zt@1hB?zug)9P4MP=6kOE@Uy%3{jg_lKXliRcHM{F^TW>N%FpZEt>fhNzpS840!N7dn9ch4Q%wShMr)h&)tBu@LzE5dxXO`B?OfC+Sn z`qheFTD82%1BfQzD#tnWdh0 zQ$Kvjq7ui2n12ku^za`4S=U2ncY8PSA?F^x>yGVAqE{`YjO$D5rs52EYg`0zeTSGW zsczWLvdmz+vHir+tkOXu+lj@nokc7iHCrh;@pF(o6QH3IW3oz>YU#a{d39+ekmVo{ zQplN^S&zo4&>Bnq9m@-6V1IHWeoZdI&Lfp19X3hdi6h#IlJ3F=?^(KT0ZxQ-Mj8y_wW<{|2X#`LfggIc`H{} zy*!VTGEA|2ZaClE*RhXRH%(18u@A1=mHyom-LYrws*ajHXLoDx@Rhsgrl~i`ShVcQ zn^p97@1C7|cE^hj0WalUoW3_YIx;+b6T0I&@5JLbZWN*D#p7?kP5e;zJJ^Yb9S-(g zk9+w8H~AJHfXk9cpx5h7CW%aulZug)SFBV+_Nl{u!q+Si-hd;ymr#F zEjIT~uiE|oY!<3PFj3$D1E|m&o1nIzIiplIHY$~;PZNeWQf9eKAb<=i7J0W2g_YpA z`AbWczM=>h>md50-_Fq?S5j3pD)$QM2(Gr&=-k-ayZ^MYG7Vh}P>->nyEJHLH0@5? zcPr8IS`7tgW2py8my$ntG*{!r*bAh^hPLi3S8J)Ss}s~YTXk5^_7^+gK*RyxZf;D0ZFAW?)i{Dil@QnBwVekw{?M-?hIBN&@~z z{*{QkL1R*p4zX%v2%l`Kk?WWe+%(VV8aps1_H{Ipkim31xHNCk4H*oU`Ncq5Cd(|` zahfR%5X$7dL#B2Q~c4UgN~+%I;4rcoGooSE4c{s^D18#o2C!AIm;4@T`kts77THU4!HgvjW1H zPAB4tEWCJcys@@9dKV_T@f%m(x%A!*>JlrIO;1nVeCHR}=UDFav`of|@j+{=fAaD> z@85M>1%h;u5sF1(O<&)cGfroFTOUmy={tO|r}q%xF2dE$&gO<%Rb-syc6P3=vSNHN zKE4oB*qYlbqiDC6BBVu{t1Ys-u6`IJ-@^=m`%$xA)Xbo2R81#SDeNp;KmMB^Z{50a zBbACxlf?$&64AlP&+eZW#dIjTuioLfaN*e}PEl^^JK}E+{>p_54o5=|^(|bKW;s%6 z>4*Foi;BISeI3nOD2;NdxK4{R_l!BS}EQ#rj9{G{hon# ztG3u0+Pb>BdQbIrzEAiA6XnE!GH4=*0U;HCC^?MgtQA>-Y11ez+e8of5 z=iJoaJ|x#}yk0mh9~F@hPtK(o4wJ# zuwXPs!rNQnq5^9Lzc4;E=aoLyPq9QC!7tt!X*$n!>lj9*SBa3Fvun2C!cpc{5gkwZm)h`MKEcEfIUf! z4f5$Q-`Jkq*jQfLNV)m7kwiK#0L$UZ{07S?)rMNKj%tzxg{6jjqW^Gv>ldH?*pYf^ zf%+oLp97IuE|p?wX^(+xr(?|-5=6fE}%e;{6F zA>=Z-Og4Mz(mR)a@y1X88OQ5C|L32+b?H*jAIB1%%=m%noSaKYBHDd$$1PhY)RNIXe?4G7`%MREKVg7KA0z`THD}Qu*l@T03lCU z4fy0T3qEOW#XI-O`g)^6AOnICv>>+TMtgnzsZ;$25B5L%GLBC^@z~(NsZ*`ahWdJE zd*`7(?907}4(x9wCbTwZ`_W_l%&Ai+4^p3FPYM8LO{J*pmL`|Nyr*dpl8_^n*KDQ> zC{8jdXuyGeYIfF>)U6Ba8yt>0!MZL@qGo2fv)GDuTaiIqv51^SAJ$d-a0d}UBX5yV z2zwl0Xmh}Of*14JHK_b9J`I5&9f`1l$kGh3!ON?!=rb9y!X!s~A|7aeb6cG-lR0`6 zo2`pK37Hw3b*x|`M&V|~Y()oFqpy%*Qiz@`Re=_4cqL0CLF(Ng7A+ z%p)kZS%a{L>1nMXO2}TaBIUHoRBN$V^cv)vVO^ZIHueLaY%YN7yubhH$By>(_3dwI z@9Xbt0bgvv)Yng7ejJ!GKcE2RS`%w3k+ZC1UEWh`u^Oy2TGTp`c=Ju_y$`DScUUuO ze)2GJt~9mu4jgQhsfBx=l zl)FbXEVtKbl=(Eu3@&f5GSXMC?zR~XcA~45(IUBu(c+S0B7zQRXUq&q>+1HFlC=#C zB$I~^pE-H}!745Fj{V8xz`)`Cc0N`L_5Q;!(184w!{_fQ8Y|p>A`yn#JU5DeO4t2 zRE1W4YJaUb1s_Q^i~kC$+RlD_h*R)(I=T>Nbg0V#T1R_QBZ$-!E;hx3(Cg;LgsQF#^Yh63j*duTnbt;e+= zfrT`mj}lwKR$E)Ev%VIDxQ}Kb-HD@cIx`ui5^`@SybdQlb~h8R7~k~yKm_UHG&i%t z=H@~XEg+Y(0(or{HnLjFMH7!FksLgD`gDJ1Ti3aB=U^OA7>xCYq3{!n&BzEV92se8 zgidBMv4R>21tpZjR3xdFP@9)gn|(KK3`3Njm>`%x{4sLt#{2IPFv7JPH)s3=2jH8& z@#g>gw>bXCo6u81<&ukRC=_n{`g)C=fZBL6<61ELD1Ju4bLY4GaJrzG!XDZP#dGNR$9J%4AH$ zP#?_M*oV6Gp)M9NCj+57vpTV|VzDevPu;mbX0hCX4Q=!e+>S1W;mHM5{-T^9*3^{O zOEeCC#*5hAlE@=7Dvuq@X3Y>#`X#_|*I}sD5yv%yFp+>naZ!%W0mYWp3heEyPj0P@ zs&jaLDT*|go10r$K;zvSz4hMPI4)heeCyVv7ZE%0rN!|pmoGzSEOjW7VH5~emq@07 zb$3WIJv~0PswGWgGhPIxP9SjPNN4AL9ipwiRFQM%)39qamf7I2K=VNuQt(PKSQ*{pwexQj_VWm%i}AGavu>$Itc;oPX)*6OB5prt9gK0Q2L@ zz=`xh8}9Bd--B`(Rs7BO|7i<~XDXGPE@rP@UY2s-eRGMr3})MC-otWwds!}kCJijV zA!ll9Gw0k!I)CV!UnCim;FRvxM}GUl{v$oz?Z=U0z(psoY_go?WtO|V42Bi{;=Pf% zxsiL7zR}oAG7-PZo?g-Y*R{sPJZIa$QccV=Vr}1ZgB(MU=$Mp?~c_rCkx z573nV0j#vp`FB<1z1lMMnN!p-bx~6HAzJevu>+Kc>MS0hS3gX9cAzXoyHauaQ&aab z5>KMpQGz|R#1xdPzfyeMe;+&Xlhx-?t9xjQOL73XIj9!gTP!Nef5gxyB7EG|u}pqs zmC$)JMoNZSvVe31gWcW1;J|At&rVo4v9R`*1b z^VyE)VSA27ciCm|l;DjU!5xMfx!>Q}83=F(wH`x92UWu|>H`PVP-*uv&FskIV`HPE zV^=WAp@k%uJma?@PDxAh_(N;vEBX^B4mZ{{fSnMKCxJp{=sIyCpT}hQz3b9Z}vjJ*h-SGCu_ zju!knTJRvUB|u0JG3o8uxllg1I6m!J#x}X>i^LH%hl3VzRZbG9&}J0oS4M#>SkFTa z>nRqJp|C{ED?qS}gllW-8XD@ngkUPu$boPYV!cx-{z=&RSYoHkW3i*N%N&sREc|tjM zdpD8>H9z*ki!VHX`l$<_eBp%`p6WCmY-?>I!l=`E@L*dDM4*n=gVc+xTS9X(zHA{& z@rvmTt3mmIzb@urK_>>ObO?V`N?MVIDn?cA%I&xdi!L|c(|f{2glM8E>{^zxW%fwh zt_SM@d#aG$x|4=IwSnd3?1y{$TpWw1Vn-pm&QY`pI7RtM?}k4$HTB+mTY=ThMNF!z zZ(jyHdy?hL7Vces^}GK!%blHtDODt!oo#IV;V(z0X51!pxy@W-Y5T$#zVVGGA3uBc ziw6%rbN2MP3!kOF#_|&uE#v+9e`2{tV*)&M38T^HgE@`+&jG37!S!f@jLaST&~EK2 z$k<25R99rdJ?DtUYd`Aa(p!tSLgDb$tM6~W{@-5PeE;gza5yvyo_N?hSqN;UAMz)U zM}96ExNDqdkxX{{cz^RVUp(L1fBd*iCU%06laO>(z6Ii17Whf>Q`y5`#`C^_=XJ%i zG(=k8Hk%8b=AP8m74_7R!DrUl)n_E!P<~Jf? zTB}9ynt=~V!(cQLDi98b%8Mk(@){21>5E-;vO=B)*Lp((IACyqyP*zGa?}H^BoI*I zrk*qB&!7LqOD}%z*^T)EQ+wZBHt_C?}xN zPSdAeeu;29z;!-EU`!OO;gN?UHYUoEJNxmq%JZA?j8;5Dn@Ge`APZ67y$fY}dg9&; zj6CBIB&Vh)CRbx_rnxzm%oo3{&E*O_v0S11#3!uQQ^$@RXfaA5+VP8Zbyl5-b_-Tk zmbdZ6YMbrgBRJH|TJYxecy!)BH34Vv5cLZ;_hlaM<%{xS)?rfi^(vM18V3Oy3{mIZ z+{wDSnM(WZddJDahoz5uTRpG7?I9VFC<`#c zxl{7nGi5vKSw$~M<(411{tlUcJHDpf9i!y$>8sxNft5v|pBq8l%(~Fmz<0JQBqfw=nF~s7@SLn4yyzRvqHMCBGD^%Uu zzzodiGaI*5g$O>XtoFNYUGgOLR$FREj>=@x@jxUGg$t~4OCCSq_5sNf5i z3lImC3E)Y-;46BGL}h84SM$WlbGQX%7%I)6 z0bE`3_LFOG&HB6uOoIJ*Y%vhI4W1Q@o>U?joF;rMLsB%LKp;$Q2RJGn$e>9$k$}p{ z$#Pupwv#2Qr=zu{^}sP0cupNV)Z5$bASAo$+Ro0NUg8d|+(Cd1pU zvAA9t55&iL9J9bmY}t42go3M}gSkDq7E9ep6)6Z~g96r?RtbypFt3PlEagin50lApZrHBE871!3< z%+h?4kX4lT<})bA8I;5EFSN|vyMOaHz&%y#RxJ%_9h4?ZN>g9|9ml`WI{p2>_j}au z?A(RV1Dh3>^FRw#Vl;^){;Mci3mh&SiM(cZHW1z4m^xe@3Rt$Ih%Ir#%D;5-4Ecc#`SiaP9;Z!7?!^Cw}S((6A{f2{vsfB(dZmp}XI7cca8e(QIB&wvULv!S~d*;T~XVJ!hi!U6jCTkJZPSzro@JVTxOdZBS2MzlK4?JiGfCX-A!+-523F2Y7IJ3_LpK0q}E;OMi92V!0A9TUXSn!ylR|@e+ zN2OG%SbT>Mt<*cHMO(H&ylC(lg^LmceB>bAGMNn00wGAk32rW*+y?4oWtHS5#dze= zsYoQfOyUBH8igX6+|KDR{MAW@$wgx*b0%BlCK5$A-RRT~>EL`i*kmMomWlui<))^i z_-II~X>wRQu!ua?S&Is^z_yo8F-(#aRi9l;r8pcTwTU|91epxF36+)Gnx|G`RjlxC z?@W>2aa8w|-QD-$NdDbxNG#1q? zXM39!A=q(!b#Z;&Gr>|5<(X2E#CB||zobG}-n_}#Rj&DMzaC*5z4 z*|B|Y0S5L_ql%T0i1MRF6b((nqf*Kx+XhDra4k%g4y#5}jQ84==ZIC=gc}K5ZyEf{jQu5YAl@VWua@L`o;OmPPlxD3~$xHgSu3kl) zg-bkmsI|dn&17;M`W5BO%%~^9O{F4!-`1*L4;PC|ys^AEKYh1A31s4mRyv6LmGm;1 z%wA8J-aueG4V@p7EpiY+$cp$k)^Ek*l!SFz=EBi}NNxqvw#6(nn-wY&ip2;dyma#J z-HU8(4B9r_)=D$s1%{}R6REBEtI4cChTJI*+@V#YR7yBL2p==P*v3X8PSkC>NJRFQ zmNL@r4^g5&L=9cX7~*0_0Qu^wKT8!gkW;NnHD4&?Yg9J80ag17If*Z+MPeq4&I-r9 zKKx4LC?R{a0+w7|Tp?h|(Hj#HZjBy*8VHTklM#s#2*w_(9hj>!RRwP*<-B}GDvW1?apWw1@z z5eNsCY+|8(g^JjzNDn0}hQqy$y`o}^aDJ1@%u|`!$~+*l#s##bGmpSb!{Q>W;~(sv zFzv+Q4{j-Ekk(h>H-iGFhIw&S8e?VcOcFKx_=#PH&gf(TMy=PMZ!{7Xg?a*d#nx7l=ZjU)>7Wh4WDJhJl5?D@xhPx(sqm2_b`mJX8HbVOQf23G;hLfH?2r-)pvLwV zGZZ9V0X&SDacfiKbA)9RaAA%bT8v3T#n&Jl2a1%8@Es_rAO_xI)O{SYBOauca&A77 zm4H+Wk+mFQCYtBUm2@yp7?FpkBRrMftXFa))5G^x);42Y!k68^jcu;EPl`FoSS%h1 z_yWmvGLh$tK}Te@*qU3L9d&gLHm$heE2(Q@T{HYyEe0_Z)UBx#iCp^9fBqs%EWS2zRTZ4d;BKa zqZjsxIwIP6y*Y`RR29B0Sl@IyjZ8=rG)**C5NMk4d96ao2_RTy3yTVSpioF+UMAx4 z3D`MrT))dzz>>t}TWghQ5|u@J`Nn#|>s^`6*aTd$nt}YSO5d!DVx^3SfAYLpDJoLKN zLBSAL+UJhp+sDu@@YRk@0F<$C@5<{x`Vpq}-P>2+{@Krd_WJ98{mwhc>+Di&ZTRCw zfr_ZSP_${z5ORhw48Q~zt;k7UO4iOOYg=2P{PN|RnmQb_Ox zCezu%5I-A7JDbgw(fVnW;ylXSd2N&=m;e6vzyJExJAgOde)HP3H;3^D@+AG>2R}d= zZ(h6n#v5!GBH^sBQyNvaZqQA{6f&#sZrFh>ikA#XXqAaYamg2A* z(E0YmSiH*TEhquO$4jLOz!FNa1SG)|*T|6|Yjh$ZQko%usZ}-`O?P&7Sm06OCJVV3 z%X2z4h3(3Clj1JYT|~KJL9vkG(XvG!#SL`%+mfK8^8UQy;iPXICvPOfDzc_HrI1n-^T))!@wFF7x6LrxRG^&{oP((*6Yz6+pImGBQ^y) zgvutpP9@iwOtlE^r*m0g#DsYuIxjYOJTqf36fGtA*tV>;5OIJaHWt%W1|Y4+qtPG? z*DhAT)SHiDpWKXw0s)c>hb%b^1GAPyOzqoOshJSvBjb_2jK@>!ZrV$Nc;%HguAD88 zrF|(49aLk6bavBPZ)LnU+RM78gt%5Q8%zI*k-9j(efiaY{Kr@SR@`itg*=m(M(JLcJuQXGs z53#+UMs4eA8x)G#Hk+-fJsQZ-H?EA2-+1f2_uhRgk=xR1h=(SqbV60@c9r2N@8jCuC5wPO6Iu*gv56kdAm~tVW6^V?3|aTZh1=Q_sQW! z-#LF@KdoN-eyN}M&V9T6bPzQ^h?>`Uwlh4kl?izn$Ypa=7$FlAQ?njG$qb#{?X?<( z-fB@Zxq{7H2VNBsBU8)WHAJvTL*7VJ5^&nLwl_n&Y3XQdK!BD(As1l@X5<<~w$M}4 z5t*Ke6>Ef4TBx zk~8Fa)VcN2xUZbWw1EAX_zLrB-}t5KF?@Tt`X}g36|hU;FdA)5O`uCR8o#ZEFlbjI zXQ#=iHyYY35{Acfw+?h$VTe{JR0^RG|KZSBy9WkN9WRG%)WJ*D+uL{i)ByDap=KAV zG?HPDFAy-9%*}oIM2aJk5NAU;cCcN@E6&}~8ZA~Z43^iMosvTUEgwKIR{z|ddgmuU zzVGnvOCVX! z=1UViP32dm1$XY4&6=QYWUgP|yng-t_o-jvjzY%(N7r*s*g$@{6=1ZF#pHmv=|u?D zg~MEy(=Z7spRW9>+_9pkQ^M0PzIgg{-)R_-`IW-CK`;jDC@D?6?fx}>VI#>rc$LA> zU;sZH1$$S+a-nuMsBjDY{tdq$R+kXVzcxR7X=3zt<*FUYqfofFw6gO0Rj>+BFjcG7 z_~jNcOsB59`=vqZGc263AQ8r|%9RzXH3jU&y(K_qa22kA)X`$1+Q_$ezPVGMh(ZyG zcq5?x<)7)%anCl=ZXrAXaD?Ol3F2${%_hd!@?d?kS#CC4%9+SNLpPq~q9w7xz*!4i z2)U}o$e5a|QQ}p5oQvQ9T_Ay~-0ffc`PVRpzlgcEKMH#U`T5|elLsPB*4eY%Z*l)K zUf;_7UhY5Q^?T0yLr`jKcS2Bh!cUMpn1r9~S14>Y^7FxAD3A3u)d*nUivmsG-AE*J z58LjcV6D7A6eXYE2}RinLxBMn8&!FA`&HENS5d-^jcaPI!~TFiDiK+ zt8pS!sJpw(C?eJZeA?9r+4wZuelwp9E>1Vw6bxYNSn&ABgSF%Pt@?eD2P;|N6sn`~ zi`D-6sQttw!W1Xs&%w#m`BA$kXtf5(k9+?E-2)7)L|W5SLKit~H8OBMt4rM@w6q&l zjlFf~rp_D!qzhc+IL6#8(7Bve7=SVwQrK4VMriMf=qm8Z@C$lsYdz%0T}IvX+o4a{ zIW(#seC1R+rVSNa`E=hEJl#g&;q6NVFzSH!slh4{xt9tSTP zawj$#Aioe`NkJ>7%e%{ttqhb7{QL5V=Scq`cHHONTwC9hOB^yY$tAwL3g-f*TTif1 z2;7%We1BJ?0o3DGD>PaeNh#jhwyzT@#UHWBn+EIIX=0Zk<~)l`Pg}pOof(JLJmY4iylv&O5c}UeE6y;Ka)3ei!F{7c+w?k0q8P z7PI>>B?N_dXan_yA6J@*d8ZI;mdTWV9#{iH?4i<_5{UwV+FBS2G!W`B<^`}jRHM&m zlrs@(>xw<8g{`8tg0ui;JsZs#hp>mIT<)$dXX5`HqEm!yib- z5^#=Z4kPt?pP}{pY4)yhb;QI9GvuFDH2K)O@bYZKL0vhlx zZtC|>4$sfCa-f}{PKZT|OVI1VlEci;UwQAn%aszV&{rxF-CL3a(Z&MNw$wY88cQ(+ zC)E_tvVvT9zW!w2$u=g7QEEcwU1E{>9b89pz3z|4Lm~2$%a)_K^NBDL^ezB$CC+XHRulWm#xM8ckOh>Lx_6Jr?@b z(n1ec5sYfc^A3Yr2Kg`a*;N$TFL%ymOBuo9cQYBNf%JN~P+se6P+MY?8InMDve|q- zo9*X6hxzB5?4NM8+uK?<*LmLgLOKd;w+{p)z%pKwz`VXAzGCvXSiw{MV> zXfHUTvKiuelF1Mw=AFZqvAQZpI2ZY$W?7egZL+SehPZQ(QPOPQ*9(h-QxXIP{(hlw zzsBp;fPF=SM%J4fJI_831U@VgPU!7t&YpetS&in*8S+EDggZ4g%VZK_TSzXCqn6WX z%$d2n;LDFQym&z-t!f4bP(tFj2Owu`Os=kla)PlL=ZX;Ihd{p}4Avnrti8)C)4||o znuf-Wn3JV9u57y%1U_QsCtwnUW%ZB~8Z_ieu7Tu-91=sT(QMp6D#=8e6$tdwyv|{g zlv|}2&m`<0W->x~*#JTeeL&DCirLs&X&c4D7-wC=T3H63FRWs$&}2r)l@(m*e~f_V z0$-&!HNv5QH89H2x8dnW;7FE$iNPiGYy#Ej^=*1sVLmd0j+=?(|F}F)&*8bH2stSh zA~m(O#gltLak;gW&uncaIe`!&Lk)(lE&kjbLLLpea2OQBVHmG$(TXb(BShcmDm!n<-&Yhqp!{9I|2cRBZ@>Ob*!Q9si&TO_NgcP`p%u} zduw#`op(k@-g@h&KYeQm!8z{!;vekMNMO4I$9Q%a8t*GE>I?nUe{=Q2yBzuWEL*X%oX?s2e*P+e$a z99{4|fuOksJ?(7P5Px2CGf8Fv{|p>yU3Gc`LOqoVDFYh)=KV;zh*@dtY-RyZmWvw}iQj@3)Fw~bzoy?O$ z1LMA@z_2#B4Ya(rqYI^>4%XEj!~~br*z69J(v4I$9bJb|x`R!maB`cidB0tOf{Bcs z%`iE*4cuaU!-GwRn%>%+CMP(tRTKq*|D|<{WNv#7WoSi;MZP4F7~W#wUtl(e6A2^= z3(kT+bn4#tN`jx-oVq(hK15iR3uy?^^-%CbX-ZDK&#a`SMJm;*;g$wd?hs$Br7Y2? z#od|&NuChxS~{$Hna%d>v$mt>o_+rL=bt^dAD{L<^NB(7A$1nm%&FPAxw#=h+PAvA zfWHXOC@;RXxv_x&iLD`IhoHvO>GAShA#pq(L&+P-3UdD{vUeQ`g~(b$){wfjNhc)d z-E~A~-Caov1*a2SDve|jxql(qyOf+MEhl6dscUNXc;xckrDS?}cQKK{d)U`k8NEFy zCs{{K(J1nAr+jPV_k(%sCAMs~+(!7lo5UWe*uvr0Uezec?*|jwOZGoDxPLz!eXrlV z`TB#|?d$N=I*OxIkbSJQDL}|0hk_U7MFpvA+rsgi3nL37v%J(q0sA6_xSsjKM2b}` zZ!B+2B@c@3O4_XT)_OIMQ7CI`S?c2~w^pfO%KP1Ywv0zwTC4FKvit$T9ld^i-DX2< zE|+y-3{pl6PzrDpSyHKh1R#}0qY98S;3VJ@8^z)V%vY86+p#4+Y-@z5DWz)c6n^%w zYUJ{{@saV{e4TH}r?XJIsBebDKxL@oXH)zlzmjR@zIwzx_h?UsqK(I%rNzq?YX?vp z<(xOuQBHJvD~U!+ZUHYMp|?^3--1t&+M-o%nTfG8HNEFwKKJs|y`XoHtfe&j2Al(( zn$%h~I;7+w+spqUS(CsbALhr6{H9G2#aDj1_p#o`ev>cdsu(4&^85!p7g>MSzr`ER zu8An*Z$}1qUcnz(tbCWCS2{4(bVeN#WM~m1EuQ!I{hRpNAUlV~B0}VLHakB4-h1QY z+3ebyNMv#A@>~QN%hYPUNvE<}MSQC@pM+6IGqni2iQiu!_>ls{$;jg3RAt@R(ZP#F zLlM;V#1hbwFmxBP2cU!JLb)6)Ff}Z{|K;b;f9-SUAGiws4kjF)4wtTKj}`VS6K-J% zRNG`KUG?z?4}a>(BZAIOL3yrY48Se)-n5$@@=i ztSrq}&%oBzjnx)@%q{=g&D-z2`R1Fyc|dF0KkXf^uXp8 zm#4J2dulB@xdaIS)C__Qc>=XjtI??%nw;P#*n5I6(;2E~(0tu6^ade32G-y>hxeXj zdz2&dbkq;THn1_nw=UnCT}5G#5`AOC7hGSsbF0!*oSNuwM4E|X&4?W;|Vl1I;~EH5XuIs zo;8rKBHn7+8z$Kn$w325y|G+*a>aI9iI&{rOwMpENejgt;D74t+^petxfgcEZ7TBi z&m+^s#Y{D^+@_|ECX8Fgjn^CS* zYD{{i&4y5l^6qAz?f zu7MUarD92Ta3at(Yr)`N7?NisJ z(e-t(sJSRH$ex;^5?qvU<~jTKpKLy{e?KDjT$GaK&CEcatURac)fH!b#p0!9?$~u~ zCoT?HK&V$=5$iiFmKXb_r@svG&Bd9T2GFx2<#yq@U3jj6b3ea$adUQj7#T?r&C7)q zw?Z&3kmLi26lliX29l$qv$d`UDNBzZXBe@uz5#LN2-d(b=kt}&AJkH}Af73bWvx2q zU3i)cPdnlBA`ywEi$LE06tnOxXw)Rw&jhRrUI5=EN|Z8-xcrG=;|B3;XIkaIk7yrsoSfSzqF%`hhHYi&8#L#9N}xla+=mzU0+J3WZw ziF0S4!twYy7yR9>6OhQ3mpAguN!VQDo`QEdolfTXQ^4V^cxU*zBodT}Z9Ef3k&&*G z@yzBLYjait!@V@uTw7x<&2kQn_M1oh(d=vgvA_5U>v#ZTN){Ra`QPIB#rWtjj9(+S z$LFz>&d$yJe(`Yenc~+fuV?Yj1lU#iRf~5Aiu=)K>UMGsj3)c(F)o&Np z@$LtO|Go11G2UG%yj!?jd0oQ$vBF5@HR|dw{9ml=6OO@u?mr1(Ka6=y>bj_EYd4TY+YKen$I2}y>j5}i=+ zJt9w@Ja@LAdWHGM7jb;!6Vxlz|4IFi%ImN2?iK1Hi1Es=KgPRnQ-4}{y#jstRaEZZ z*_%8wI-A+s*|pWqZmIM&iO4K5&Pn`?f8pxF`sUgy+&3(OtXO)1YP#qW7a4_KB*=

fzGz{N0Jk>DlR5fBDus?~lCm)7Rd9_v)qBfAR+SeQ?Zf1h+jK0o~T}{NmzUH)dAW zJR?^xzXm+lYwu8h!=7wts8L(H8&yo9NJ%x^jqxQev;(`X-ejnO7^1P)f=Y^P&^(^Q z48NW@?wJc%j`g*+G`H_R&?z^Cwg`PiHj}JvXbAb!nHoZo+S;JWg`@71^ycJzq##mi zYwR8UXHNC?9z+;!JFvV0O3F`1UO%Aip81_9_sCEt<@+shFWKHgIS|BnKcqi z%Da&eF-mid(IBc3@;G^Tt&sH2YBkqjvjzUyu&@7gqX4<1vfDHMA_0MABcV7>NR15! z3BgRn7w06B14j=u)>&jZ?@AC!qoUEIpn34rp;jB9v*<>lL|8AgrN^fh2%b;W(A3;m z>4m>QFZ>01;iO7HVWEtvI0drcF+4s8NYr9{L2Ey7{0Leo6Uc+2l#|aQpEeX?mDX_} zKaI6;DjA~f$i^o$(q2sNDTIKWELj?Tewn=ygam}ygC~?299HSi-kS8nn&9(HUViUA z0+i!Z*&+=j?C|UXHN#0Q--#kzUslVUk`v`3Gl{^#W`$PODkbsY|WD*yv_n)A?bs}DfA~v@@y`cl@RTfr{VsC`A`nK zI##YiH0VR9o<^>PY|W<`r1@fUzyYUX;YbW{S^)c^j8Y~?k<)bye^m=y~6yy(or8oGi@@v!D|quVPJ!z1WoY|?Kxv z#r2iNso8s@V|SMrk=AIIW~Xjk0!8S%*AW+ul>pwK==v1Ujmsbwl(wEecdE6?Y_Ndy z6Wz)w(qf~z2@T#@qvb_5)@EnMC)YPO@bKb|TVvzv!X!{{-R-T7Cih8=QX*jNwpz1Z zBbA8h2&llhe6b8>bb^l28tl!jDzNyP2xUd*@qV!a$Y_g+2ypc(IiionVyOn$6{Avt zu?=?~PbibCN${XSsnOTiq!PIZas07dhO2<#Nh9Skd~QCMWdOrXC#`0S$<|z7qgJYE zhr_582s6n*1W^sw6Y~JXt+SoWxZj$W?`Yd-RX3g{7w!Js}#e8 zqG^uWU^b{Z=_oe7#)f@uTGPTp6LFTbww*ac)z_ghP=92MEkE~xhmsQ25t$YFWZ`dy zmoA&3Q1KeQd@W%xNYkiloI}@vUkBS>F%LsD4ZC@sK~M;yjtd}qkx7%lftNKbV(G!W zmCH(~TGIYxQKeDZJUq2Vtqqs&d;)hqff;OFiejnca-vJamwx%nUtStsn#EEyv$%mF zw?VzbnoplT490PUgK^}w4b6v71B6}QMg%tec3a!(wHRF5`nI0OkYV?+p0;k{6mDz6 zWNM;5$(pZS8}qFB5IoAu`qmc4u1!rXt`S|;yS8JuAt(zGO2YWU*G3=^ko+dJ+r^`s zbW{^tW*^4`ZP8T_L`!(j01{4iN$p1dZWW#kVZQn337hY)CIa z3n%7*rzoS8vQ~qOv-oI>mUKKh&B zsWyX~DwfZS^J?2_>v(q-nZ-L5OUr3oL%bO-8_h>T033p1BCxp;h!;psG%A~jKo`$3 z60sW@lJoiEkRYGJiti7nS$Q;>;V>d0w@AU55{kO(KmVDhPr~-z=sYm^i7$NZx4!f# zyXNGnGv}UwEcWy>7oL6Yc_Jjkd|TuR1l~AT43n@(EX`{T;!F@08?QuXHXAEEM+TJ4 zKyd&*B?GH`h*cT97NU3sgo3p?DnQk(30N_m#mm}&msJ>{y&Q()r6ZLZeggM-0X1wB zi`R8JWFwoKTUo_clU-d|Bx=aw3RFKFiNMO_Z8*Vi-kt>ETA9QAn?qcoJdzsHrz3J9 zfXDcCHZ*|s`!gr-L&fZglIKVj! zin)F;0`(Wa;<90Z38+OFx?*)8QEY3oP<{=y3TF1#w zm*c9)=S=DILG~gEqr6`$uh@08i}r07-9R;PrS%Ij7d=bOmaJ=g{qM$2PJ-cV88}LR z=^Vkr5&sca+#C(LUC;tAa<``SCO229(J0GSh@I~!w4Qk7JL}#?!`|;yZAXG!>c(n) zT|wj)z)@!=KW+gnY_<)rD12@~x~VBmek#&{2~S4^0L4pXGXz@;f8(Z`sh8*^fC11N zQ=^+FQYx%gmWwseZ&acWB4n5k2M{(2dAUwR4ky<=M!iP;ocb@2=KhlN+rR6EodQ=I^J_A<;N zlL>j>v2W}3I&9-Qy`ERSTh)*1(rW+!*H8f{MgfWlMj1#|3?p#!dVB3A?T|uivj2aT zU0qY#MigC3vSkZnOSWp+G8hclfrNxfI_adDwl95Y-rN6!yY#P+zVrJd9RJY<|*>F(Wo&)$!-cXPS4J_cwyrl)gM^H81E z;XDUl>w;qr^)4Q$y~7*@2ZO3*!K|fgDm#p5td2v`#>e|_&T=k{v0B?dI&-lv#mPxs ziH+iNRTPt=WMQ9bCWz|l^<&dCen*rJp8HRb2~-;<)q;S|BXFVcWw?0+!6MfIAqb3x zR0ftbj19x6SO9P^vti`lkIMZyFKVE47C4Is)~|!orKf=`F3)Z&S6xZKks%ZYr&JuB zX$F*G>x8Q59svuBau8Nwzh`!l$fZfI%D`=-$@oG{k1)I%TvA)S00RY)2*D&Ipvscq z_*wOH4VACktyBBe21Wdd<(`Q~#W%ZWPNbEZqoO;F1TB93^=5c=22U4HB(o~1?bcw2 z+9YIKlq*ijUq|GrVi8^Z`c#p|_jX%B;zTkT$LYez3n)TF)s%~0c6&U+oQ=LT*m)mi zLC6I!E%ot4d=lC?8Gx6D-Rt+BH-jmt4?IMm#7&6qA|DO3T78dsQJUD#{9NEf4%p?M zG?5u00vns~bctNvXA)q$Ab?}8c4Sg%A)dQaDDeFJho4cYYBfc%Qc0yWi%O5a|KX># zHQP3xJ@Vziw1#Esw1Y-iQBbbI7>WrR{Y>)^`e9UQ?Dp;XIXMXksv(k|g#U?%a(3qC zZK{a^awHC6Eek=%!a0Y>o*w^TgvMCC`hEpbns?hfpr>Me0QDVXWBu~1LL@bX+JIbq z#5`p_yzSWaqqZy1a4t7p$fx73U5a)CQZx>Q7DXiesdnS$wH$WKh;tT6%%bUUer|5I zID7pj4R3Gn?APtnW0cf*=*0lTJ3iRD{;b0?9B9JT|9WvPq~;j-C$GU}Km`2Ipi4fvMUXRe@Z--|#5arhrV`TgdfM}%Auk$lHV#hFx{LUGN0i; zOD%kyoVknQC|u2f_T`%8KSdPp2QM>-9&>B4H#>_wJQWer3kO_gk%zDHQO!`+F}d5} zK%>cxKlqBv1APz6b<=+O7#BMDa`jGbEZ~fIQLg9jVUTa}9(TYo>A%O&Ec4puAbcd; z$b&BzQJ6Ng%Lw`>%*k(&YF=Hl0D{VJr&s+_4?E+i^==BCFH%crLBTnB8&O06?zi zbdYR`MiV+smSMb&Etv0jb*t;4r69Os7bXAC(#>N0S+*~f#8!5QT4q?{{qj>kaj*WitB68geRk9J{BSt z+TH;whtNZQ^TmtjzdU)&J`W!*FE4+$^78d1M3I+V*2oT4dVEZ)!<;=>=!V`kpUzKB zPv>zc%I6pEAQpaWZaRA<@)#h>Zx%_7;?JPNXMo5ge?|BAe_W+V#`IQ|ovh(00I0CC z;qc5D#Vy&r)n()qzEm%dP&s?~^6C+y0%8S9v{`v|9!B%#oBy+ z9cY>!0H66G%dzh5t*!#bukSXH>+5S@B!k9bBoTuMtHyB9kr@{7pPTCc6jC93uBAN- Nb3r;?CY?_y`5RHLb^`za literal 0 HcmV?d00001 diff --git a/src/renderer/style/spinner.css b/src/renderer/style/spinner.css new file mode 100644 index 0000000..593f664 --- /dev/null +++ b/src/renderer/style/spinner.css @@ -0,0 +1,80 @@ +.lds-spinner { + color: official; + position: relative; + width: 80px; + height: 80px; + transform: scale(0.5); + margin: auto; +} +.lds-spinner div { + transform-origin: 40px 40px; + animation: lds-spinner 1.2s linear infinite; +} +.lds-spinner div:after { + content: " "; + display: block; + position: absolute; + top: 3px; + left: 37px; + width: 6px; + height: 18px; + border-radius: 20%; + background: #000; +} +.lds-spinner div:nth-child(1) { + transform: rotate(0deg); + animation-delay: -1.1s; +} +.lds-spinner div:nth-child(2) { + transform: rotate(30deg); + animation-delay: -1s; +} +.lds-spinner div:nth-child(3) { + transform: rotate(60deg); + animation-delay: -0.9s; +} +.lds-spinner div:nth-child(4) { + transform: rotate(90deg); + animation-delay: -0.8s; +} +.lds-spinner div:nth-child(5) { + transform: rotate(120deg); + animation-delay: -0.7s; +} +.lds-spinner div:nth-child(6) { + transform: rotate(150deg); + animation-delay: -0.6s; +} +.lds-spinner div:nth-child(7) { + transform: rotate(180deg); + animation-delay: -0.5s; +} +.lds-spinner div:nth-child(8) { + transform: rotate(210deg); + animation-delay: -0.4s; +} +.lds-spinner div:nth-child(9) { + transform: rotate(240deg); + animation-delay: -0.3s; +} +.lds-spinner div:nth-child(10) { + transform: rotate(270deg); + animation-delay: -0.2s; +} +.lds-spinner div:nth-child(11) { + transform: rotate(300deg); + animation-delay: -0.1s; +} +.lds-spinner div:nth-child(12) { + transform: rotate(330deg); + animation-delay: 0s; +} +@keyframes lds-spinner { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + diff --git a/src/renderer/worker.js b/src/renderer/worker.js index c0c590c..1a9e1e7 100644 --- a/src/renderer/worker.js +++ b/src/renderer/worker.js @@ -1,5 +1,6 @@ const { inputBuffer, INPUT_BUFFER_SIZE } = require("./input"); const { videoModeBuffer, VIDEO_MODE_BUFFER_SIZE } = require("./video"); +const { setCanvasBlank } = require("./screen"); const { screenBuffer, SCREEN_BUFFER_SIZE, @@ -12,6 +13,43 @@ const { audioBlockChunkSize, AUDIO_DATA_BUFFER_SIZE, } = require("./audio"); +const { quit } = require("./ipc"); + +let isWorkerRunning = false; +let isWorkerSaving = false; +let worker; + +function getIsWorkerRunning() { + return isWorkerRunning; +} + +function getIsWorkerSaving() { + return isWorkerSaving; +} + +function saveDisk() { + isWorkerSaving = true; + document.querySelector("#disk_saving").classList.remove("hidden"); + worker.postMessage("disk_save"); +} + +function handleDiskSaved() { + isWorkerSaving = false; + + // We're just gonna quit + quit(); +} + +async function handleWorkerShutdown() { + console.log(`Handling worker shutdown`); + + document.body.classList.remove("emulator_running"); + + // Then, update the canvas + await setCanvasBlank(); + + saveDisk(); +} function registerWorker() { var workerConfig = { @@ -29,7 +67,12 @@ function registerWorker() { SCREEN_HEIGHT: SCREEN_HEIGHT, }; - var worker = window.emulatorWorker = new Worker("../basilisk/BasiliskII-worker-boot.js"); + worker = window.emulatorWorker = new Worker( + "../basilisk/BasiliskII-worker-boot.js" + ); + + // We'll need this info + isWorkerRunning = true; worker.postMessage(workerConfig); worker.onmessage = function (e) { @@ -51,23 +94,26 @@ function registerWorker() { // } } - if (e.data.type === 'TTY') { + if (e.data.type === "TTY") { // If we're shutting down, Basilisk II will send // close_audio to TTY - our signal that we can // save the disk image - if (e.data.message === 'close_audio') { - worker.postMessage('save'); + if (e.data.data === "close_audio") { + handleWorkerShutdown(); } } + + if (e.data.type === "disk_saved") { + handleDiskSaved(); + } }; } -function saveDisk() { - - - worker.postMessage('save'); -} +window.setCanvasBlank = setCanvasBlank; module.exports = { registerWorker, + getIsWorkerRunning, + getIsWorkerSaving, + setCanvasBlank, };