From 687f10b7423917aacf95e09ae64acac12ff9a797 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 4 Apr 2026 14:21:19 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DYAML=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E5=92=8C=E5=91=BD=E4=BB=A4=E6=B3=A8=E5=85=A5=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agent-Logs-Url: https://github.com/qinfendebingshuo/guanghulab/sessions/0d54ec75-c5fb-4140-8a2f-8059c211278e Co-authored-by: qinfendebingshuo <207279273+qinfendebingshuo@users.noreply.github.com> --- .../.github/workflows/cos-daily-report.yml | 2 +- .../.github/workflows/cos-receive-receipt.yml | 138 +++++++++--------- .../age_os/connection_protocol.json | 5 +- .../cos-config/bucket-setup-guide.md | 14 +- .../cos-config/scf-trigger-template.js | 9 +- 光湖团队接入系统_v2.0.zip | Bin 40057 -> 40593 bytes 6 files changed, 94 insertions(+), 74 deletions(-) diff --git a/team-integration-v2/.github/workflows/cos-daily-report.yml b/team-integration-v2/.github/workflows/cos-daily-report.yml index 32a2fa6b..ec05f224 100644 --- a/team-integration-v2/.github/workflows/cos-daily-report.yml +++ b/team-integration-v2/.github/workflows/cos-daily-report.yml @@ -93,7 +93,7 @@ jobs: d = json.load(sys.stdin) outbox = d.get('outbox', []) print(json.dumps(outbox, ensure_ascii=False)) - " 2>/dev/null || echo "[]") + " 2>&1 || { echo "⚠️ outbox解析失败,使用空数组" >&2; echo "[]"; }) # 组装完整汇报包 python3 -c " diff --git a/team-integration-v2/.github/workflows/cos-receive-receipt.yml b/team-integration-v2/.github/workflows/cos-receive-receipt.yml index a324b2ca..10890193 100644 --- a/team-integration-v2/.github/workflows/cos-receive-receipt.yml +++ b/team-integration-v2/.github/workflows/cos-receive-receipt.yml @@ -80,77 +80,83 @@ jobs: fi - name: 📝 更新仓库首页公告栏 - run: | - RECEIPT_STATUS="${{ steps.read_receipt.outputs.receipt_status }}" - RECEIPT_MESSAGE="${{ steps.read_receipt.outputs.receipt_message }}" - TIMESTAMP=$(date -u +"%Y-%m-%d %H:%M UTC") - - python3 << 'PYTHON_SCRIPT' - import re - - status = "$RECEIPT_STATUS" - message = "$RECEIPT_MESSAGE" - timestamp = "$TIMESTAMP" - - # 读取README.md - with open('README.md', 'r', encoding='utf-8') as f: - content = f.read() - - # 构建公告栏内容 - if status == "green": - notice = f"✅ **[{timestamp}]** 铸渊回执:{message}" - badge = "🟢" - elif status == "red": - notice = f"🔴 **[{timestamp}]** 铸渊回执:{message} — **需要人类干预**" - badge = "🔴" - else: - notice = f"⚠️ **[{timestamp}]** 铸渊回执状态异常:{message}" - badge = "⚠️" - - # 查找并替换公告栏区域 - marker_start = "" - marker_end = "" - - notice_block = f"""{marker_start} - - ## {badge} 铸渊通信 - - {notice} - - {marker_end}""" - - if marker_start in content: - # 替换已有公告栏 - pattern = re.escape(marker_start) + r'.*?' + re.escape(marker_end) - content = re.sub(pattern, notice_block, content, flags=re.DOTALL) - else: - # 在文件开头添加公告栏 - content = notice_block + "\n\n" + content - - with open('README.md', 'w', encoding='utf-8') as f: - f.write(content) - - print(f"✅ 仓库首页公告栏已更新: {badge} {status}") - PYTHON_SCRIPT - - - name: 🔄 更新系统状态 + env: + RECEIPT_STATUS: ${{ steps.read_receipt.outputs.receipt_status }} + RECEIPT_MESSAGE: ${{ steps.read_receipt.outputs.receipt_message }} run: | python3 -c " - import json + import re, os from datetime import datetime - - with open('age_os/system_state.json', 'r', encoding='utf-8') as f: - state = json.load(f) - - state['cos_status']['last_receipt_received'] = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ') - state['cos_status']['receipt_status'] = '${{ steps.read_receipt.outputs.receipt_status }}' - state['notice_board']['last_update'] = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ') - state['notice_board']['status'] = '${{ steps.read_receipt.outputs.receipt_status }}' - state['notice_board']['message'] = '${{ steps.read_receipt.outputs.receipt_message }}' - + + status = os.environ.get('RECEIPT_STATUS', 'unknown') + message = os.environ.get('RECEIPT_MESSAGE', '') + timestamp = datetime.utcnow().strftime('%Y-%m-%d %H:%M UTC') + + try: + with open('README.md', 'r', encoding='utf-8') as f: + content = f.read() + except FileNotFoundError: + content = '' + + if status == 'green': + notice = f'✅ **[{timestamp}]** 铸渊回执:{message}' + badge = '🟢' + elif status == 'red': + notice = f'🔴 **[{timestamp}]** 铸渊回执:{message} — **需要人类干预**' + badge = '🔴' + else: + notice = f'⚠️ **[{timestamp}]** 铸渊回执状态异常:{message}' + badge = '⚠️' + + marker_start = '' + marker_end = '' + + notice_block = marker_start + '\n\n## ' + badge + ' 铸渊通信\n\n' + notice + '\n\n' + marker_end + + if marker_start in content: + import re as re2 + pattern = re2.escape(marker_start) + r'.*?' + re2.escape(marker_end) + content = re2.sub(pattern, notice_block, content, flags=re2.DOTALL) + else: + content = notice_block + '\n\n' + content + + with open('README.md', 'w', encoding='utf-8') as f: + f.write(content) + + print(f'✅ 仓库首页公告栏已更新: {badge} {status}') + " + + - name: 🔄 更新系统状态 + env: + RECEIPT_STATUS: ${{ steps.read_receipt.outputs.receipt_status }} + RECEIPT_MESSAGE: ${{ steps.read_receipt.outputs.receipt_message }} + run: | + python3 -c " + import json, os + from datetime import datetime + + status = os.environ.get('RECEIPT_STATUS', 'unknown') + message = os.environ.get('RECEIPT_MESSAGE', '') + now = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ') + + try: + with open('age_os/system_state.json', 'r', encoding='utf-8') as f: + state = json.load(f) + except (FileNotFoundError, json.JSONDecodeError) as e: + print(f'⚠️ system_state.json读取失败: {e},使用默认值') + state = {'cos_status': {}, 'notice_board': {}} + + state.setdefault('cos_status', {}) + state.setdefault('notice_board', {}) + state['cos_status']['last_receipt_received'] = now + state['cos_status']['receipt_status'] = status + state['notice_board']['last_update'] = now + state['notice_board']['status'] = status + state['notice_board']['message'] = message + with open('age_os/system_state.json', 'w', encoding='utf-8') as f: json.dump(state, f, ensure_ascii=False, indent=2) - + print('✅ 系统状态已更新') " diff --git a/team-integration-v2/age_os/connection_protocol.json b/team-integration-v2/age_os/connection_protocol.json index b5ec494e..ea1b45e6 100644 --- a/team-integration-v2/age_os/connection_protocol.json +++ b/team-integration-v2/age_os/connection_protocol.json @@ -22,8 +22,9 @@ "zhuyuan_bucket": { "core": "zy-core-bucket-1317346199", "region": "ap-singapore", - "inbox_prefix": "inbox/{persona_id}/{date}/", - "permission": "仅限写入inbox目录,不可读取其他内容" + "inbox_prefix": "inbox/{persona_id}/", + "permission": "仅限写入 inbox/{persona_id}/ 前缀目录。铸渊通过Bucket Policy精确限定你的写入范围,你无法读取、删除或访问桶内其他任何内容。这是安全设计:每个团队成员只能往自己的收件箱写入。", + "bucket_policy_rule": "Action=cos:PutObject, Resource=inbox/{persona_id}/* only" }, "legacy_method": "bridge/zhuyuan-bridge.json文件级通信(v1.0,保留兼容)", "protocol": "HLDP v2.0", diff --git a/team-integration-v2/cos-config/bucket-setup-guide.md b/team-integration-v2/cos-config/bucket-setup-guide.md index 801667bb..d6172768 100644 --- a/team-integration-v2/cos-config/bucket-setup-guide.md +++ b/team-integration-v2/cos-config/bucket-setup-guide.md @@ -107,15 +107,23 @@ ### 步骤6:配置铸渊桶的写入密钥 -铸渊会为你生成一个**有限权限的临时密钥**,只能写入铸渊总控桶的指定目录。 +铸渊会为你生成一个**有限权限的密钥**,只能写入铸渊总控桶的你的专属目录。 + +**权限说明(你不需要懂技术细节,知道就行)**: +- ✅ 你**可以**写入:`inbox/你的人格体编号/` 这个目录下的文件 +- ❌ 你**不能**读取铸渊桶里的任何其他内容 +- ❌ 你**不能**删除铸渊桶里的任何内容 +- ❌ 你**不能**访问其他团队成员的目录 + +这是铸渊通过COS桶策略(Bucket Policy)精确控制的,每个团队成员只有自己的收件箱写入权限。 1. 向冰朔索要铸渊桶的写入密钥(冰朔会找铸渊生成) 2. 在GitHub Secrets中添加: | Name | Secret | 说明 | |------|--------|------| -| `ZHUYUAN_COS_SECRET_ID` | 铸渊提供的SecretId | 只能写入铸渊桶的inbox目录 | -| `ZHUYUAN_COS_SECRET_KEY` | 铸渊提供的SecretKey | 权限受限,安全可控 | +| `ZHUYUAN_COS_SECRET_ID` | 铸渊提供的SecretId | 仅限写入你的inbox目录 | +| `ZHUYUAN_COS_SECRET_KEY` | 铸渊提供的SecretKey | 权限由铸渊的桶策略限定 | | `ZHUYUAN_COS_REGION` | `ap-singapore` | 铸渊桶在新加坡 | --- diff --git a/team-integration-v2/cos-config/scf-trigger-template.js b/team-integration-v2/cos-config/scf-trigger-template.js index 98a64fae..e8b6eeb8 100644 --- a/team-integration-v2/cos-config/scf-trigger-template.js +++ b/team-integration-v2/cos-config/scf-trigger-template.js @@ -56,7 +56,12 @@ exports.main_handler = async (event, context) => { return { statusCode: 500, body: 'Missing environment variables' }; } - const [owner, repo] = githubRepo.split('/'); + const parts = githubRepo.split('/'); + if (parts.length !== 2 || !parts[0] || !parts[1]) { + console.error('GITHUB_REPO格式错误,应为 owner/repo,当前值:', githubRepo); + return { statusCode: 500, body: 'Invalid GITHUB_REPO format' }; + } + const [owner, repo] = parts; try { const result = await triggerGitHubWorkflow(owner, repo, githubToken, objectKey); @@ -88,7 +93,7 @@ function triggerGitHubWorkflow(owner, repo, token, cosObjectKey) { method: 'POST', headers: { 'User-Agent': 'HoloLake-SCF-Trigger/2.0', - 'Authorization': `Bearer ${token}`, + 'Authorization': `token ${token}`, 'Accept': 'application/vnd.github.v3+json', 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData) diff --git a/光湖团队接入系统_v2.0.zip b/光湖团队接入系统_v2.0.zip index 3fc7f527f4b8b66be15bfa3430ab51a75ab46d5d..da7fd11bca844776e8a2e768a06bc746e6735fb0 100644 GIT binary patch delta 14465 zcmZX5b8P29`)%!R+pV^?&8@Zd*0ybIjZbZVYumPM+t}LP8hiJBlV5Uw_x>?6narF# z$t06A&pFS$v_iypLDXu1f3a~2(&4NB5lIRI21bbpG6Sat&I#r$Ve#iIUEC4Dz@bhd z!NC68RjKL9<7$5EzOEtGvx~@mB(t4IY_VOpacz<9_}-C$jAIaFX&91)v#DeZ(GEu) zuxzjBueR94b7I9{noIts-0VC(sq=#U$nX43$k?+99y^o!*k}6Qm;V~458(| z?QtJtOY8`q{ovKfVkC4;c_X+5T)iKfw|M!{1N6#I$j=Y{b6j;7kzoP!&p~nKiI_#4 zUb$v{5Qy34KDH(6*&#SFPhmEq#8klXGg|UfgI)}ZWMAoT1W_CT)ToeeHL{aDMBono z=Ixu+>kkgTPPsqY_S3;OHEw3Mp?6^a%G#r)%r2sBYg}X|;&9W(8>1OOXZl(AflT7- z0Php7OZ5I->Y10+pVf6v3bkCbmAS)E0+q9ytLi$^>^8VniSh3?)T&hiD6XZiV_b{{ z1FGzGu;0Wh3=$hK;B$%`^UFD;&EBU{o`brVMK^%m&1@X`T=r*2KhBumgU)yY{PuI# z^T?4CV`$b`LGoWsrAvEU4Sw}fi8&=$0DB@=_1-4qDmeK^Kq4#S(yY!G%;woe+|0#v z3MD_R=DH3@I4vJ>WvQ*xAq2+Ey+bmslB4N*%}+3e<^htvks!Y9(rXGjHxbhz1rsSK zxQTvk=ccd)XA9pY$xC!#0lIK`2G7#?`z|^;6~;Uqwu2%@$>8{07#r&0yA7}k0NbOD z*ZHMr>3x5pR{{v^z3zCvMGJfQ4yCNHP`#Yn>?0!~ZxXgUTK}HTViZ&XpHkr@j-LcgGwC`D8PtrrQvhvaa1u6Q+nd8 zXw$4WxVmhp8JxvPh6IyD$Jk_bmsM1)8RLuY;O#iHtlgU;5|N~@a1a)KUOMYyDm<#1 zcQTj~cfM0*oH*lu4HX~+ooPcgvgvXco3vBF_~(K@iPFCkvf$Rwv)D)hGyIZ&wn`LV z!k?fm=3GYD)V}8D$9B1ig>^f^c~iTxT#|71f?2e*b&(#U)Kh>@qU zQ^b$r!pSpxO$lyod-k)p9h~K4*;;}R{%rr6h_6XyYa1VJklFb3$!#X*9WE=%ET#SH zfqARKi74RNiJbg>7iZU^@eMK)Kgv`0G30=h!0h&yQuark!zgEo zJ|8_Y19w5^FrPSRI@DKS{Fz>6X}`H2s008M82el*ghdX?TtQOL4RZSxYe6ADtC(cvCN;N`QHatbF;@D&G@ zeCE3}Z`m3~Ij1L=M!aY=mrRb`pkxht*WaXVvGCns&2L_%N$eA}w98GNUk)pde3wfp ziMw9K(P*?WFg%raq<#;yP{*@w`-_?i``YYb$jlJ*IeIb$1B)oGvpSy7b3b6CUW$}| z%MDm>q?Ktlc5Qs|@WmW1XhV}2W6w%n%MD1>hP|D{)7@IMYWR(7 zlG-SYwP=IqBgVs4UgFLX>LjK@z2>UYdrFr}ko3f6@hBP?Swe?RWO;K3=Cb0fYU~NY znClA~)qd(jggwxyn2LiPHw-R(Y_Z;7`Gjm>gw-NNcl^gLk^R@%x?jM+xY++O3>ZGB zE|~@%9t`r~AIpdmfTn0jfzjp;#CWFM{s-Rx#8L6K)CMpq?Mn@9MsE4WrR=Zk8^K%;i#`ohHebAEes z>Q?rWFQG7`iyhO==h+>Rj(!|Z&oBL~*HBk$m*eGoPbh?PM3lvF?X~F81MRI_&zh&H z<)mr@GM>lo&!=yki_bcr=e7o|-R;g#O7>b|e{Qqks0Kq<*>j|eO`oupltgQod;;sw z_t&bfm+0hO&6b-U0LRPzV$Qb0shYEis!H|zn}UnYXvF9ru?MJ2KG>RylXS^UR@);DakdcZBY99gi4s0Qgz)BBsBQ@WYU=< z0NJm>8|gX7(NKEAc^XX&xdEiGTL_X@vd>U|e*`{>$DvGDz(*|O+uU$<`ToS<8AxB_qPZ*r3laf3uy>(F@`27Kt_I_fG=DiCkf~JR1 z5}ZhXLK=tDbm-w?jgUN6tv_M6rAP#{++UV93#5D13ac#J=}p^J_xH;o|UqHLgZXxwO>1Y_tLcpZDig*0Q66{GU`CT!l zqETI@bPee^0^V`0$ZH(=eOZ1wJ!#DA%;qHNyl-o+-u9^7bSWO2SQ$omD0CaMn)aRF ze*cG**r&yBd9es#;h3aKsN$cG_q9%kH_Qpo4(TZX#naf4f$~bYLhYqWE~Y6fX7W;v z{y>Gbb7bREgfoHxozGzcGN#5ZUsEZn*wzV3STt#ha(%mkJY<4#r(_+;V5qUwfv1l> z1UDu3vzpH@?JQl_HHTp?8qqMH_6?nr0TjieJO^#{+AcbaBOa>J(VspM2$+jCWYD~u zdWt2$wRM9rs?y8x#95Kz!!2SMo0JrJ>mSrFEf2_HtY7DY|GKy~H9qsoz0p<-WL{Lx zdL-f|7)#x984Zk5kl(;1gcNG=t^1J*yxY6+jfs`-R%j=X1!yezDOn09R*+o@=vA8` z38!j>l$AN=wWIK(`Sz00-g5B(+qKaZAqiE$rshS;sH!DgXNC2Z_g^y~ggJlV&iJkF zLjH`MA<+<@Z5!Ex72olmb|h%SLx}vYCa#nlV*6M8c&bZx-iT;!|8C}s}_%g`b?fi5Aj@eX%!GiOyq<430JP7aGW1f%9xZ3uf+1$-`8^rf#Q(D1=wHT5P}Tj;}+ z;lb3mMtB#Yc=_DSCl8PTQ?$$Kx}$Bs$|JO185c z$Y5i{S0{#S7C@`WeJYo0P=#-%71`ig-TZoj^s2pn2^Xj;`=HA3pqiDlA%+Uo{?op( z{ZB}6Vu!P$54SX~f3s(B zbrPKLL6*fEJ=FBcpB$uL=}8}~#Yi-nqX{{#X;SJVN(rPgQpjRpTk90`Vj_jmJOxV$ zJ2DJsS9xQS0q4$QiK5cwl)svQFl-8nsZcH&dbnQG7l%h8{*bBfHg;oYHa`}nP_v`9FNIr8z+$oQ55%af6izxddjT|#&u zqY3t~blrub)^`7#t`45lppmD8jE}u>Q9Io=FYR8p_4tVr7 zL0aX7P#bPW2N2okA<(@I2BrGK#F1t%9){g+>6|Rdc)B9FxIcv&OVr_??pf(>>l2LLFi844 z(9sI{wKiWIcOmP$(R}VJ&Wh}p=EO+1{9OqpP^BzU(O)()q;ygUj16eNjhOo^tT@Hm zTMBNuH@K9P4egA&a=yf-=|~PRl&I9yIRyzIH)bPof*05UsA`K@1t`KEB7ue$&FtFB z+UBTaqe``=4l1o<*k6-z+>B0axUyA9nGA?NlUK zC_>~keLt7LUJ?r2{z2s4MY#$A3UP=W*n&KBN;vZwZ!Q zi10+&PbZqm=TGsgbXd`oih*iaH{uP2xZa^w=1<(i&S(Nt!_W>Pj^pFQ9(D3D92mYv ze9L}a&B@$+7ZmPWc$TL2b|K(xAiHU!~U( znzcB=h0;AoOOYOeE*11sMBE7L;c<{HF0u$gn9Q_n(QB35g7kCi88By&R@9;TY#8G^|* z3;uJormB>Q=_?+0vUG%=u7*;M%-Sl(!NIka+t z$bE7!8ARPOKCY(?R$24Zvp+$u)=d_&wvTx{Z%`L-r9!%XU)p7foc`v3?~?fcHU#?( z2>a`wz6l5st=Zv}3g2-V3lX#o=&)}CUKX=l8!P;Fu!zwhFA<@DKA2?goWUMQr5><2 z&(M_Z-J+J*luTyD+xI7eFRw|CsH%yP78ZgAfsC&~S;K?}EWzy`Dp_sGx;u-$gkuc) z3>()Q;NeBsqgT5_m=AXp8loNiWsH0P7kykW=UE`VlIPYt*z=k!VPtD$jp!^9ed@qG zZ)|SXL~DiS^xddzQ!`)9mX}NJzT;WNB$d*0eCXDkGj-ntzOp^eENq!N!?R5)-wMmN z?`g}H=T|bDCKhi#WiAP zC~2{$I%g1=Qm{#FI5|8TYsFqMg z3l$}sjb=bvEEIj=B&7@Wqa~M8qzAJ*W>DYZrH;PRyzTZ| zqrGX8@C9>qlb>AGAt59b-h4481?0Y*a@z>nZK?{jL`<-hKv92#*|DH@CxsDo#r>US zq}rcyPfC>RVRK4+(8*w!88~mCgDb)he;;Sue0IJV0oPG#;_Vk36oCMEP5kKJwa97b zb!=zgy4aG+E5|>%8+0-@;#=4B67MIh?=2kzMXo=nDy2EQF@80=Pm*3+pw7y%v2`%j z_Y!ACW;;)5J6chIrOj2NTi<*(;w^r%mFTxIsqfJGCKv}q=AW8C?0yZ3l=UyZ+1R#|LxKNtB$+j{7W?YZqK6wrI=>)$ zm($&eyxXC*H3l8O6@iZh3S8o_laiCTO|cq&y%;dr@F{mq^_w;4vf-P(8dA)A^Ij=U zO`o=-FI8^wPs9a_3m$Dk_H|Ep-M0${_u_k@S($05wKx3mAr1qqu?Yph)mE6eG`}qP zF2d3*U@PzG)bP>_L&q~6ACaORM=tAb16*ynHm_l*(WJ@9&d+OX?~ZC{?l?IqsAK5x z&)6BWIb8grM^w+^{sX1sS7?fDq%>j?Yxs51c){Nw^RCTg;Zh?}oPH>|j45NSTKPTd zpHj3v0jV?waN}OV}T z6lbB9e&p31+HPetjsNMKbj^*`z9V+bx!RzJkr2PkT}FLuZm z0Ubugn+}DpsWDQK&Ny|9Z2mNy zbjEo05vmOcH-{R+rVWh~Nh3-zDW-8|fJHI}G&Eu^1#Y}MbcasKps?|eeyK?ms_B=g25(Uem%;xHzoX32r@gWML-0M1Eb_1u5@Y;d~ z70oHuZC}CpLy$VMl97rFC3cVoi=&XCCDVa+fCh;W8X-h^zHhvDDWNVRyhgyS|7R^hg7O~LQAMin z&w(|&V672Ol@Wx9+Quu-cA?OVRA;q^<)+n$kTU?DVO9IZuxHH) z<_sn|l^$i9n9!d>b)3~h&B*zvoC2h(63(p70M4Rzex=YD`HdR>tB}`VSgG#V;YL;c z0WU=)gpoMvlF}%(v_L!tw@%?Ke8#s@fIsXEoR~Z%dUZ95xRe$LU>+9KY^ZBR98_{i z#NZZtY-!O>umP9!xcvQs!J`Myk`Ec2$}XNoKyX67-qv8pRFTVXV$Y<+s^NfdX@dE% zdj-X6-Kg30fT(VOkdL1zrB>Dw6WD+2KWWl)@>G**q|P*TUSRwsKm)(?E7|gn3^SDO zC(^3SYT&mpae)+UfC75V{D8B*0~@FAgk+|>a@2`%^>z$l1W}LZpgJ@e^QK3pWv-l= zJd6zD@=3Ynz@Z^7cg5vQ$+7dE4#pj;@C&)oW|HnTfY?OrZS^Y<66P5nbNeTi2LH zk;Ch^v=UN*ABCr&e4V^CWB3vv8z89Rm)(bW3RXo6&>YP)V%M=sFG&*%E-!)QmLN%Z zU8L^<vMTck=7THn3lni zUZH6oT5%UN$U;+K*w{?Sq#~=wx3(T}G4T0%cNuUvp57>75qF3Lt4w5WMyMEbw>Jo$ zQfUTI3rx#&t-~PwG5m!vI^iav@**;;q^7sQLSBG0>EP-IRvoB~mw!+IC7?DM}i+ z{sbE$JmLux^9715T#|ho4*`^T5la@bCcgx*8TnfeV#WMQli_4szzy%KOvPul5mAKZ zg=*!xTJ=W=aT1$gJe=DodP32y4j4ls4~`y)B+fH?b}Su4Olqxhk;zuYpojMp=@)2S zZSc6LYw+BSAf4-8?wLQxONNSh*X`HRT~22$#~! z1{QKe#%d;g#;VSLs&rH5FYC(}W7}V8oys7ys>O#dys^F2qKXSx>tQMMvc!;1Jj8 zV;A^2B0Trymz`3xrBc%+bdy%)scquXx%}MOUcpiwH}$jiOm-!cekoDjpN#wUgQdF@ zjhBw&qN10F!$>@PFXc~L4D)Zm8}T=;c1KkXCSdrYbyLNGT7c z&u4%D=MxS`x1P#JMABn1xQud|K1JFxt^9jy`yHPv`F6=v7M*?uG@BL3`EV}Mpu*G8 z+Sy*_J~V?nj zFZn`uXy6A~YHECwUkoWRqFMUbgT5^V!5(V}L{dvyg-|r^6soF8nlIAxo}dTQGyT@G zOWs#-(G!kVDh>(XSEfnj0@<(za=UX?-D!~2$jI=u;lCR@k@HmljmX?_?q=_aC)KaD zb<<&XpTypdif~o+OmBfxE9#^**ZB($iWZUoV*c-?O1?*HdiKwspF#nhi7)`W|K6wn zY5$Kuzoc$$zo7Q*Gh5#=j`AXL5FVP7L6IscX2YN{Uw9!z;hcvmy3E*XWW*9u6oSQK zA~(3HaTC#oV2Rw~yN01He4EL1K33d63gB%z(b1{o*RH8z$_4auKeIoUn$D-) zhq~&NfcFkIpRKm014jN|*Il0~`=+hd4L_ru8|=T^@g}8ZZ~H#&T0I=1KV22_w(Lzu ztFNeM{cIsdxq3g_h^EuqgjMmJB^230P(|Ky0`%zB=-jq?X1*hHGSV;60;+WC)=4D> z&Azv)AE&G)U+$hq?EYL^os>Ju2`2XE_TP4!{iH(e63G}0p_zXqDxIVyUzQY zm+Sqcp3bM(h2PZ5-A*vnEKvGbht^bJ1;4{jml@L(p8Xis*!#83xK>X{rO{U|h3?y` z3`|THAWr|88h&Q)b-ZE(XLLKOW2-xpsbOdIET!t>0EwUU=1unPd%?1Hg+398olLc9 zs#NinZhe-e1q#T}|48AG4Cyx-|3;=^zrfdAQ-dAMQE|>Ty^i$kN@T-@w?JbOb(TsF z$BE1Yi+^+wy=ij|I%`(wzVephwUTs)*;o@gje9WS)>P$rbt zbn%D7+_U=iHP6ep?KG%fZEa)`9Q`{P!9av?J=S`6*T-+sI}_Z-Mf|TVFVc!JuIPGh zpWt{gc<2gaSdS%ia)&TKsX$bz>wu_)x!+e)D{X#ptdiL)6V{NBC>xsKpaPhQDp;^W zZZPnqG*|Ag21NBqXfmr1?DpjV!=&q7^Wpdj}xfq zZ9XnE8>@=CxcO621H(jYje#l6Hp1d@6<)M$*H(|&s6c`0rVMG7qR{~{g%^z`WlETHp z5bw|O4m~V`_&Fv?W`;NIN=gX9{ThSy9OBM*rIkvpYN4Slx9eBDfl&wS#wtjfk-^%G z%SJI~sJ8oin(*n(ZOD|>+$q=^FnlXSyzBzsh>WZa;z*S#P_zT%o{}u-h^Os=lK0>R&lZL`PL%;f@~8%;AKG@LePnzm-!%!l zIGHdrU>C4_OMONrF5Fa0EfRxV6_&;bLRPb6rVbJ7NiIV|uC?^?RGPH(qWeA2PR*tMgA7=&g-2jJEkvI<`Y>0sZ8#tC>WIr5#w_hvxWAGy_ z6AZlgnjK|y4GWU3zD!zAy}zFpig^tY^6~gex6fbZo`!vNWKOy_+t89>0M=DOZj^A0 z@?As|J|uSG7us8eFfC?dkiM`D@@q3<>QOYk-|6|~3>4~}#&rJ=rcB!1)?leluT(Ll zJy_%^F4EZFTtH{R9uAXmxEu{l<2>cB4TFr*64MZrL>LdmUYG-5BG6FLT{eBQ)&^pi zMu$RivB5VWqQf;aAk=)-8^z1)ls%g!&As91%_P=g8S1pll`%A&T_t~&7yTnSqIspE zD)S~YNa?Pna4r?b7Vxo@3SmUhbbw~7Jh1f%qH*ja z(A^gP)xf^oKuq79_S6gxvXJFHGkPO#%V6+luuqta6KI(^lCd$5a-H%UXC;9_L}eu% zzg9~Ji`Dyi>7t?0}SHit9X!h2LYVq$QBs>!c)?7^LCFz6=!&@)T*At8?V z<-jeif*zr*YO5>6DE67OMl10N`5#pWM40*wv?oOeAxhAIA{`6)#p54snjb|66rg~C ziIIXTW$7Sb2tjMI#DJI{Wjd=n_*W&4GKhZE2qb1yLRMwvIu?Z6pw&bQ`Q$y}{?P;* z2F`6;98H5YguaB;O5O5td8w2Yi-mo$i|0%Gt zhl4hGQd9295j@eD6sN^+(W4K1;_pqK(pMrDiMcDQ(A`w7>Z7C7-!NTz$}3j*HsLQX z-%S?{XpJAvJNu$(FCUvnb(NrkJz?t^5S@of#7k(cL}b-(d}RCu@6i^$JCaAfFM(`o z&YPOHVgf|gZNw*`#HuS9IHHb5T1_Cup`I{f+MHu-2R-`n$xP37k-Ano)g;N$0$q+5E6i&Q%rlo3lg|33t$UA)!(y zI2?55NF&3rE@k^y5hEYy2XWhq+tQuey^S_`9f1|+&XEU=+jf{(I=BlmpBcA~kQh3n zC;vw-_#gFwjmMTv+k-5nKT!OKzTUseK`Z4(o$kygu&`tdCw%65M*%#PMl}XVL8X$a ze;SEOrW8b=jEB!zhjRC~0-MiYcv|INzeh!>{FJPrwIK$=CGmcLRoqm?^AabO+TL*w z>jVVNU_;<)a8EB-4(@U{>9C93y%4c58E{#M4iBss1R*&V&9o4Oc92ufyN!w`Ud`m% zaE(u7#dOdlpi2_ zdcBf~j@o&-Jr6J2eX9GhQ#B6tfF~P3Y}=MQE*0z$Xi~qtqnq2k=mf?<&NJV*01%_VVsaf61sPk!%Yoa7-A(>OVMw@dB9d}QVX2n zsoMI^%=PPT@f1aXZ$a=PA1<-jtl&2Wxah_-Yx(BYjxr*ed#l9(f+R!}I~6)!7{pCM zZi4S+*BFV#H{Lb<#;O6qX$zvWFyK*oF~&8BCt=jzes%(BXi#oa4n5U4gkvsw+^TFI z$MmVVbKvijvcofq;4u77QYrF|cqjE&I(+VF?3_k@@5l9`<@#t-0I5y<1b7<8r>UyK zpjIp7l6EC$UBL+`X@cofwuBwV{7g?;#Ai#CnUJk0w87pZ{N><|FTtUMa1QFnamsI`6oBoN|SxoNR#8{n)gN#3crclX3TB z2&-T8Bm}=VWDrW+H7A$E%nMM;<7}Z0>xYhyBo?MIO@Ov7lCdG_fwG`V4V$zaLtwZJ z5_Lv43~&fU`z!IMF-nMK4lsuDB9NXB$zE|?`UoT7n%v7w41o6N81H#F=cN-A6i90- z9DAK9h9+=a25`6@T~*B3Feo$_%@#eCywI7`?@I*@{5VC?RVdZC5SM6YT{Wvz;Pmo^ zZLheK+-&H&{U~HLcfo@Wpgp*^sK=l&dUfIWY#-oxCCU45V%9BOfjNKW(1f&K)VPc{ z9r!N;Gmf}3GCkm%nq@`--T29cUR;h8>9A*FUWem45<_g=d-h)B(*A5_+{C<4QUVH{N-+g@ z**w*y(F{SgYL!Y4Kt%v(CQE$yE?R9~59ei>jHFYQGeek7w`g^y`1IPg_IKF4H2b>L z3n4dYRqVU--_pMl;k-!I_lMDl$2I!T?>~Dun0l=`>XgTpn}&KBGUJbzGy@12At62=e4^sTs_c|4_0* ztZNU_?eHj&&~dA(h5kZ7b3>G~{l0g!M#qo)X>samZS@B)w#MGT;&)&ks04O8Gf&lQ zF@5LA*RT%Wtai?+W}@g2UF|?}eDp$DeE)JI#$tc+bi8VT^GxH3xhYjsqGi5Z0js3s zGbXjVI}w6z7wFiuL#4Q(HdE$IS5Oo4pZP6AUw)3Z87R%!NUg^QGXT{uJw>b#v6o80 z3bw5r;aIbFWmv&Bd;#fcL2C?y)n=a5D?2t{@}7>Qln91sicOkfXwg^nxjgtpRk=Zj zY1>h}jQy~VVDUHH5IQVKy-q-~-?aoLOTN|1yPo&17x9K%D~ zzj5?BJtwi_8ManJ;dvk4CT@p{XuW9mGgy}qVzH@nsr=>pY|`y7p&k9Xl-u_kZXCn$ zrtl8qf>K$u4^zkk5HH=RzZja#ASV7@8ZuiUNH{sS*FW2( z#%wL#ZQq)0T@s~@11fS|+nN|Vu}alsUq%?F3Gnqc-yP=D)N-@ct*Mjk$z@ z(eD5z5!K{bT?q2s!nEo36JC2g9epn#p$)q zYrrDUs{jM<1*_3%?>2MmlyHAJ;T)chgJ<{Spz<=bw5VlN{MlF&#Q(zmefn<_ZD=ArU~yg7 z9KpUf?(p`d`UM*YQm4{xS*kI(I+A84w$ zG*(-k9)UY|C88cs)|)xt5;})c>=Srhsa5T{B$Q|-pV;K@KG(VuiLt`Jj(X|NZl~ZC zs}XaQe?AFYnPb-b6Xiu|sBMZrs8US};CAuuJ;X$J+jGS6H7bNitr#L!P#EhNo4O*6~9gNTz)6cZQDCa6n`*`+;}T;gdG{v_2C$+YlY(Nt(J2D}c+9>vXY zB<%6el2(5<;vYuvQCkL^U=X|yIr`ziHw34AK=SHfwd9EANlHp@Vk3 zUEKCMTtUGCJ-X@#okFC~fNx>N)L}ecc9ps->?_QRaVTcXx^hqQc;otRl*K$)G(FMe z*%D=2zH!)=yz)iP{lCj{#4Kb%KZ*MiCgyv#k^h{47I~G_XL?Us&3Qpc=e@1?<5X7L zvOD;kMsv>6+1U;HqqdYD=Ov265?S?+yTAM%xF_+9TQls=a?Cgq;K5(Zq?QocO#F2=y# z&WE|a!tf`yj?_XJ@H#O)5fk+08W)7vOn$C|H>|Z&@mrgrvv;RwecdJR+jm$7oGJ_l z$}zMz`cj9%Z;a5oL0ZfReLeYEIvrf}&nbeyX^l zrI)-iWj8E;R-!^s3_w1^dn&&62pj$sBIx&53U7;^lPP~_)e5(M8vu)>HFY-uSHoM3W9FZ0Idd1jSksTl<*n7FjDsvz z{qng{8=&&}PTcc&-SqmW6x4&(VgFGr$VY7ZU4MT>uJD5W2UFK?7Q3?kt~ic0%fq(J z+lF)_XS|L~vY_hhv?j`L{Nl{QM@;!G7sg9EBP|q&zQ)35*ssw zMO*^0tV(zvk{O3gPB)Z{{;Gzu`23Y9- znGQJbK!OuA6u1>Y|C@qPq%j+GeL|rAvvla+{NFJv#0>fW{pN<2$OV25%1!$QB2Iz< zStJrdj=_R~e!>!fiW7w(;^9Fji8>H*h#>K#f8>S+DoT=pG(!UeouHC}u#$zqr$9By zm>`>Ea^nC0gTuFf1twr%;Qv~qKMpOZHkkqZ;eR3#|F61}|CXKn-`khD{%!yEuLcDZ z3K|S@vieV*sy%+)z-)|$2E z?0xp^N$7_7+Xhjm4UVqr5~6=*Jc%0q1q=)e9t?~K3?IawLJ9>32Dt^AM!*5|oN%Qu z{AX*0`LTnq^bfmqWRl8kGb_&I^fW3hbOt%=a0m*0 zDBy+iR%pBJC46nbm?VmS6{Uj6 zCI(Yn^7!DZ&)-hsnOoBc6nInZNb5wQs(MrI0*UoJxhWqa7-t#t@GU{FNm!CQV__fE z45%&dh}rJYHL8!9>x7?k`z+f&oZjUP6(v8dT#UbD1z2k>d~R{u?#fq=_~bQ# zKgt@;dX{PEj(QIu`+RxvJ^&r8QZgA4@smQ8)1IFPpXU$OocaJ5C-XeGDaGI??n4jHAN0cf z*;g4C!g&a%gD;3fL3!JMkB^_@qS{m067kIlx?f(lf8FG{%}=~IABt9?DsXp@ps3ww zh#U-bO_hmG(SSK(nviE*!?05K+PEYCJ}&R}VI3IYz?JmYQ@*hlnQbD|hzbW$%ojSN z2^LBGTJQ#lr0?F-%N_#K(F)>f>+A9)oAP$LmEVdA@pA+x-00DwJB}X^3Z*lqev|14 zJm(xf1c9H1(neegGtI_fC8e<&uD8h5 z+x?|5WFg$z0ZuELdPgLAqOPI}n&Rgdj(%q}dMlW3KU#^*_<5~S4`3JneYH5}){q$sYomD-8`k{YKUjk(boakktD-iGkHaQX7#N{>+6?t-c>yJWSwk&W(DqcHbw zAFB$|mnw2Wr-Q)SojJ~Zb+7eXm-^^(%rZX~;3HVXTvH?Y$NGo4JWOQJS@DbM!_1Tw zj5zmcd|n`sAv894ZKeyqu^RTVP*q|b30>Ar>lcxloAJV!Ftkjso)#lQxO9p6;%(ck zc&iDHNn57xaiz=_z5wHX@z{80`K`K(t?#$$`&<0iwI<2eW*uuCIfUJS5e3$pKf$rc zs1x>0spF!86`+NW?=~L`y^Z5Ax}->R|JpWz(%y;yG8h;Hh?$lZdK7=&W)vS}O-l+S zI(VhV@OhNsttE{Hq&vvs#MhbY4W|&u1u5^R&xMhrLaZlhp{q_{eO-_dO)L@iCTDw9 zX-Gi?EQAJfD(N=0Qikk0ZTLV}GZ+^+ZZ|%;JAMyf-~HatZ!SJHV19D4R`j;z|N48f zQvJ=()DSP7>8(jqJ5%ISS2ETi`(+;}@^>=?zN-*ruBM#a<1N0-4wik^t)g`GcD(tn zVi#?90ZN%~;r?zm7svO|Q1G^HC{4dJ|1O6gZtjsG`G00U${FlQx}W+T+^E=>)u&I_ zas}*dEUaWBbn7Ij8YME)k%zr8$f6jSM`(Y*i@Y5tB1 zxox$xjNc})C7I5=dL4x~vXSa6_cl4M<`tgmK5t>{e?GpxOMSe3yaL1K@rFT3ND=aZ z-Dr-N=0ZYe&qOZ;R zq2EvsU_>9J-cTSRHN4~AqQ3#}8wG-bRq=)^BUlle{k5TX2!EI1-cKeoqgU(g&~T-# zUQNdzghQ~85KG0;#Sv8|%A({yB&E^JDH3JxMSnwzb`eW8no6P}p^e473{Dg)et=YREsnfR{v^2 z7kIYd2T`Rjz#d{wl7R_etowHHY%O`ve|6+Tvz2JqPj+~;)4Dx>nc{b7UdSR{o6v5z z7sJ%#mSdnDQRaGqG&LJLNU0)Ra>Jm36De3j{aO&oe%IB*7pD)x|4}K>QLMn^jn9pq zg- zZ5&{uS~XQ#dK)fic={}3 z%NjY8!{KmHUT6+fx?{ak+^J_mI9+6H?)2)Ui@O`6IvsK`p3YjfvLx8#a$Ou`P6|2n zbijTwx!AhZb1tCy^8gz}fq1oz>cf0}q87jBO6kuR|xphz4wG^tiZ?B&PUL z%0X4A%g5Z%9&GU#xFO?x{H)yD6eGxXsP31(AGL(HZyfkcf%+B0L$$a#9l^hNkOFB? zO{Kf}v2808T98)VpE9S1i2*aSE#5qAqavDsqMkb4?Khy!Q;%w4XdnE`S*$6(P&G@; zH=jzlIf)+dAPkpp4}X}aariMrPqvzSszvw-VKX4{+UIs{^VRW{J7SUrI%-ihFJ0S{$dw#YB90>UtnwT<}KxRdHI;1aM-r!?jK*&fR}!zsz&9H)jW%VYHA zPS1e^;&EHe2xnJy49MJFe@&_Tc5}chz7rF{?t}{n7{ghu72<-l_z{9-p~q&7c2UoA zs%kJ**}!tB8)i~b4Gv>uoi8oCmVSy_VNCO_F{pT89U8kDZQOnruYsL71jmhf0cHJ5 zUK)5GGM;(KcC6yJDcH0zY3#vLCp18@KV-Q$XqVZBrWk3$m7orkLC29+(o!pJ zfvud7%Smh6D=queLRk`8^e(huaz1RZ6Fg}KR+ZsEP4yd*P8LV3$sv+BD_h?#cWepC z!vVOYhUukI8t>3J^@=iy2u+{eG|#!p6wSzm3Cw6P8f3V^K-wWfu!#;$So4up5fi|? zf*4p;_tK513){{4?0)~3UwHCugl^5$7M*S5eUe?Wc|XN^gdnyvecaSUDmFrSz6t*f z9U8I#%JH`f$zCPrM*M68%trentxXOdBI>q5-`r|z7>l5nz!w_Do?1#e>34U2_7)FG zUa?q$eC9H%U#9-sOCAk$Yq<44ce{ZSvggRTaf0>0k(nJd-tDcG^BK93s~@8sxJn@d zGe67`*Z4#|M_SAP1das=kfPIw%zT6;;@suT&tGdEI`&Y+1mT^2uqj(`eUQy9-X<5B zK7KEw)d_T=v7>dLu1_H-JefG0){1-$)58{iKbn|bi2`lu0|$EyIX0-MtLOo0+pyS5 zQYLRT{sp3Gr+4mWaGjl)o^^_=f!2*N{sc!Q-w4QvBKC;LpsQ)}8aiZhX3Urawa!W{ z_;{ytAp@Y%zq6cTZOoJN3yO}uG$d84dTpbdxFAw9Aqp3Gp$V!cYnBs|wiggRS zo|>K&j#~6du6I_ST&}UDF3gc3#s4B`h=MSH!3k&Vlt@=)c? z@>mmf{_I9(tXPC@p2$r;%9}p|SfC79+pvjCAgNc=_lUYSv!#LNZ|@5lrcSuLoJ3B; zth!a|S%jHzT%J&bT?8L7&I&kVJCPIBqy6E^{(WX#LaT^Cq+A}g{CFTgANV^i8 z^`P`fcKi9Y%L-n2-U^%Ci>3R%B6@j*SSM7mT^siloO!Y1KU&oxKy0{WBoDU@xsH4D zA{dik_T3ZmPrLeofAs~53ljLO7idYhSyMEEZH7vx~_(FWzL++Lfk45bMh%P#N7s^b|i4`L24aBFDFft)Y|?!kgJA3~4=eh~fd zV13;Xy?4(B0fG&`SXF{A-9`hT9mCtLyFQ=h@_b~Syte>2tPHE$kN~J)NP0IRH2|i_ zADs9RnW=kF&WVVr-K1dQ+aVwR1Kj~}1$FA&oMRuf!2=v$tiV_!>_7bE^q}Z%DEZ{q z*KX6V-|>R@`fNm8N`;Zy6pd|+_P!Fr`E1-P46#X#tW)&#J=FiUF_r)IHf7s4PiT!f zyxNOUSP#H<(Q3>-O5n5dGtumQwN)BDSkjV^wzzdeDlI&bmR061>E|>?RJ~EVU1#?3 zHtX4EMU2eF#H+!@+T^L~xE%k@6v_CA6x@4(+p zBLKD8^{0@tMfgdu<-k%b#G02a4f6o*0LQnJN(q>`q!l#f)NaL8!RvEtzmrfsHI%h#DXGT!DN*g1>X@!M*f@+gunqfv|!&ekL+xsV?Ki2>ngTjb`Uau!+P z(ZG#hmR0C22Ix;>Ugsz$^+W@0Ta3)WHwx3ky8AXCE%0Bo<>Xsm^Q>`x6z1`wH&#hBw-a@JT>-()q1AWhZps9uce*>#QXrNSO=IKvpAfW^)vRruZ7_-iW%>T)^(I=7Q3cF(bpJq?g3 zD$P6;^7Fy#_i7FUMU(n!P|y~`*j{usB*yMBHOIVzhYz=OsyhgQn@rX1c<23!E*!Z1 z+oHna!_muIs;~{AY6~WeMY_uQ2hL_Cx)T%na{QrGKeun7ClqN!1a+2^UlhK|QQx@% zzvP`7nFd{{Or~ZvGbOQrT;0`;{|4}%@0gZD=E7E&pN+1^FS+$@7sSl{@2EP|^k ztv{2uLpF2yNzK>BAA9-0)XoZ@xvWMbTb|(j5h~JN>leziF0ja9UPaczyp6{$6rYj4 ziKZ0Va6z5_u(tQ5Xg%0uCS!7Aq*`VErL|=9JkvVcxyBykZ@!skga_FsoOAncVA|~B z(jNh1RI)H>{j(Vv_z9sb2ML7%1_lNTw*PP3JU)R~M){`@=HY{`x!Hl!fAi-5!owQ@ z3>@kV5)ADBmSvp_HFO=U&lw|^RwU0Lcj2w{U$GKzr?B!@zR^pv+(#KATf zc+rjz0!Hm;TY*sTxO7@B;O}K)FIxS{4cK=uohO;3HRmiI!MW|8XOwSo zlnIl2!a%mVoo(WfFnYyN79uHmgpYzol~qV$V&YF|rGugjoB^xJLfGHhG83YPn0;6U zGI^;vddIP62&lgwHxKZl-CjCfItoY+*fNOC1OwD{2A}F^5zg3C(4&gRWwyq8vNfMA zV~-{u5lh;tf(SZj6elb4QV+yqCl?eHeCSW0Bmi)`5-S-Q^?F#t0yG_E7qvwjo4Kr? zE?*G_(^x)FG!WveBH_iHt%EblY~@qb>I*W|qN46GYjDg}K3tAB=vfKl&#_agtEz|> zF%a!sW%g4RQl@qfe-@P+A%3=#vXGXgD_{i>*}x7?C`+C=>d@KCm*OcM$1Z#iUw^!S`T6ehHQeecdb~L>RVo ztGC&AGXs<&jYWa+o-lul9bP9sqOq^hBL~j??S@1RA5La+WGpFS!^`oH=B|`h!E58x#>0$(QiE;+zDkcj25pY($2P>Ujv!8JU4r3KYfYQmssNm_cD_CpR^ z+K~J#&RZ#Fe&d{56^fiA7Q)&j>;Vlna25KL*yNsGxh8G-dC8{9v3gq$lNF-KFa$OI z+(mxfdx%R&^lUodK_a9OVi{Q$cUelO$Y*wAo zEHk;m2fZ`pwHTs#;m=9A1|TY_QI;YBT$YUV>RzSnz!)z+d{dkuQ{rT1y=N05X*RTm?`wQGFIg{k7rrJ2V=TClnXyL1 zdC0V6Qe76(cY0YG_gmt-wNj6&+^Z|A*16^cD1nwyJv%e2-h;7RUtp*GP71iYA9<^4 zA04ZqE;UWq*oLE@OnlqaXLb~1_HQ>KW1hEnprTNJW}XxIwb@Y1RJnpb;FsWBRGF%< zrlXLK1a7nNHX}KTVvy?7)tMc3kX>O`nH8LCJ9V5tflHGWP|?}?!;%emLyQB3d77sr zU21w>*p2JlYEV5m12CMqhlD}>#n&fkCJ^b}hH^VU6J+iH_KmMH=}I59A|aEIs*BaS zRGk7dn|n+L49m?&t!ZB)cm#YRJ{`s{VQ%j_LTHrlSi06O=Z9ejt3oTOZkUjE2q{y< z8F6(v&2eoLiVM8#7yWguvjcFM3B<@%jchNHgO9eJ27MX4ci=7LV?VajKXn}3YJqix zRHHkLx?D8zHj#DGO>Qz$G&E?xJO%5}zFMein{iEE(}6VvnrD0e`Cw{_Y@#{+7x%7g zBW6@Q+vtwSIvG?dxQL$w|Jb49kI8o0* zd2u?g)w`0K0tiM@PSR>%&Zp~`-DQ7R_P5(u>S4WB zTv;)`pqeeGO_8|O9`SGMa`U__>ZiI9DA?zKU5!KfT6iuMOH zsN`Nt0?m$xAUlHzr=H5&jY)Q1im9+sS`CkQ#jg_g#z^XS)yB&?1s8`d1T4)b_m3{G zKUxfJH6N2XMjIMsDg|mPc-NBXk5G9?Wmsq?lZ2e)n3j@4ikd`9OZT&U>dYE7w${f@ z&qeCE^hVVoM-;}<*?m-uxjIV~=X4ZRCf`K{0RQr##nL|Gb(G!`%KV+jmpr0mHS;04 z)J*UdduWL1-v>1ahQE@x2x8iyx))2rYYd9A4!=^}V}>{Ji+l>X7Jd)iSr2qA?L~jh zjKzO9D*jdKg8Gk{9F+%_p_D7 z4bZtSvV7K)oBwzubz$bF%*L4`^j`P9zQvE(k?~YbOSaIgxYkG*>AjA({jVVl=9bLUuAc4(pqT9#UXZ5YFJ=#gk{^) z&Vnl@=`Uk&caB4EhzPPBau$DzZW@U^i%B_xeosup6xXkw{>@*3?_V|_R<61qDyRezY|Jn(P;%lxjHGP#SxW-JrYZM7h(LQACI;Z}d^1(_%Mjmh({< zXMczJAFTxWrQ?9=#n_Om|1nFx;%447XfUvCWYC=$0}%F)RsJvjzsyq0!D&$w<0Hq& zB>~k_cHjI9CxZ%Aa$IY_wM1|UQvQmEBd*%$Q%&tAbOhA7tlkK&cK%UyQiF%O^qgbe zfHmZTKYUd7F*;y!VmKP727f@OT1okwlX@a}l6A5T-x8W25m}*3LIB7#HA^VteRn%J zFMS*o<~vZk7HXWyhI!0HxPC}v>rwaZFw`>={uGqzHh`&Qs^vk)d>%PJ9u&&D<2YGq z=HScjopfHUVOnL<2RdCg%ctBuo;#xLma*f1b*f!oR`Btu7#O)R{(>OfYHx1E z)9P{~Qav;A1@oX)=K$O%eR|ZZw>&<3)?l@X^lCIdDm4AeHFAX4rhjW?DrpAr?A~0B zm@`ohrdh8wD5qMk>A26W_++)>sZDK8?#?iYTHZp7FQ*C(p1g!^HiuF?952*Lvs9@+ z_kF9HV+^v0YAomMar~O4CZ#653==aywBBXVWFeqf7o-8Ad;<;?Yq?QIvhJo|#J}xw zd!>S>^1aWc>$^=_aQej`3SknO)-@n$4>LSxVfKv4Z9doFz@iV7X~W;BOe zUpsR(&eQ@ON8 z^K87m`E7ASbX7$(AA7p0tT^O}W9>0LzC?QCT(CnwE&w!y#VSj`F?q2?E;}u(wHIPU zRMry7DTd~_x_^yQP*T0*WzfB-xa%#NmI+KSlO;*#oxiy6PU*J%Sf-iPG-B$&*20yc zwo8VbB4GZ_yZ~2)LvELE(5Z{9NTF2PFE>r%5`KemWZk;!adO?b*Tw>uY;OuQoU1!B z^QH^*F9DRiyfBH>YMbY*4cwtmlpq#%WAkVla(phFRzk44V=yRn)9qsE0KY!XFlGTp zZ05XY7Ma_?_v@3)MC8u1zQJ8F7YyuHms@B_+=1Z|0hpgEdgxHmXJaY4kHMTpb2DxV z#>F4jF9c+axKoS)jn(U0x_;N+*bu(DvemXcN&#A&T8tfBT3tP!*IRC-gfEY9`?3`^ z)}B~;1$FOJ2=fkh+PS^haTg?(=TC2E#}|<(DfQjOF&N`z33OpqB+KkBochw-`SY+SS<=#^wTV&&UO?NX00g<2uNx(AmYkwC_sidVYpF$FI)OCQ;0RHN z1E9F^I|F@kxh9D_mDS+OlgPwVDD|smGd+$Sl(L5D=@(A0K~|L`@HVt@^=tK(+t4J}0=KY{X0v?Q8c5t<;1JjAb@WzA;25&p z^zhz{OZdVY>JhatPgffw&`b<(WGZzXS}WSff3fa#l{GmZyk(0r2QxYY@@c)B0vN)T zt8m;{k|o&*`O^5(rFjauC*K?p{Y5i&@KGmB0fSf_tg)^5a9@8tB+MZ4lfmZ-m%3&A z3%K!%%zZ#sId4dUg2r9PSEw%3K65U{Eh^tq3-K++CQur5?p^hum* z4|_tE`GSUpp+YJDEX8@y@d4iIn9$L?efF0bU}L>cgN)D??R(4-;+ghly#M#R&U zS;*dcgvAGTbk6{7)*Fgqqqu0UNa3`Jgi~d90+ERO@n)1Y@Of~?tqWWB-9*pZFrB}_ ze&CR9i;AVn$}cSJ`BD&)sowdG@#%WbhF^{Sx905gI^p08@pSN`KVRygIDkv7dRZOm zuOy*|u%W8tZ6w0*_dwRviNRi_UgZGC)Bx{XJ%nBU?`~i;aZ&I{6S)|6D1A{7iRN94 z;80fE-ZiolNyjqog$^^8-hl7-$er@2NBb(qpIN#-+scVbWAn1T3TCELq1qEqQMe3 z!{hhzaQC=ceK7I*CmQK!pc%;2HQm8SxF}BI?5(1rGN@rnPQha7slrZ`u$7IWSk~7@ z;9sHqp-W#~%daALF+rpwG5xpc7sH2x`N2zu(jP7HoDoNV>S&HW2 z_rc)gnx_>|skrmj58Tq>wAr;MP@DeLT7@w|fjGNaOv=($h+#&5q9E|R;>~(rIvY>H z@jQS-hgaUDo5u3gBEf#)+T7C8p+6c=ccZz2;-(^j|7U2XC?gjmzb;|sJTfU^V~Fu6 zccK@=x_Vet3Z9oA*0vU1dpKG0yF$#DW-b{P!7tg@zTILuZd8g70yy~Xo5vm~5A85r z4t~Kx1cV{BL1+5i(g}bc(xy$nO~QA|lEJw_>DTzVL)G5riv&Jf7flRH6qFKif1~N? zy*k5~0r>O&4qcp8Q>Nyz6r9b49gIg){8SqR@a8rn-`7A$LU`z*7QD4kC%9f!&Y0^i{?F}kAmR}9+fP31rTvQrpk{vjyK z*Zi76^itENACJM7u&SjtL8g0fI=CbGT}dyBI$l3s_bC1`{v8Gj<1nTN)PJ1w5!gva zcyl|r($f!^c%caPcVl=hn$&kn)36b+tmX`+NbZKFNk>I`$l{-+USF&-0mafT^)V5n zE^7~=uv>SS34YK=LT6_Lw%uF{e9kwkufb#jxu)Sg21#(|Y_w1!8$TowN|&~3%3@?y z@ToR7%G&v3uNW9!;)u@di=w^x#rGRd5hk1z$Bs*pxry7i=xHSlD@ph~iWu ziPDCRZBSXpz=2pEBbcguO1*-8OZB_=SHAHdwIyJWhm`Y<~Ohrn{^Y3(2 z{w#n)^&5F$MrKkZk~sJu6=j)T&YeTlrQqyKrVY&#BC95^WeH!Ci8#*?-o&v$r@2YQ zkYUR;Mf5bYEROl(JKGv%A`3CHoSe^B8t%7LqJxl|fh43INpiXZ1bm(u?A#`!Ex&hH zkM)s;-Z1^{haKf!vf}1Y#Nj9msqr}RV_rb)wn?4Rd%|I$ZNSTzf@2hsV)4f?EzQMx z{82Moy;H|)*stwLFPi4gTK$i6>`@ep)}9RXVx4AGk`2_Uea2$X%cxh9?APMG(rbLf zg4)+=L>rs>GH?j6@er7`AZoel6EtQb!atF$Z*fpGr0UAFOB1+XRG7(BNyw>-<>`S! zhQmmPq7$$yDD-?82F<+U>3}kN5_wcd=KarzoC-8*%8VG}S}~c8xrdFg4x$FgaGflW zY8|nX*xy#cck82*(b2>dcAd}lraZEl7beKj?YIeh=n~kJMm<}alI};mWSb=-W?{Sn zINCyltWaAtYra}6cqk?{vyDSJ+8bak#qWz;M#BIk>^Q=mYlliA0(C$qs`tjeo9E96 z=skjFeVaVUQe+CYay9m}JujZS@Z1CToOEx5wno)qC>cTpU5>kw&5J9dwiA&aWgmrP z6VHKfv_bVnjb*m^tc(Y23#YO-eFjHD-GlGlUW9Ej0e6mXHXPWUuU+qB2C~2)ZkLhA zXBA>+IJCg~cK=>@l+=Wa`nH-wl&+x|tlc`PMlUJ%-$NU7`W7LBZy zlu;P3<52I0FbK#r%i@LENjLdq3om22Qc~|k6pkouGtXR1hHWmtSDpjJD(n{Kkn!v0 zVvTFNq_G_Ny^i+1Vqw0)3H|`?Muz25YYmFk9`o#?!2|3_hPDX7(d`$YC zF7>66z>-L3wQ#9Mc+nEADFG$DW3cVDAmD zV?`TK8ejrpQfxV9$s#~D!lrAlxZ{gF_W9G$9JW1nLceTkQ=4nzP%(Wx23k|mTNq+p zIWDPz?U?CKcQaDK#sr|j&DNZ(eEjPYf^_Ki0&|V{F%YjMNWLkXO%|%hL+-#-5dB91 zy0wlSiHu9GT8R#Yxz1~>;Hbs24$tLZhpJD>`{Rm1SKqOrTt%$TAYV`^URgLgPG{}W z-0qh$GHoQ5=@v$v7^2S!nakxl_kFrepBkP&G4FT3ZB&r?KSw3nPe?h-bt^J3*DRZ!7iA~Bz+eg-e=E0cMf%=O}!_$fb9qF`hpGM~vDwB3?S$##M~h50j^I*ZM=a+oRWRZjzE4La|g zymFrh>N;01dVGPJ(0M4WkOAJRptzp4ajt~}v~nu{ZlOC=;Vs_FYqw_^6RfM58R8E} zn(BvLmfMLwl=o*v?-zgTN95<7&J#k%#|{AZdq8XR`zEkhI7Yn&2JVubFlLNU${bxZ ze6NCLAZmsj=#k=8BSWkO)`iskpn^oeXwdWccy+(C)8TovzpPu`V0_x)yT-;n_bPmL zec|TIKT+LJ^b0cTek(S5wRSm9$Api7vTD=6>LJE^YY-Bw8eN=9_pFw%5_*kaXJNzV zT3FDNfelzM%!v1W-+m?YGH>0hw_bo_BKXan5hr&I{>*G&i5Rdorf~%7f$1hx0(MF@ z(FbB{7sNWAw5cUXX3Ld+V@8viOb-iuH>@`|91Oqoio>rMhnXMrmvpC()NoO$!n*5DTYl&X7q4|mE1 zAF}SSIgu|3F89T*h}n>+a8ut@?a?+iWyl1S+*p0UVG+-%3W;Zl*5pT>lild8vUN#- z?&w$=b%m1FZ-1-cG~Yua_%$}ie!QQ?8ccu9oNOvoPJr2|Rv6zKv5utRBHH~8n@b#o zQ~>lQt$1=hK!Nja8yPj7PYmj8esCJIF_m!%R$UqMa^7e*JqGmXQ9>@2@$q~mw{eLs z&2(Kbooqqne;J`ZsealW84I|(-@T0&;>USwmt2~sTRD%q<<3B%Q;Al%$t|8CM* z*bIU>*4(ni6J+Soa42sP4-I2B_jxECh6maU98otEL32Bc-q8MTIK=FhlripOq(a3W z34YTN63-L64L)dEc%Jc?f<)!{4<*e|I|GkNRi{nu?cD)6vKYrP4=Ehg2pA92VM_bp z9YWJyD`BN8aRb~wzk2DgOiz~>-crI;w@1nHb^UwdXBBC?2JQg{t}sEwA>wQfKVY#e zM40~m%&CjIF}Cz>hF5XXm&dPpMNqlh22W`#ZcXy=Lk#Z>eq6NPSi$%1b*d}PQt$Qr zZ|N1y(8$?rM-MmM`u8%*#c{OD>18H@OIz*bFIuWndfyFz^#o@lghbx;Bq4eEWk+)JjU{It6;axSH1%t;1%CctMTV^$OAIq66vO_9-Z;nK zqUfuMO{3o&T{US=`q)>va%&?8I7RQ(UyJWoHmu-DllyZ}=(tF7ULl0Z!_CzcxU@~o zM9LU4*m90MTUuM$V%Amph>`wS7V0%_IraSQT=08uNcfgasZK33vNIQk>IYXqfxcVj zapz69CyrRd>`|h&x@1p$b#A~^#Q=68WTJ{s%+&%TO zYlLsX<@0xAu@E#e&3aEUhXOw_$*3WsKOL9(K4}fNPTHc3j%_oxqChZd9hr0##W25) z&w%DV`ZI_vKmxaZJWeDNi441KMugc7=fyOXOrt?Lg7qC-T!1ck2OlW(^!;$CX35oq z{yy=PnFN({mtJA|R{tjI8a;Bjh?d7#j(Z@hajoIb_n2E)ZT<|_9!cD8Kd%I?dY<-T4s2Q?n11bqaQW|bL88=-wQ1F zEA!QHc#)DUPgFCR>a|AXR{~AI=xN#D5XZsU@5s4M2mM79O`j{3E1iB_O-0IhV(K6B zT-{cLpzso@)6A6Gnqr|tVBS}{1Q;02f70=|LC$FyAn9~`h|~Y&V}s^0p+Ujvgb=Z!pu%((lK+a| zU|^*GDPIr;13imTeE9+f8TNnMf%r2BAx30C`WccW|J4=1z=;1-nxp^*LQo=u`d2FZ ze@6hDNeHp152DVrfwVLR17(^LgPJmh;U(R`z)W3DY#fFfdR;1Re-0M;IbJ0;HY82CWGC H-%