From fef4218a07d43106af1f9479dfb92d2181576d5f Mon Sep 17 00:00:00 2001 From: Ajay Ghanwat Date: Tue, 14 Jul 2026 12:25:26 +0530 Subject: [PATCH] Updated the editor --- editors/vscode/package.json | 2 +- editors/vscode/src/extension.js | 20 +- editors/vscode/src/formatter.js | 359 ++++++++++++++++++++---------- editors/vscode/wrnexus-0.2.2.vsix | Bin 33403 -> 33546 bytes editors/vscode/wrnexus-0.2.3.vsix | Bin 0 -> 33547 bytes 5 files changed, 252 insertions(+), 129 deletions(-) create mode 100644 editors/vscode/wrnexus-0.2.3.vsix diff --git a/editors/vscode/package.json b/editors/vscode/package.json index 29c4e6fb..93db8744 100644 --- a/editors/vscode/package.json +++ b/editors/vscode/package.json @@ -2,7 +2,7 @@ "name": "wrnexus", "displayName": "WRNexus Language Support", "description": "Syntax highlighting, formatting, diagnostics, snippets and completions for WrNexus .wrn files.", - "version": "0.2.2", + "version": "0.2.3", "publisher": "wrnexus", "private": true, "license": "SEE LICENSE IN LICENSE", diff --git a/editors/vscode/src/extension.js b/editors/vscode/src/extension.js index a85b0af3..bf3b6d43 100644 --- a/editors/vscode/src/extension.js +++ b/editors/vscode/src/extension.js @@ -2,7 +2,7 @@ "use strict"; const vscode = require("vscode"); -const { formatWrn } = require("./formatter.js"); +const { formatWrn } = require("./formatter"); // The .wrn compiler, bundled to CJS by `bun run build:compiler`. Loaded // defensively so the rest of the extension (highlighting, snippets, completion) @@ -115,13 +115,17 @@ function activate(context) { context.subscriptions.push( vscode.languages.registerDocumentFormattingEditProvider("wrn", { provideDocumentFormattingEdits(document, options) { - if (!vscode.workspace.getConfiguration("wrnexus").get("format.enable", true)) return []; - const formatted = formatWrn(document.getText(), options); - if (formatted === document.getText()) return []; - const end = document.positionAt(document.getText().length); - return [ - vscode.TextEdit.replace(new vscode.Range(new vscode.Position(0, 0), end), formatted), - ]; + const source = document.getText(); + + const formatted = formatWrn(source, { + tabSize: options.tabSize, + insertSpaces: options.insertSpaces, + printWidth: 100, + }); + + const range = new vscode.Range(document.positionAt(0), document.positionAt(source.length)); + + return [vscode.TextEdit.replace(range, formatted)]; }, }), vscode.languages.registerCompletionItemProvider( diff --git a/editors/vscode/src/formatter.js b/editors/vscode/src/formatter.js index d5398dab..d5e9a92d 100644 --- a/editors/vscode/src/formatter.js +++ b/editors/vscode/src/formatter.js @@ -17,152 +17,271 @@ const VOID_ELEMENTS = new Set([ "wbr", ]); -/** Count structural curly braces while ignoring quoted strings and line comments. */ -function curlyDelta(line, state) { - let delta = 0; +function findOpeningTagEnd(value) { let quote = null; - let escaped = false; - for (let index = 0; index < line.length; index++) { - const char = line[index]; - const next = line[index + 1]; + for (let index = 0; index < value.length; index += 1) { + const char = value[index]; - if (state.blockComment) { - if (char === "*" && next === "/") { - state.blockComment = false; - index++; + if (quote !== null) { + if (char === quote && value[index - 1] !== "\\") { + quote = null; } + continue; } - if (state.template) { - if (!escaped && char === "`") state.template = false; - escaped = !escaped && char === "\\"; - if (char !== "\\") escaped = false; - continue; - } - if (quote) { - if (!escaped && char === quote) quote = null; - escaped = !escaped && char === "\\"; - if (char !== "\\") escaped = false; - continue; - } - if (char === "/" && next === "*") { - state.blockComment = true; - index++; - } else if (char === "/" && next === "/") { - break; - } else if (char === "`") { - state.template = true; - } else if (char === '"' || char === "'") { + + if (char === '"' || char === "'") { quote = char; - } else if (char === "{") { - delta++; - } else if (char === "}") { - delta--; + continue; + } + + if (char === ">") { + return index; } } - return delta; + + return -1; } -/** Return the net nesting introduced by HTML-like tags on this line. */ -function htmlDelta(line) { - let delta = 0; - const tags = line.matchAll(/<\s*(\/?)\s*([A-Za-z][\w:-]*)\b[^>]*>/g); - for (const match of tags) { - const full = match[0]; - const closing = match[1] === "/"; - const name = match[2].toLowerCase(); - if (closing) delta--; - else if (!VOID_ELEMENTS.has(name) && !/\/\s*>$/.test(full)) delta++; - } - return delta; -} +function parseAttributes(value) { + const attributes = []; + const pattern = + /[^\s"'=<>`]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s"'=<>`]+))?/g; -function leadingClosers(line) { - let count = /^\s*}/.test(line) ? 1 : 0; - const tags = line.match(/^\s*((?:<\/\s*[A-Za-z][\w:-]*\s*>\s*)+)/); - if (tags) count += [...tags[1].matchAll(/<\//g)].length; - return count; -} + let match; -function formatOpeningTag(source, unit, baseDepth) { - if ( - !source.startsWith("<") || - source.startsWith("$/.exec(source); + return attributes; +} + +function parseOpeningTag(value) { + const endIndex = findOpeningTagEnd(value); + + if (endIndex === -1) { + return null; + } + + const openingPart = value.slice(0, endIndex + 1); + const remainder = value.slice(endIndex + 1).trim(); + + const match = /^<([A-Za-z][\w:-]*)([\s\S]*?)(\/?)>$/.exec(openingPart); if (!match) { - return source; + return null; } - const tag = match[1]; - const rawAttributes = match[2].trim(); + const tagName = match[1]; + const attributes = parseAttributes(match[2].trim()); const selfClosing = match[3] === "/"; + const inlineClosing = remainder === ``; - if (!rawAttributes) { - return source; - } - - const attributes = []; - const pattern = /(?:[^\s"'=<>`]+)(?:\s*=\s*(?:"[^"]*"|'[^']*'))?/g; - - for (const attribute of rawAttributes.matchAll(pattern)) { - attributes.push(attribute[0]); - } - - if (attributes.length < 2) { - return source; - } - - const base = unit.repeat(baseDepth); - const child = unit.repeat(baseDepth + 1); - - return [ - `${base}<${tag}`, - ...attributes.map((attribute) => `${child}${attribute}`), - `${base}${selfClosing ? "/>" : ">"}`, - ].join("\n"); + return { + tagName, + attributes, + selfClosing, + inlineClosing, + remainder, + }; } -/** - * Format WRN source conservatively: normalize structural indentation and - * trailing whitespace without rewriting expressions, HTML, CSS, or JS. - */ -function formatWrn(text, options = {}) { - const tabSize = Math.max(1, Number(options.tabSize) || 2); - const unit = options.insertSpaces === false ? "\t" : " ".repeat(tabSize); - const hadFinalNewline = /\r?\n$/.test(text); - const lines = text.replace(/\r\n/g, "\n").split("\n"); - if (hadFinalNewline) lines.pop(); +function formatOpeningTag(value, unit, depth, printWidth = 100) { + const parsed = parseOpeningTag(value); - let depth = 0; - const state = { blockComment: false, template: false }; - const formatted = lines.map((original) => { - const line = original.trimEnd(); - if (!line.trim()) return ""; + if (!parsed) { + return { + lines: [`${unit.repeat(depth)}${value.trim()}`], + opensElement: false, + }; + } - // Preserve multiline template-string content because its whitespace can be data. - const wasTemplate = state.template; - const trimmed = line.trimStart(); - const indent = Math.max(0, depth - leadingClosers(trimmed)); - const formattedLine = formatOpeningTag(trimmed, unit, indent); + const baseIndent = unit.repeat(depth); + const attributeIndent = unit.repeat(depth + 1); + const normalizedSingleLine = value.replace(/\s+/g, " ").trim(); - const output = wasTemplate - ? line - : formattedLine.startsWith(unit.repeat(indent)) - ? formattedLine - : unit.repeat(indent) + formattedLine; - depth = Math.max(0, depth + curlyDelta(trimmed, state) + htmlDelta(trimmed)); - return output; - }); + const shouldBreak = + parsed.attributes.length > 1 || + normalizedSingleLine.length > printWidth || + value.includes("\n"); - return formatted.join("\n") + (hadFinalNewline ? "\n" : ""); + const opensElement = + !parsed.selfClosing && + !parsed.inlineClosing && + !VOID_ELEMENTS.has(parsed.tagName.toLowerCase()); + + if (!shouldBreak) { + return { + lines: [`${baseIndent}${normalizedSingleLine}`], + opensElement, + }; + } + + const lines = [ + `${baseIndent}<${parsed.tagName}`, + ...parsed.attributes.map( + (attribute) => `${attributeIndent}${attribute}`, + ), + ]; + + if (parsed.inlineClosing) { + lines.push(`${baseIndent}>`); + } else if (parsed.selfClosing) { + lines.push(`${baseIndent}/>`); + } else { + lines.push(`${baseIndent}>`); + + if (parsed.remainder) { + lines.push(`${baseIndent}${parsed.remainder}`); + } + } + + return { + lines, + opensElement, + }; } -module.exports = { formatWrn }; +function isMultilineOpeningTagStart(value) { + if (!value.startsWith("<")) { + return false; + } + + if ( + value.startsWith("/.test(value); +} + +function isInlineElement(value) { + return /^<([A-Za-z][\w:-]*)\b[^>]*>[\s\S]*<\/\1\s*>$/.test(value); +} + +function isWrnBlockClosing(value) { + return value === "}" || value.startsWith("} "); +} + +function isWrnBlockOpening(value) { + if (!value.endsWith("{")) { + return false; + } + + return !value.startsWith("{"); +} + +function formatWrn(source, options = {}) { + const unit = + options.insertSpaces === false + ? "\t" + : " ".repeat(options.tabSize || 4); + + const printWidth = options.printWidth || 100; + const inputLines = source.replace(/\r\n/g, "\n").split("\n"); + const output = []; + + let wrnDepth = 0; + let htmlDepth = 0; + let index = 0; + let previousWasBlank = false; + + while (index < inputLines.length) { + const originalLine = inputLines[index]; + const trimmed = originalLine.trim(); + + if (trimmed === "") { + if (!previousWasBlank && output.length > 0) { + output.push(""); + } + + previousWasBlank = true; + index += 1; + continue; + } + + previousWasBlank = false; + + let value = trimmed; + + if (isMultilineOpeningTagStart(value)) { + const collected = [value]; + let cursor = index + 1; + + while (cursor < inputLines.length) { + const nextPart = inputLines[cursor].trim(); + collected.push(nextPart); + + const joined = collected.join(" "); + + if (findOpeningTagEnd(joined) !== -1) { + break; + } + + cursor += 1; + } + + value = collected.join(" "); + index = cursor; + } + + if (isWrnBlockClosing(value)) { + wrnDepth = Math.max(0, wrnDepth - 1); + } + + if (isClosingTag(value)) { + htmlDepth = Math.max(0, htmlDepth - 1); + } + + const depth = wrnDepth + htmlDepth; + + if ( + value.startsWith("<") && + !value.startsWith(" 0 && output[output.length - 1] === "") { + output.pop(); + } + + return `${output.join("\n")}\n`; +} + +module.exports = { + formatOpeningTag, + formatWrn, +}; \ No newline at end of file diff --git a/editors/vscode/wrnexus-0.2.2.vsix b/editors/vscode/wrnexus-0.2.2.vsix index 46acb41302635c915db3eb4151c5d4cbef7a95c0..ab3494182b15887c109194cd3bdbb3701677388e 100644 GIT binary patch delta 5245 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 B9Yg>C delta 5080 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 diff --git a/editors/vscode/wrnexus-0.2.3.vsix b/editors/vscode/wrnexus-0.2.3.vsix new file mode 100644 index 0000000000000000000000000000000000000000..608866ad2a54b20a049a160189635c75da2a9847 GIT binary patch literal 33547 zcmagFb8u%}*DV^`NyqNkw$)L`wr$%^$96il`HOAaw(aER`OdxX_dVymjexySq{c6TZ5uSmT8S5o}*rjxICm}Ufq(BSrHQJ2Js2SEGVjb@RptNVs-R3sM zg=X0_+w;$I1L2wxCKyJ|ZEdYd(fcQD!kxu(LV8mCSYrib8pcEtUK0l=W= z>8;Cqrp$@vK;s{rDeD;nyK5H)dgdnNRl`g}5V0=g_67+G>>NQp)K5cQ2G!;nNbgN=A_hm(+k(&@fyQty?$EmHJAOdkA5ZqfUeS24Yg?)Q7i`nQ0XmAYrA8&AOpy-~d z-w-4r5T+!9RktgsW+nDcB*r#sL97pxwG0$jnK|0rLv^K8T`{6I&)#Eq0WY|zYVHsp zyvx;pos5=W7M}EMC2tVsXOWZz2n+}UZl5FCC>vr(SjJuZzZR(BKGfkdojVJk|K3es z;JWa`crXX=N|b55tVD+$h4_}^PgbOJBfcuUq`AO)y%}{Nx^Kqqfjgw#PlF6I z_Vr!r<0=W$2L43kLGXOG-zm5iO_2yC10^}`E9xHI8Q8wJ@S<`XDP5OdVow?0N&Y*6 ztAG?s!62Z3y_LF_|sQXJ9#!wx!t6#GDP089(8f<;P$tT7} zh4kI?@5VaOo>_t0YGjTA&6!k@8%e0WQ$-_Wp4>^!*ufV=2g(?94b$J>?IaJmPQZE7 zTL$alHVn$CfzB_My;jT*E16LqI?Oia=Za8)kK&o#BFc|Z)?P*PwpWH!nhyoH17D(F z1akk%Xg@*jt@ZCrMgjo>LjAsK3ftOz=d_cqlDnO;qc)wJwUu{Vk4+yToWRuwOg}Ht zntpl_39r*z;D?`RW+FNcn9bm)k3omBM0M&@w$am&kWOW49W2jrO4A(7O326!({aZ5 zL>pgp=;s@|fl4sXkzkJKZYbkQb{t_d5i!QCqc~XnS}ZzhkB+|J-Kw+gAOyORc>&k` zvhOY&JN;=n)NRMws?_4C)0diNU-+!zGrmFZzu}EuQCUt-RzZo*+DJ6E)}o&QNyO88KtRLrX$eB10BQ%$ z-qWEyZeT=Xv)kndRihfpvp_Lz&k4I8z`2>_{5Tm7=v%6fdG+o6j|lU*xj z(Q_+nZ_=CW7EtX|%!SNW6;O>|&4cVC!Qx;eAe-Ml_7w&j-i)Wn&Z;5ffvD{z+0t0P zk26nCioBS13rzKk=mob75sX(>5E&npb``)cCj|+WIFBYZ`Te()z(7F%4vvqz^;iuE zARuY@{}mknfqQxfV|^oQVSnfAW9mVIRk|^+Mgl>x6i3J!2p_2=dh_Z4}Gs$(bfawxL zW;t$l`>!x+41oZ9N$hI{>jQ}5ZJt%MjY3OJbIX=wh;TcYGJ85=w1KDQAT|rryH5eWH?|vSc`E4ItRxC{N%&1&<5(7 zNo@blWDFkv7GAZ90GT8o#lkRw@0?{emoqJxfc^yY34BvIRhi`d`4DVV@Oma#GIc0x<{+5${!4f+d#uC)r!H zApzB&L-W==TtqCi|Z1e4sCAvP=u*r{yb= z33!rNyl{Fp5jqJ$f;O67o5-u^)s#@2fyhdFv)i25TSV zaiZye_-j`GL>O>A5TXtbAG^GR(&1QWG@~5oka2|bPUHp~6VCq<=#*kgDo(2hN##;s zM;HgTwrogrA5*u(6YTb$K1V5d5-V>XRT@fFVh(L;SoJIj8aqNeqfpGZdD-@oWm7Kw13zvL53w~025S?XJc|;J-VDMiJLJRK z`nbIwUD*{vw+s|0WX4l`U3U>obf0@#;B+^i_jPw|+Tq4tgGkH{M)km5<>ZfRc3V=S z)&hM+@G$Tn$POeL@>jH0@&|x}@>j0rgor20=0Z$X5v=sWV(27WP%+?h0fvZQ>6ormXeRe_rl3$XT%Wf5}RfAq8!rq;7_d(bKGOJ@fU z!q$6Q=qRK=z}Z!`6LHYA=C@shAx+~HG9Z6tr3GNC$Dcisbc_eD+okcPT*0pYwa-2f z4?}GXqGLi-$*P23%+0*&sZ5v)FcBi-^+>D9ejSU}^=2Aq-smJ7- zSw5i8HpWi-aJ@xytoZygZ0VA8&D*$1tCL%R8t*;aiBQBKU)m$ak{7D$4i4MGraS3m zjxABTy_bisoGzb6ub0y!g3+cW1wa8~S7UR`bpJGMdu`E8Yq+;h0s@>;QD-N)$$uedoG}B zCGUB2Nu?Kp&Z<(j!PJKY`7&}-s-lQtiF#&p9l!_0oQv->JE7V>7*cwh^rFvCqSP3j znsTwaZ6$gH)onM=cLTJ1+&t}B+XxA&W^K38cuMSbH7ld?IxKqQ{B<<_SFIu_U)YF( zVnNtDFjm60afKp!#GB`cA6+z*qXYnpCgu%dR7wx(83*K*wGlF(j$+J*8kpPiqQH%F zCgn*7fDi+r;YH9i#HbCyXMOLa8W*6pgr!pik3|7GGQi#HEVfF|=NH-=r)YMYzCyst zdr#smaO81o^6Jpl%E|lr{W}dOh$d948gu=+;6>E75bNc32QXBgAghqzVf=9oCFLh? zezoq*To%wI61H^^`4@StFAIRN;w;EwFtHhWn1;+sLl-7kZ}8wP_SnW$Xc(i~5IUog z&ACXQ7LFvEN50SD{Rc$V5NH}*&IBC+(EzczG|uBQNOVJBVxj0@%FkN7m&3qS{mayA zcUfvnH*j{S(G3pl8?-<9Z3;r=kv}NLt>&m+tWK@4NF6Gt!(RN{jrNZ>`(=0I_|cu) zN0IZlj1(B!hIX0_YlkWF*@qrdq=(IB;&4645tl58(tB!@PR)|8Q#?)YS5J9|Ya_hI z9-f!MD2E1&3vN$*U}wbZv-Y>3ny+8R#_?=^m)P1@9RNa=o+|O-AUyho}~l* zVA{~0e%}4f5Y`s}blDO#|cWj6HpV_XfAFlPUYWHKU#*k78jo}Gznh>-MVzN6!|1ExuM zCn!!6Ol&yB;U{xdMzyxK`$(rZyoXGV7U2PXT6wl_3mFMO)#V)$JVvs)rVqI`kNvg4 z<0=Y}@BvexuoGr&(sNlVbrPvD^xvRO2T^9Vy=pom+#^VXzeVPIZ z!jsmEWn%;vSrN$_VcoQv%@aVojeQ1suGa45&G&V1a&ZhfU=I~l9TF_p`!!g4lHj-sI1GUgkV&5`GYK0%hOZMF7*J=)yCX|j1>Wt`L2Ws{3 z6Z}JPvLk=RdT4|{al{JU`Jpx&z+Mu&1J6m2Se?%Lw;`|L6iXLyQz$9o!+~BFf)kOP zNXj$^)F}^uP)Pne*}1cHDUNs?agH+-w@kSe^`s-KU=hEImnq(4pfJBfsp-ZFg;AbnrTJ; z1^SP$kJYqzgaHQvB0&ECg#AB-j=kgYztHr@zX}~`31LwgMNv8@Hz#d*UfVSWq>UG9 zd?r%ASad8dCqt4|VyXlP(V+(lDW`rRGWd9#bYERLm-r&oo;J@XKAQnn>@^$=c%nl7 z4v04%vh_z-x98Vu_%*`u97mBWZ5S6{89ouAMKWCLKa1SUVKZR$z60Oi!zAo4%mDG} z=X2g$PZ`U@^%Ri+J;VL%eOgg}iG}Ck>p}YI$FdrBjCfKA3z3C0J#g%~M#`*r{qbU^ zb*ga4y*whaUNo~^)In@>X%gS#gj$Qx`n1>^`8%JV91K;l#(Pt~8{or*sNSdPS@+A+ zc=(z#SUi4+Gu>cOeft>FbGSOqI&1Q6WU#hdZ;up5k??RA*EG)C>jrp68ujF3Bt2~9 zEEM2QCdGdsFvpsgN=={7@8e?dlQT20-kycof<4HDwZA|!1p{znn3X={(>yiEA{2G z*lXrXZcb00MtY2~16n<-jVs z0&=GYd!{mY3q{87fdP~l9C#vD?9SbEo880E4aEH?d@c+ zQm&d}p?j-&Nv}u#Vx4hrUO;R>Wbm%Rh>G;FryVd+Pj>3GndK@=TEuizRpIEX+~|YM zjd7*?Sdl^5z)#`66T?0_C4hK6LV8%2Ysi1 zEXscbLRNyjY%c@S(AEB`e2e1DR#2A>l^|ms=<6p z;n$<9YsaQT zan)(Cybhk)6C#D*9dC~ zT5pKGBqbR{SCmpYT*($w!_2xt83-Php{}_*Ytg5+36jg|fQvH!+rZsLaQ_i1>GTW9 z(P~R-jeJg3Sca; zUJ<_-f59ITrH8wClAL2w#2s?HN5r*%%_5e;nYLe;*^J0pj`dkNbTa4@u4~QcrS{HN zxqPb1aA0Cgt5c)}W|n#4N1`TMD_FM*n-liJ6ymkyNP7;QJyF6I20Y#yUXulGNS|Xg z_iWH0@!nHi!Tz&^?bjF^cHiDY`?qoYZ+`*Yy5O++`w8jylYfgkL$mKSG`6xe{k9mC z;|0HQ2rl^Q^9Ps%1;et~+MZ2c2s$qf1(#k&dK_k2q%<^264{qeEFSrVavpxy(>>d@ zqlo=}pk?|5#O2%2XRSHcvp%glgCGqxq#$D8P3ql~E$BXqq4+90Ub{47@K5#B2-Qa# zun2@lqTeN>yQkBrIm5kgYv?rj39(7PA=ar$8T2F0DFwsPlWsBOJ<&6l1z<#>iODic z_y8ak!-zj#Smpag(49zf6XJ~!Ku}?>C@o>zf(+EPVA)cc;wV&XX>--wHuyj@2$MRf zSb%&vG48K_MIHckG2)5m{}TRS%@v80vp<4%3GT4o3Cq3^WzXZx&0t^rQG3pF6gL1Y zwWuVGmqGgl0E*MDFK3gG%GC9-cS;cyD&99I{%so8Q_s28+tT%slY1MtZJyjtmqwbx zsvS$W7q=*G`Xu}nXXMBGcEDeyygh)DBdy*GO$0gSN>uhniQ^{S4vRiWvTsBGx)6GF z980s~8IN|fCAKAe8(zAw^=4&>_Z`9i(C>ft|COy||H@WJcN-^tH)BV7R|gw9Cu`~d zH+lanT`x4O|IzcG+248|*upe!y$YuW9J47Gei2w0H5VU(MiNE?u&PD!E$Ah**S7jW6{yxo0``l*Q$P2mmgNPd^X0rZZW$om(la0DTvJhhhe zwYM|K_ORXMarFR+ivCrZh3#RP3cV7Z*Vy)?Oo$4LdV&H6Vs0R2n9E=B2=T^9iCo~i zn!d8X*WBVWVU4if(XGY6bAtTAXg!OBmhmvhTK&sZMRLr6b*D92*+mFrrP3ig`91V~ zv@-x&4o7!n{{o5v;UojaY!OFP87Ul9CSwrAK}SWDxF)mp8m6?}3&T_oDboA|AY6au z*o<9UmyI+b*X>SxcePvfbRGu)B5*0_4wx5#7i6bMolq?NeGX|v(C3n#GQt3tE(sHO znU?Df2{-3iZr7 z^8Le(^{tTqUYH~{2zJdn^{fOXP6ED@YtAnVERcTugel+z7hAb9j)^S8DF$u7ek)_~agh)!*FizVErY-z>Sg z+jIH6`Mg}7Pu1V7+m(*JjdK262Ok@=(JU7>`NS#BAr85#h$W>ZWhnr5paWL zLU%pz#G0UyAASvh^tcv;*)zAQ^PlGzL7qx#`>j?~?9ak3dl#F^`p2kqFNS!1tQ-=Z z2E69H}{nQn)C>_`?OR^Z0O%pOCJiV)W9Cn4%QZxGCR zgsmQtCrrZ|$xQL=4-B$23}i*kv;4XcUcYz|VK!&N1INyG7UIqjak{Yi*G3#I?K&qPE*lF~yoomk2=_{UufJ?#Gw=(^?s9muziXZi-t z|3+1_{|!|c{?DjtZew9=_+J|6f5X?PxSseq2Dp$bcbKT1X*x^DmbkIrteswetR}oc z=Z5eUjmhCr6R9~@)6AxVwG~kEwfIlj*(-10+)c72gPJmsg$SooDygPG^Y(_1BH3ZO zc*1ad#>AdFHv`$IJ$;5~xxzC^b<6z>qLv{VB8dp0k4fA+^ULaqhZB{+pWfi?*E+KS z9aud1gXARgb}hk6b&W^schEm@7g1wsBS)n6v&!^zfq+V2r#T^V1AZ)-% z9T4b_#`TX)ikQcl<~z%nR&sjUgWyh~%4)ydtmc(3n8<6^df2PBVgkg)nPhZ%_(br* zbBv{}aR(csn8ar3&)wK%c&iMhpVy1auN_)7tWBOiUHjZWciVUVa-jJF|FgVhzFeLD z-zo_5Kl}MRVW^^;} zKyqNyn6Q5XUaSGI2_^GSW;TqpS@AOH)8j70_V9Vq$=7MQ{nnezm?MK~BPa$L`_YaU zz1YJb`|G3Tsje??Z^w^=*Rv;0B;bJT9@^bc3m`v8%79I^3VcFg57C7!mZ^D=3xa7e zTGv;&t7Z?ui1>2jkdXw93*;pQSn(YlT6LXSrSfgGqVz}gGO2(Uy=%4j#Jx0^bqF%RXQPqQehLYy80hn8Y@f zsP2Hf-V@(H4F%HAK@kv$CKBOB8jeDV1@sQ(Rd`LJKm}jSrI;ySP|3yX9P9_3N*X^C zX*k6cu!uLW!#W+wLXMk&QW`jltw7CvH`#qgUDDOT{0k6AD|7UvS86y}=Gn^WCk<9s2Ovn$j&)-+3>x#CNY?fC%srGD%uDyuZ}=Ey z23E2$T#&qGakhqHMTW7OEL<%067wVTm-%iqEpY6Wqfc7MWZMM^sOt zPc=hNk7Poj*OBxBQM^^qWtb_G_{+eGH78JAPgrmUKO%Jw{a2t?o4$=Q)|Jc^#^-6@ zK0U`vTE*_sm;@8dyYl$%nvv6w=bL*fHH6~PmuUCLcyfi=H`hJ8w;z|_gUVJW2$|R% zmiY>CU$an!28I-#?}-O+3D&faOClYAN=;7~Mi>N>XYJL|{2vUsc+Aeq4m>V%MK&aI zqBI2*x1!-K^8Z>@WaT}CPnAKp3}s#t+5WVFlMHylw36#_HI$Q+e#YChL#|yJ2!<6u zsfxPMgaok3MAZDCNZ<*YI7g{i>0IY3t8XwsQ z8ee~~A)`#?UbGg)js#>`8=hCrEd%fX6n3o_;+r=?OST5Lp%-x4EFd4(gZ46)nkCz8 zxD8x=#8{)PW0Dbr)Y%Y7BC3ll#bqhwK195ZA??m~aZveBml&(Dmqpb1EYlUvM;@ROub@s-Cq z^JkO_X|ef@f>BcP#8_jQFpx1^YhKoKC$-yZ;%zq8S+{va1AvPFe4^wLx`bYySy|Gz zxx-Fc-p6XFJ?WLr;od2CWF_FyCJE(*ZWs^^IMouuD_P?NT?wc zU9@^s3OZ<%%=en@AUfl`ANG`z$&|h!S$(0J@2JrHABV}YVmW$YIKkphh&F~wiSJ@Z z+RpIB2D7Qd@sy`Z!x3CSP?NYk-xOd+N*T4?E@WmT<_{T zVzP(tXoM+KI<+L?`_;%<3Q3JQlXj*ZN7mO>eyJ+rLRTw`O~Wn)#-r+x5|!qgx;L1Q z?uBrc&@vc&jWEVx)ZiM7J^3A>zYQT?yYAq3hPl^oW*@t>kv1vDR){=xv=LwU{3^Qr6k}chOwq;! zN-uFXIpEEC+OzLE&0=3NsqJkhO7bTlAOnAC##2mc~_o zHmt0jt78HS=S;ew9~hbdDY zbU(URpuSo*+wzTgN)EsNiyaTnAGjC4dl25geain9KTrQxcKlDT!Z$lksINJEHz{}@ zsWudAP0C@zA6Q*P8gZ$RaNfKY#bdU)kdlI#rjrmOrGhgQV5Td-A-@H`k!r&0*~Fi> zXuZ{V?EsnKvb=_f88Y}`ES?)Xj@x+1nM;HjU{uTG&fr=j^>3NVmS@%nq zkvBvb?@fdSODF|VT*d;U{dzw9xH;R>$@%=)d%H`3#q2dk+-9O$hRX+A=jYkv;dL8A zZwa1AYOjlVs@_kAh!H5CCFa;Y>;GNgO&LCmBDnF40+wtO35}-l!?X3Upb&y=8>UHx z)Zgc*OAiX!AN@e&+6u=zMZn1)gc%kNWJJll#?gig4tuO(E&a{zk8xRIvh@4S;ai~h z&=P0e_$}!RygXJvuH*KsM~0I^1yZ=JaAs>vP0z#}Xb%|$)$%cXW8Ov5I!gIaqtSc8 zk7mc3GZ04yU=#NwsuNUXY{2Ez#iV@~%*^cM#LMzo1!yC}m>jt}`&0ytrVijnPwKd%mZh<+mJXWnlUFzrqK!3Q&z%hC z*99PkmHVC7R-ZRfqxU(25#RA4FCGH}iKJ~$img@J>dxllawmF@&6;_dM@g%7c3WsH zJQi`7veEo4(By1+W%Fr&8S~%E{c=a2q^_`rCL4EQNNC@hkY@ow>$pF}@px^2vT`>G5;!&&OWS!XlFHpL+8DRMvkU*V zhxl+5-e+i&0P}+7GA1%?Z)f7ap(thgiP-qb1(&rtv*F{J*bZ)DXj6hCP06c|dmW=$ z8|Y+Ohgy@;V>~kanVmSwMS|J5T6DX06dj?z_TibY?BXcNVewyW?Xt>~DsYT<_=~Bi zqrNi36yBv+RyKDib}i)C;BarKEC;bn?=%2$mfa< zDVDl_F~l}-uCTq&kE|5SUdpK`nlbTy-NadXNkAv9sTK|{9^z`ml5id%ncZNmB5$s8 z*a<*<2B?%w6e6D;JS5W;_}iZlVZAoyXcZP^@9IAqm`dpfKE*4(aw^$Esj!wOlxU5v zTs05OC6@|nLbKd3L_4k35hYA8(ra(p4+*_L!&e3BNlqx1(^VWgs7R2b4&R5-%O$Zr z9v(ON2A)NfPfJw+Zs?4iCFaIQ=H3AwV!+1yJDOvn2{A)IEXEwJ9qX1$K zsmXI~KKO9fXTLRzpnLA)!^F%pNA|bMkI59mW5?67gE;ij7NwKn!M6`E{L`m3N$}CM ztf#feX92hr;PfETT^UyN0AtLyg9I^+kF&us@BTB5J@21pe@>DHL@VF@cC86n*plF# zj#2~PK8iF52v^I2^Drikie7l2a*~p4&sg?psr~%3EF0tP1{-=5D^G+f{CYxRIf`y& z_t;Czcjh4pBvk$HeT_UaxdlpXF!xL-!*yO8Q`?Pl=NdtQTcrAWVmMF<-~db(e$-)o-sgw| z;g+Dc&4E$yLV_+wNA;){Q8f94D$ATRFK6v<0nEI+-EHiF(3Cb2uxrWJd6p|B6y0M(O&cTyOw9qHq1M*yR%1qw_7jV8xPiV0lte+gR}m z)VC}d%o9wJ0Oy#rWFfCZxk~ZT-ZHlE<~lY4c-j<#5^;7g8y$%<&=2t+xv44=xN;PG zqRxCwo6CWW??<{{kHH#Lpi`}x@~xfYR;7%x+fVU9{)@rQv$-y=C`*7IXKX(mxqIhE za)>G=@myD%iJm*q4B71N?SX@tP5$Lg0?#Gx7|2plLqqzZSNtDVBf9l-;MBXADOpxr z=Nr3umTTIcVfJY}Jh$m%JiMebXFM6*LeY%3DaGiQ!PO6;C7eF(JqIqByqhtD8!wz1 zgQC}wRTOyo@wHa=h_vTP z6N-=?{e*UP`L)wJL0>c$SiqU8v!ztss_3C_o zIrproQOGvSZ8CWai)PTlX@hkZe8{O-8R=>YgpH4n>mD>S!0D3|a(qf2y1n^ezX4R{ z2fohJm7+Pxiqk}|r)YMM?Z0++*_qgno= z-2vKI?%Z-@0*d;(S!g)veX=(QnvA(Z=EyH4X_X?YSN0yvPa&zE^PrX4!_sru=xI5k zY)bv;adV$?5ZW2`Z-vH_RLY=@u+G~w+^Q&hS{emu>N>*k5Bw)HW%G5SKO2hthRW44O6%u_k% z54=6M9sE4+^eYQ5Z`JUEUuQNlR}J<>CE`*=*?Y9-y}J%yT9b;T7br z$uc0!_tn$@FXyOi9ruItWBQog2>yNbr($>e;g+o$FOwut^`we!!>n{WH?KjZ)J1sd8~+nHN^TY-iaju+mR zu4`g-+pZrGY;;Q?KO-c09G@;pA25e**4=D&-71ah+VY5n^b~ucz%YU44b3v^yG(qS zKjV2Hj>&=I9hlmV&RbvgP(MnlE~~yrSyg8YjJ-2!!X2V$CmQ)~=vmiD3-;tb&j?Au zNS+7w)rMg$j{3)Stl;UJ8IhFYx{-kWxYgo|ShBt9k74R~<0Oo-O=~5G&eD3CTdL~p zWCt?`=&l#4$a0dY{sm>Up*k8O>h=U#@7hh&yx4`ZVG-wyL=4y46Nh$HM`q;Rqlk#AiyfdZf{zyA9r~QOv;8&=ehrs(>JtRQx^Ukqz7+&NRO6 zSS+#dvteFjheXs|QoIza))W*_$~AzPT6*%<)OgK)qeiG=yjlC7U0wqvFJ~7Uu-Cj`BIItC;IE!QPb#^ zQS!SsIzyK|c2c2@)bNm`Nxj1KQu+x0w^zj0mns&Lnk9fgOpq}8ntu8FqJkKcInk9l zP5DS!1U5VuPrIG(onU5XtC}t*B#EXR3844mYg*%Vtk2h(D%EEg!K%?>WUV zbE~2vLRsrT6bf`e3W=jPmLlT}Xp8D9{vbxwAxGpdRoKG-wq&?QrrrSKAH6 zMyZMH?#`hcvzB1tOl7M zb$7&`t%D&?^ZTuKu0245AJw83b^f}wg)U#nWG(kG=X*z4?(1H8WbJ*Ny%c4KNEj0L#$&qrL5jzp^X+~iY$Df@ZgklL}(#wHxD3FDF zwobj9qv;*w%a*^OK{BO4{-Y!bPD#P|N8~Y68$Psjt2I#)cbpE!pknvpUTMT2&Inl!&EIM| zjtD)qA5q@5KW8m@0~QTs9ek9QICO|b$AA$aIVY>-_T(fbUxb{z(rl}m7 z96lB=`_m)GN2+g%(XBPxnqYy)Wr-D<0^qG`8dpWM4k}CigG(}>Cb_;^AA^?P*GFHk zd3<7UW>fdd7XNhBM2SXoO(+LzI!#NZSrWIXpx}E?y|Dtuo_L#vht1-T{qCPvH4;cj zZ8%cqQ-UMJDnjaMWlrzbHIcw{xw32GtY)Sz+q8G)L% z2XRa7TwpM1q{!J*RJ;n{Zj0Gtsh}M@RbF}5q85t%FQoB!_s}8;_7zi>7e-Kh`I1^B zDW@D3Vg%_5fx2rvKul0$9%sWuToN+PhY>WAgT zhh$~M5v}Ka&dBH5>CAOA+6|eHjdbvBZgh9mb3C1})puCs?&euXk17?L1aDVc;Eprsq^{@F*~10V`&^~)#E(;j%&eO$ zezmTzu&xEM#A+%f+ep;fQ6sEhQkbMcXjHN78ER|L3TmBYgO5n;r&~C@g{!GZT0|-4 zXk*uAOwjZJA0s5xWn-T+69Pf1VS57o%^DaZe~whbbvNT&0ql6}l0SSXXIGyG%1mmh z>|AD_(YZGW*v%+OZW~G|y!RIZEO3;&r_rDvOB}s5B+CQE?qvw@dT>&{kR1Z#1;3sq7O}?LtaIIDkveewA#d z69+-Di$kb!KRR?ZcY2mQ`D)VF>gs9M)=s75R#;zw95g-#)=QfP7(4xx_g)wWq02Ot zbACbqZSju7Fwk9c0bDg0AX#8RO`f21UdF?jEc(0d8o)ymoLTl~HNK!|Ajzca2;rCT z`R6-OMJ|YW|7 z2Z*_uk+VvH64hf_Nwt_pl29jLnc?^`une?BsYUiIyxJ6;hy(wCMZ%kI5Azx*T5N+1 zRfuvbzE5^V6t*1N=@I-unUQC32$Hf@pUcS;eX-mwKn078ezChmV){_0(%*r44uVy< zc9gSE0sr6)<+GwHT@C9WH(2;?D=A`J7NVcuxm@HDH~G~IeB5scQ1^1A8V}1|@nH5{ z6~hStaA;MHuGvKm|AC@Ydpw$lDfzi@ zG4nLEK>ym9Eb~!yS?|fg+s1OV)Lv+Y#|yLw3B%Ne7q&*TjkoYBc5CWhG%1E}wIf+$ zt|jMdyF7_X_)5kujxpzq0Negt-syS#A?3RXu+AW31=pzZy%gb??TBRBW<5Q9I{I0$ zA1ZcHHQzuIBA9c}c<4NY;{QvYV6z@sX5f(~qxZRGv+)TPGz%-BQwGPTYm%9kQ6~1SHC`9-$d%;Q!$PPhs6nY=QfO zYe{}%^(e1#$^tO2(AR@YcsQkL-!@yt7ug14EeKLslzk)tm#eiLyea`JNb4$LHD%Tu zIo8<3>)N_%Ytb2OYJI4Z%Uq|Hgp$m|wqXBR?7K#;tUligvbG>ETKFz4c#-RqPfq<+ z1lsl53!3fnd*Ek`z0$;jEXU7OA%?V5Da2|?xwq_B7Z>y-Om%P;V})XQ9BP9GoS?et zNAY_?dYITMs#Jhi)r8h>%@$USI*Jfj_2ii-jb|lk^k639)>B(=lU~q-CSOWsj11jy zb5b|L^#R%0%9#r)PHY`%y01BX&xIvrWs)W8>%K-kxM{|zW-1mus5FyY2FB^RTv0q5 zr2RoloWPth)vk#SB}>A55^(Xz+ri#;Z`Oy!$lD^9Wa&JbBnaZv*O8Y6km0pov%9Dd zjxSUsYxy^)jRTEk{2ij}nqSsJ)hqF<&)f8O?Gy+Tb z&BxJCtBSS3mBHG6Y`3g^)V#L|h_E?T?4E7ZVL0Q3=Ti6od2V$tD@!xvgh<$8-C`Tl?NGD9Y%hr?0CICI>;qW2m^Yb&# zki^sV<#f`-|I^nwMM>6e>o#rMth8<0wr#7@cBLw9+qNogR@%1Bn{{sc_pZI$J$J-Q z#6$G9Vz!92V$Ct<*S%B3YE)8X=NsHA-Tc72-dR!D(f3P#)C~?Vd7?T`I^6oN#u=cl z!<4_ZzX@0by};HUF@^nRr6~6*bob4k+H;eDbOjAD!(6sG;SzNp(bS_;x3w~83c-ts z`94BL*^r#WW%WZZE!k$ze+=e!8kV@t!shX{K=={W7L#he7?_aj+QH$9%e$@6^R@Uj zZxr*`RIhX0cBpi>K6v}hPOtm<;bgVBy4(E~5hu?lwc=Ak^!mJj8-k8>fA8&PtAdXL zJ`YJrz2s6yR~pY_j|?>{3hYWxOZU@S@i97w;qm)5YlIz7^NJScguK#vEbBUlb{I1D zVXjw#gLq=4gHNqF?yB3ecLFJsfH%tLtM5m38a7_|Mw*XB)}St*1f=Kv&Q7`1*tse` z7-ehEnp*S>{w1;D3x0<4LiS4}afF>s_tz#WRk;P#(IBS&iS{>+QrkX#o?nVC0O_rb zpM6mDsglF0L`=XN(_Q*hBQP>zw&nJv43i}douYI}g`z;9W%vb5EOU1O9LD-AHB+Bc4GV;5+a}&B0O0Tn&;6*_zwq7%P+@ ziV8k2-^Q;xAYQbFhKeLyh9OV1Q!z;T3Z#)}g zAT)=^YM{}IR)=2gyY7HgixgtV5416dX|@qSl0e=C3BIDcc^RIjrFqCXS}{Ilqf!?{6;>JxRBIp^i!&P@Ii}^?&kDcq86YN z1NcQZy>>SoY5;d=T^@$uO~=BXwlF+!ruC1yTd&|ecuL49N3mt;h@)Q3kkhN3WEXGu z>FoLMRHxglawHk0Od8BT6t@nbn<8NBQq`dlxMle-#5m}tdd=aoNP~NA!;+kTU?1Sq z)`*bcAs^&S7N9sO4XN9Vs%T!HQ<;dt2ZE|B>65lsG2l8wAvq8}yrMdx@ zvbZ6(D)tsUgvGlSZBfi^75AmJ5i*yd1~}Q6n4E7XwKPHeWquQ;YM4hm``5=LhTAO$ z9l}#qNKyUbN5IrY0U#i7%QS*99Wjb~28W81qp@CoXJgsJ>~}6qr;c`zWcKYHV?8w+ zA{@#BZ>~G~`!&I#%N1jXLOxV45S9!iObP03fjGQ3Sb?qPtJX^htb?s#Lyf9Zs;IU1PU}L|pZYGo9Q&IgV$^ zSB$!pH=#X0fjjG^2x7-BP@&iK#V=uGO7@{>a55k?1~*BT*rhC|XZfkc6ThY)VpaOc z=Ot7Q-cFjD!flWUg!fgtGyNlqSW>saJMVv^+980zYrkm!EW=%7!&ASgW=DvOq@$xz zslvtr*lK`P@AlSJ=%2oo94GWJk4IAWQvtGt1(#iZ`b1P|`QCsGF*Wo6Su;GC8akEf zFT3}$VI4~jaC_~->j}kFsXZhl%Nw7x$#&9_N#U?Sp2V89M*}ciW)7@R0%88T!AlEm z*`4poXjl1ad$Hi`9fJ@;^TPT7`~V-Wp2l-4mwDq>5(5?p_r9Ic04;!_+p@~|Jh=|3xPR~w~;xJ&N6jgph z(39&zQL19=EgQe%x5`Ki00-ZeMMu-5_>&~NMg#A(&#qm{**cH<&Ci}fO$|PLKV{6- zgSuZpi}f+J8MLX|i05s|r6yp5)0hjjudU6)4|(P^FDxrWBK(v1k$>wb5uigTBfLrZ zY8sPj3qUfJb@B*08GODkjuWAme+!){%g@+D{8uhJ!mCms8@a=SL0L^ZI8jQp$U1yn z3=7$aZk>nPAuMx>EHI6n&`TzsiwU|(2mFBAE>}&eHwT(qXlRwp)k?LC!=imV`%p?N z;Jw9bfnjqB9aG(+5dGvyei8eey%<6Y%C;e77CMWE{0{%tNT8cuOe%P1V<#P32!o7? zcIQZa*{~9Zl;+L8pIdLF6c+5MJkYZ}ZEpH_QoI#aOp^(CU8K2XT?Wf)Eyho1(XN$T z^4Un8CRW)snlrt86PGj1dr7%QyOcbRnoJ1iYWA@vQD%lt+hc`JP_6TI)8k6cL4F4X zGYnR6T_PkusZ54**cA%>#TrM(vGmHk0_C^BqiUWQP zr%ijg;5cRW`%IpASA-CgfCZWP98hT5&;cfC9;ANxZ7@6QWmvp^b>68tj0h{CeZc-@ zz{tJPi6|v&mlvq35Eaq2;rd3X%y8;1J2aL3QK~yOmHm~K9qBXXx9XX&QH`;5tH8e# zKq*KB&BCWGcP^)~>SfuPd7M4nzXkYuz7p$k21bq(_goltm3`YNCarn% z19iU#s82RY-NTI7S;IkZO*~daBWd}}Ls$}JZ6EXhQN~-Z<(Q~Q@$+FB&s`35y;`m_ zG0(W~!D0&oq7bj$@sNZ39w)&Aj&qCK3~sd2N!~U+um}TZ2OUZZEqSni%4F_c_4%sa ztg?A9yo|?T<@d+&Oy`2S&Z_mWQkGmVxEMwDSRF=OG4y!#cJ2I2b>jof@<%xJEY5Ia!TAR zpt+-xfk@+8{sGE8^)vzH?+#V@*xZa|y@RqbTyLlFmk8<5$ZRrd~Q~a@o z))^W8;YlNL#mIY(tXe^aoh)YG2c2R%^I2DPQI!hKE-MMEFJjhTauN!oauK2CrJ46# zq#Fahdp^@MxobQenOlqW;;rn~22yRSYE4QR;WlcZeWlijzQK}YV%g>kPO|r5LO9a9 z-GoEJhW3?IgxG2)xc~g+q(b--zoXc%XL>7^t+Rsn&iMVzRHg~&u2G>}=f$D{Rrc|r zC`x7c?CI59BGdX94<9r2x_)5))%;lF3W0@PO;GRmg!k)oMKfG%T?ugsi8b`eh}BN| zZ$_D&lAo21ZT`8!E-r)fGQF!tMJeun&|q%HQ7zH*IS+WFwXRvJ7GV*DpNfU%WV6C{ zq|(XLo{E9LsJ%MEbGj@@bCgHcWb|O3TSf_>esR#2P3u%@(uf9to6kuc!!osl&0UIX z`1CTsbocCV`K7Clo=Q2INF&GMU`beRXLZ7h z@=Qdr&mgy5y0CXO7EOP`dl#LImsr0cl%QOBFBmZ-vUGLx8>OC7@t}y$`z=}uC|2-; zQyaC^MV-$6q$IVqVrLb>(mSEMNCnPbj{J+C80#Ax?dbW4;+FCN&N}Jjf6GSnGTK~5lfy* zLxB##NPT{HBKw;eHwFOaPr(M3&mxTF{6AI=b=H&-kkRML29csw4@#IbX8e^VG1UgzcJUJG1}Q6J$X zPw{w*D2;Z309n%V?DDiyAVK90f?Ovv2;WzQK+uJMVq7ox;mNX8CQLWvzvt1;WOdO# z5-mpq096yiP&jez_Xj#k8#CR3*;t>U6()ZF2vNZ*uIjg-(wN7IU0fJ`RAy>?$y>N6 ze7SM79Z~`Z#;(RF31P6SrKm)H%9MtEXWcD{{v}IpMBi{YUE-f0Fm=2&31oDr-;8&o zau_v}2RQ914;%6UY@fW!T{za)`x_Ml?PFE$P;K+=@v*ww_wnH5Z2}&DLsthB&MFOW z>Zj+;r2zTX?rxwEIt95NKK{f{&wPu*#W4GVv}ROPy&kjGaeGa4io3e32cC?Y*i+#M zi7qzYYVs@2mD9@Ix{Al>!0vjh9as0{=xuu@b9 zHsNo8G1`pDk=eK}j*Z@*?(W&u58S*>cyX@Y85$_N9n46MkzeH-1w$ev9Qiw_;EaO< z^_%TRhqrdf+{j*9r#)%>sYUiYwR+tq?8*-W2 zy2fH;PGP}j=TR^=xw1%Nnlrd|l$=cLb{NvUhuMQy&_vi*+Y+mutJt@OzEy&!YLgB( zmjsbrJT62$FXSd2-D4eBBBrhsX`azWlb#59oPxENZ^LX<0BM}qP(-u9Ppy*G!C>Z` z%LrH_;U(@sUnfuAdtf(>`yGz=hsTTgb8fG+L8fL^5^$1J1Y)P2xuJiT4`O$6p^18n z^PMmv`!ofIxwZbDe98}U)+@A*r3Gqb76ilAth8Ef*OX*$=h%c+OXt#rW`F7CQ9l{b zW4xjT+*d-Tq%#B5Bru4nK46W+cU%({5%s7KdK=Wt}maZ#1l+*bvpY;nG%MeAouNW2xkLKtV&@YAXxj^5c!{ zHU&RicPenNg23ymV8Deo3w>?&KF(|n@}5E#l#H_zzzx8~)}OaT_va?s>{WJgVv6G) zK4px#oMwR|7tUW7B&xzMDNH7osC$;*&%Om($FIbWmwl^?9`@48dq@PAI1oEmWN2U0 z!l&FytvjpvkO&N>tsg74$Xv0D=ZU=I^2T=N9##Sd$bsvw+tI9 zbT7k(B+cukm&e8T4owVN{q(W_cCx#A+l>GD@__vbtLMd*j5il-y9JLH$F8CgcoiwX zyXblN_RFpe?{i`=Fd%kRl4mheG1TKq?Y&xXcJ9$T>k7NKK11&z7+US^fi9$G%PhDu zG{nTYcmu0QiM`n^-9B{mx8ey|s6jYGSImQ*7fDKOSc@|y6>RHXHh=layTNaiHiFWA zvfx}%*DPa&G+v5^hzzkqiZ}{4^g?Y>60K{aA$@nn-S3@kt#NO|wG2LDPR|OHm9c2j zj0?i?$z*8kf#+WCg%>!G5rwC1-P0mii@)>V)`^+{5W74-cUNQZt9ZL?+6@k$wx5zM zD!Ce>+M#QZerH;ihbh9I6-+sBv_;SuFsQk*)DJ>8sBVhxYi&X9vyySn(llxV_FPG& zp4N$eSmHo{6}VPY?AkBbbsiXB81~H^xw9GFqreibLSh-{_%RoL@O9!wu2?ur=5&G< zl}6E?Gp?IgE*n+YS`fK^?8kt>RcnC88{@P?h8*D}97YA}@QG zIDG-OFYlGTDW$MJ3d$|;voErBYXjvVSUu5tJFxRUOeVJZInWQou32$fCiR2f9@gSK zH`vdUNTrlAUw892A*uljezFEvuYZK#p6p7|32_!Z)r-S=V6Y^~n za8o_30rI5k{27`aEs6Wq|@_JNVO3( zc2&A@^%VoeE!Yf1z8rvsWUYvD{uwra=#r@hvc2*QvW%A~~BDD-f zTI!&9fkE>^n=n*p9Q3Ra&R?712#N%$pCL}Un9#_q`m+@Mik3Zkin`ClTwa8S zO%d6EbMTe5$Exu#!uG)0&^=49iOA4SXI+TMyDtsvXyCHNm3cWU--W94?Cu!OkbY;M zbClqMH^0Ifs(9>GY^#9h`rT2y)pzVRy=-A_wpwhiA`EXA9{)VJ(5+e-zHX>{L;2L< z%>|g0t!d#kZ%JZT?LhdEY`y5%uu$jdZ6SUSu&xs>-JqWT+XxCBjeSnY9gn|(YM>QF zFRQ$KUqpzyW>gohXJitMl0Keg&6|D@Ln)$jc4q0a>R~;u(fdNR=RP$V+X#b zA%#a>$$N0yoLL7i>>bTbp$U7jmjYyc2KwylB1s#OYvLvD+G?>iGwdcos-wNt)|rQ= zN9ve~Z;ef`@Gd%N0YQrb27olD6NaK6pt&~{HyJ=FcDV|KV-VNUQNT&pS*bOONH#kf zs+}Hif#<%>VPcAGt~5);^Hg5!DM1GEt1np}On%2HlmIoMy_h$u?24QrJ3^N>tx6pD*;UH;jE&gR!&qm;k z_qwrStq}hd07Ewmfa?ThfRwBkzH8E2j4(hwxR%2K1$>HVR5wS-)@mdA!UIn#_*`h4cF>rgIKUaBM*b|pt=D~niRW4 za!R(RID9aGB2JJcWozcNdgzRdb6KLO&!Zr|viVROdAYfM<*E|*ASV&*WsU?{iy05H zg`l4I7!p{MG$BP2u+%^voF+AgM|G9+bz$4snP;UlC|6-S81tfw5^2hEn}8hC>Zw#R z#E9y8DO^(aX9V)`FA_{WbnCP6o8pk5!^&Ux7;pN;5k%o|aaREk5057fT6-}?S_xi1 zb|N;(lrLnwZwUx3LY~PjYS}AXSv#IiZlr@Rc(|;14*-O(lW%I5&luxsovU}22Sraa z0_?`2_UF0!rxqlOJ$_jxca!I$hI=_g-Dau#G(-?wJ4& zgyq_7*_P(w>0x*C88I~9IrXivLi%KMoDX85DM165>-r*h=f-$LO~b_9f%#m0c>t== z1?OQ{F_wm;PCYc^X{RQo6P}vt%RFUGY+z`O#{GLsZnBf43O)Ln2r@)0Ai8$8t=nlA z7CatMOQy_aKrmy>8Uv2c`~A~+Ng#7o*YgMn&B?; zQ;n#n!BCOa|9B{jpvBKD^bH+`E(b}A09YjrjXl87D^v`K4%h;HQ83FpXOp-a#x~3* zad(xxJx==-)@KV3x}0xnsSV;Q{aQyWHLW75xXmuNLT=#=8ol7%2S(0PhwVJBsuS~` zjymH;xwW=G9=rn#7aolX}q@D z)QnXWYPrD*0*G1!V<|%lu=JE!Mu-wB6wz zt`{md_^*&lb#cT5)qfHa|a{> z@3)s9eY1zY$BC)#OCNF;PN=b4#Cle0K)9JxL|!pJnzj7#trw!>NB zd3ntDRV~lp+b;E+oW>SHsBE=;UN39%zB~C$Vu9YU0c{d(0THD42~9OH4joDKyE+^> z5#(7HaYqfS2FOai!cJko7S@0*r-NT&86FlH%-%fJZ5@J+fcJ;Rz6}zP*cFTwZMU(U zJy4;-06)U}+*+C?GrD|Rx*vcMTbO%PJ9~uUFRsdF?P=d2O>Vn9(9A4pks;Pc8JGcjC z3)Gxd^QvjwRZ2pRiIElX2(a@Qdwe>Yk8+zizb=ODd$Y~GEf63yD_8fCwzVy%&k(cl zz#VWqQE;v^+nE~l1Xk*gy6KQubBHkmh*9P7;V-dTy`^Ku@u=}Yz`8&HGGCrgMIJ&fXn zPC&RJRys~ec8AP0!Y)S4HQm68j|=gA9Uk*K(+h~yi!3_~T+41jofstFqQS(p!iAJ# zLX$DAjpp%M<*2YM*W0Zhkz-kXQZ#tH>3J!|2)9VXZF0qs*o_W)>@XI9W2MklAbodA zLD{R(O}%klWuCFle(=``F#}IX(A)-A*Xb_t+sf6v@he8w!-8ebu$XxARYnl`E)FPF z1pWz#A7c_8iV6~%4-^Nf1x$-M5D>O92_P0)sLJJaAV7a z#4ihcT0butZ43$kRmhg9CNQkdE_ibwgjQQu3_AqFn8H%Xf*PDuw)YXIu(_>@yp`HY z4=5<8HFII9tjL>VG)M&H?lx?R%{c@vT8fcs6CXA!s`j0#KDXu=igi6$~pjiyK<|E0UWwgadaH71=1x-DeN6s>sl5)bIMv6om9h^k@B zhvv7+-A%;?27fxeNK{~3Xk%L5!tJXK=9;?`xqWR)&~SpB?M*}CUgaq;jFZIY62N`K zp>M^_{|Ga`ZQ$W-ECXDoO1@{Lo3pSFk&S4`xs?Cf4m3vqRUxQ5ugub89?+|fsvQ{u zLXR*?#EL-91{2gY0~=%`fem5gf~`JgN1!iP;H&Tr6M}qar^m1$YP2i?Lp5)jq_@ad zye(b7qq$ki9Lv+GAdNW`1QWx?E~>!P0qNB_fYh}S|F+3W``hcit?2i);+}^Kz4mTO?098Pg{w}0;_=9<$u`PGkN9d-jK~c0D+m7X1q1ZdqhFJ9nO7BAhS^jN%&by* z>C|-P-&hU(-1FRs1y#)hF^p<2BUboxMkZ{r-c42fdgRf9ZRX-d2*(ROt^pAQs!Cav zp^>n6BMgtYcmQq_MRGf^Kfdy>!6EKy`Iv{8007n}{@xCh@L$PK*k2oi{uOsX=VWVP zZ*SuKfAjSIWL|cv_S){UB6J>7feFGvE`;x{)6~e@@xreRg3eCYg*eBB30O6tREX^t?44zK7&zHjKgeO27dG2xAO%`U**++t7jA3W`^+ z`utk#E80$oV`C_M5Tt6dHS~n_!Q8zqW$Qn!b5ThFhu@9z)Zy#HcMdD(d*n8^QDYMN zV)`+)St!e*{cW4}8@rLd^TicTRsbV{i+sq1EP9QDzdYCQntfNBF&&JEEVj{QUIx%t0VCPeLGeUi9}QQs28 z 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 CVPNC{ literal 0 HcmV?d00001