From 7e80f40fd45c73bfbabd099ef774fc08fa1bc528 Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Thu, 17 Oct 2024 18:20:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=20=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=9B=91=E6=8E=A7=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- watchyourlan/2.0.3/data.yml | 108 ++++++++++++++++++++++++ watchyourlan/2.0.3/docker-compose.yml | 20 +++++ watchyourlan/2.0.3/scripts/init.sh | 15 ++++ watchyourlan/2.0.3/scripts/uninstall.sh | 10 +++ watchyourlan/2.0.3/scripts/upgrade.sh | 15 ++++ watchyourlan/README.md | 20 +++++ watchyourlan/data.yml | 15 ++++ watchyourlan/logo.png | Bin 0 -> 20627 bytes 8 files changed, 203 insertions(+) create mode 100644 watchyourlan/2.0.3/data.yml create mode 100644 watchyourlan/2.0.3/docker-compose.yml create mode 100644 watchyourlan/2.0.3/scripts/init.sh create mode 100644 watchyourlan/2.0.3/scripts/uninstall.sh create mode 100644 watchyourlan/2.0.3/scripts/upgrade.sh create mode 100644 watchyourlan/README.md create mode 100644 watchyourlan/data.yml create mode 100644 watchyourlan/logo.png diff --git a/watchyourlan/2.0.3/data.yml b/watchyourlan/2.0.3/data.yml new file mode 100644 index 000000000..ab4d657dc --- /dev/null +++ b/watchyourlan/2.0.3/data.yml @@ -0,0 +1,108 @@ +additionalProperties: + formFields: + - default: "/home/watchyourlan" + edit: true + envKey: WATCHYOURLAN_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8840 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "sand" + edit: true + envKey: THEME + labelZh: 主题 + labelEn: Theme + required: true + type: select + values: + - label: Sand + value: "sand" + - label: Emerald + value: "emerald" + - label: Grass + value: "grass" + - label: Grayscale + value: "grayscale" + - label: Ocean + value: "ocean" + - label: Wood + value: "wood" + - default: "dark" + edit: true + envKey: COLOR + labelZh: 颜色 + labelEn: Color + required: true + type: select + values: + - label: 浅色 + value: "light" + - label: 深色 + value: "dark" + - default: "" + edit: true + envKey: SHOUTRRR_URL + labelZh: 通知地址 + labelEn: Notification URL + required: false + type: text + - default: "enp2s0" + edit: true + envKey: IFACES + labelZh: 监听网卡 (多个用逗号分隔) + labelEn: Listening network card (separated by commas) + required: true + type: text + - default: 120 + edit: true + envKey: TIMEOUT + labelZh: 超时时间 (秒) + labelEn: Timeout (seconds) + required: true + type: number + - default: 48 + edit: true + envKey: TRIM_HIST + labelZh: 历史记录保留失效 (小时) + labelEn: Historical record retention invalid (hours) + required: true + type: number + - default: "false" + edit: true + envKey: HIST_IN_DB + labelZh: 历史记录存储方式 + labelEn: Historical record storage method + required: true + type: select + values: + - label: 内存存储 + value: "false" + - label: 数据库存储 + value: "true" + - default: "sqlite" + edit: true + envKey: USE_DB + labelZh: 数据存储方式 + labelEn: Data storage method + required: true + type: select + values: + - label: SQLite + value: "sqlite" + - label: PostgreSQL + value: "postgres" + - default: "" + edit: true + envKey: PG_CONNECT + labelZh: PostgreSQL 连接地址 + labelEn: PostgreSQL connection address + required: false + type: text diff --git a/watchyourlan/2.0.3/docker-compose.yml b/watchyourlan/2.0.3/docker-compose.yml new file mode 100644 index 000000000..db6951f69 --- /dev/null +++ b/watchyourlan/2.0.3/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true + +services: + watchyourlan: + image: aceberg/watchyourlan:2.0.3 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + network_mode: host + ports: + - ${PANEL_APP_PORT_HTTP}:8840 + volumes: + - ${WATCHYOURLAN_ROOT_PATH}/data:/data/WatchYourLAN + environment: + - HOST=0.0.0.0 + - PORT=8840 + - LOG_LEVEL=info diff --git a/watchyourlan/2.0.3/scripts/init.sh b/watchyourlan/2.0.3/scripts/init.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/watchyourlan/2.0.3/scripts/init.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/watchyourlan/2.0.3/scripts/uninstall.sh b/watchyourlan/2.0.3/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/watchyourlan/2.0.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/watchyourlan/2.0.3/scripts/upgrade.sh b/watchyourlan/2.0.3/scripts/upgrade.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/watchyourlan/2.0.3/scripts/upgrade.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/watchyourlan/README.md b/watchyourlan/README.md new file mode 100644 index 000000000..9b0b90cdd --- /dev/null +++ b/watchyourlan/README.md @@ -0,0 +1,20 @@ +# 路由设备监控 + +轻量级网络 IP 扫描器。可用于通知新主机并监控主机在线/离线历史 + +![路由设备监控](https://file.lifebus.top/imgs/kimai_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +轻量级网络 IP 扫描器,带有 Web GUI。特性: Translation: + ++ 发现新主机时发送通知 ++ 监控主机在线/离线历史 ++ 保持网络中所有主机的列表 ++ 将数据发送到 InfluxDB2 以创建 Grafana 仪表板 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/watchyourlan/data.yml b/watchyourlan/data.yml new file mode 100644 index 000000000..26a2837ac --- /dev/null +++ b/watchyourlan/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: watchyourlan + name: 路由设备监控 + tags: + - WebSite + - Middleware + - Local + shortDescZh: 轻量级网络 IP 扫描器 + shortDescEn: Lightweight network IP scanner + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/aceberg/WatchYourLAN/ + github: https://github.com/aceberg/WatchYourLAN/ + document: https://github.com/aceberg/WatchYourLAN/ diff --git a/watchyourlan/logo.png b/watchyourlan/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2d5ca08d8a0e8e93ce1c65924a6f1f44b62522 GIT binary patch literal 20627 zcmZU*bzD^6^EiBW>6Y%0P-zg54t0?hB$N&jknXMpC8fJTr8}f+0V!#bZjfAJ3F&w) z@6Y%5*Td^Y>^xl-WuFA(k!^XGk8aaPSB5js6FLTD%@0f2;irglE_0@vHt>2v5nDEI~OLFvb=sVF$dInB&z(BeB>3Z&}Kq1`XQ%3#2igU zhBWC_4n-lvD)OOah!lnJs0Zql>klNX%Pn4D)OmVM3?9huqN_x)g>eaAyvatQa?oCe z*w0ve?W);@y4fQ?Onp;QX`?eDB4#H5C(9>r>zO{jWEhVaaY6ET9jBTTjN>cU^5LX3 z-1(dQnB&vL_L<(-aXV+2lo=M`aylL_@k4DBYzsZ9#slOUXp3~mk9z<+vjyT~m z6ucM35Fr=A=o5+B(v?o)reYAP>=w2;^kEPR=2p$_z4fI*1vBCqBWD(qT1%0*#i-=0|0Ru#Jt^=aBNYSu*_)QXFw`1v9sy8R?^8OaAOe zkHPMzlqo}_7w+usbd}UyR@OSU_$9}lllsCVCyj)UNFH$j%q-e%^F3Z8%UpWP7n2ST zr6`R>NJE>4ABFS@2r8m1Om!?x=i6`epY4zZ_MtQZ7~xS_V%@{!)%T2s*eyT`)*taG zHq-H-72e6}-`e|m!QK>ECQSw*BsjR_K-iDE5S!NRwF|`hqyxVLM9z@;@x)g^0)O6g zWhw~D=|Ua|OT~r5ejQ!eIXvcc9j)vr#-_zNDmN_qQr!KH8mLQ+E z6{K2hI7cHsKviCedWuhJs?a>l8t{kcdaQGyimE-$zuXhy$`tFQ4v8st?!`^7i`2J~ zG_>WasNw5!eT0+u7;dB!o!yNwfn;7|w%sQvtA7N*FRw`wQP^v{miVI~J~ z66#z}U3_kb5k5nU$sC7d!3P%@v*nrAlg)%IPHvH+pCdvVN zH1;;{o0vRrdWX7`5&ef(z+ia4#XlfDair$)OA{$YVVl#?zQjQ!w#8px#8CnokLZG z6v%v-ItK^v)XtV@#%pc_ipB`dZyIJ%?{?%oHo=X`M z9AMBGY!ZjX5L!2gA`kPas(sJM0$5)-_6;I0pQIYpOfHJyG)lkYj`#fRl2)U8QRg-4yMB+*p7S zYoAxd`eeq4KX}+&nh04s@}W#!x@{egyq#Lcb)^WD-7@81uWT!Xt}SdBjV86wp3;#6 zqMhH!pGmcbT_7IAEz6HX`=+U;cW9+1P}uG}Nk5%Lz!^WQg-)IDjD9*qA-R~_$Qx@171Oc@~%*Ea7yjHNqyhai)e@b196b=-m67b5Tsv(Z(zaV zab?iC4NQ3jg3|+P^eu>qHz#!mt}0SZZIu#B=`2U3-byjmpYA@yk=M)a;P`^b&d0)30vDh&vBRh`?F7nc&8VoC?b>LgaWzA!b&f43$U8WD*r zgU#JOV%}tZ&Xq(9GA}k%z{i=X!@FF1?xZ1#x%&+SJGD;8jUm|nJM}Fy30<^_ClVB` zYWb(Wts>y_=i131wa%XcM$i;M#=!{Vv7|KGQ~f7~f;yjLFrkBt6K%M#ufbQsV+IAVIRTz7w zgCsGVp8N}7J(xi6Fjj|P=lo}C{IE0DL1FfZNUHO-tQc&j5`ZXub-`sao}HYYT6UJc zhwCcBZGJHhYG>sApdj?YgL}6(QsmP^BNfrc%dGCp6|7gcx7H(@oYsQm`-Y~%#ARrv zN6LRY*Ew*nO6)aDSB{H5|D7nNHwDn;>Ho~f1;pXoJznJ13mz?w9bC@sNTxUWq5xrS zS(Sag)LG7__E6Y>AoBRCuJ%-S>iIWi7JzWRWhURsy8&aA2pmjbN&n}o@BU9Vf5|nW z@C~G}vQFsK178|C><;P|E7Sg&Q;Xd##)c)h7>1D(m{eXfa_r-0XA*qBFQlgHQ_052 zv%T_9u%Hb6wZ~$f>%7kpK_n579Fj@6CiHUIn8mfHC$`<@)bW6tnnC0@?rS4{LFJW#) zX@f#AUiQxaR6o-G2ftxhJyH|+WxS0k-tpn$VN*~=XrISIGB0Wt)H=!XPnxvka1y<` z#Vi|Nzo>P5Q0-vFKPiX|Mg8k$cE#j{#^~TAy0dn?l^Ab#mO(M77hIxx*-G~Gr=Ayw z;mU+@=~x@R=W<6QH2`H$^dep|da1T{PRRhPh=K!Pt8~fqt+i;t`{)3&DmQ$>_|0_6_2j#<5n%k3uk2DWIWF~Rs z$5)!2oIPtMBzeUF$Xe-HQ&JCD7;HWuCN};^cA5{$Jih$X=g8oSFO@ctH}9;^8<2F& z%ucMP7xRIl8`%b%*m#jZg!-KB6*c{}EG%$4qvs<~&o|ycDLI6;joQapnPDHTYD?@JS zsdhG{zQB}?BmK|Xz6$gPmrt3?7xO{)3jAi&>izXe-M_jS*9TL~20)U1rGh};8GQU+ z8Dep(GGaMU-_wQX5|B@LWZm+cYbUw%de!lH?+tSx%ZiSAmg-Y;1rI4l(=hL(pSO2j zm=XdfOP{heDwpSO7=Oep-EC$F{q=o0Ed2NEPV|8G5|2S=sY@5@P9D;bTbEp+XT9`3 zBJ8jG!)gp;9q~KNmLZUbMWvrDioz%h!><1H;C@(@N^Ma6eXP*SWf&BVF%#Gex2NLr zIN6lEJmU8{yK|Sp_}aqd-&~p*5+Gatz2QN>0vyyIsHvrM=1bVGUbGz&j2%+X9a8Wo zh7~DBoS{cl;p7V=saNiHTmA-Dcj^CFd{68Clm=Z)4L);kB2>4GA*YsS4@fO-~K|!Vtd_qjW_Kl$*Vq#tEx8tpKB5PKQ)9{t4s{Rt|T64EAySuQGLd@AwtlIIE5I+%09{A1GlbFw^Z&mBG0Tz)+VcsxI@+fE*(0g|mS0H>H+vckp?I|v#5})dH+C7+Zrubfg`^S@R zC66SWB0BCOiL!0FZEQwVba#EQ?~I5y=GyL_>S%m)V-y)hw6~}s-yKxol(P9j7!1;2 z8l-Ziat#q#a!snNoILt_xpXw$D*d6d{`-eHl}SN|-?H|`v!2NswQDu%PZdUfrw#Lq z#^(tojzpXFq|!P!5u7og&Prpw6wCY~aO| zXlEzy-)WDjz1?{iqnXn&uOrV4--&-9o6P1yK5K|=2(ZPQsXvl4eaaX~S%mxRlA-yM zbaz+vXwaC>HGqYBU=<9ur5lFd*lFE0*Oo4{4d_xd4--?&wDHWg--$N4OBtT}vOQMb zoEN?oh>T2&BX;ER8>9<0*L<_4Srue6g;YR+v zAv?p}9@V`4@xJU%ep-w)uX_35BVQ}o`nz!dV#jBs$ZP89 zG)}&=|8AUI>uQN53S35ZrWdStk%YJ3>+I(qJ;w5f|0O*`A+?a(L*g^7n({BdA!deJ zTRtd0wh;Qaz09b_zz6cx&YFlfO+yc8lT3pU&kz37ruL`{T2bq z_spEst-HSU&oGxSyCQVAt>J)Z6|$#VxG51)zTSCnrSkUW%|rFbXVszb3ElXd9y5S&})2#!N??K%JA;B zTmjmPVJZ=+`1Q}1kk;`EW(@1;vGl)(S%PRm#Xff;bkJaa-tCO2^1>vpMBXcf+9Zb)$zpt~V z=9L~Xq;{u72yuZiQr7xCG!@ACq~aWWBsu_dN~iOuZnk7}xhp*yd~mpyO1gsN!3!+H zYf6><)p?xOKd?>21BD*Mp^y$w){k~oUY1D+#Y(+wXqqqzkC|E!y^1 z3|6Em3(*FnH{yXg{Y~ueZTI)hl?R7en@5G{=z1@!5f^0(8B@Ps+P=WLeR2#Z-N9`1 zaC-cBfhpy|gbcaG3{ zf`<^EoY5Uwn}hE&k@9mu5<$zc{!PI^x&LE>Q4cTuaq7hHuH7UC^$F)0<4)~1`bj0U zmpXt`67P4VTV^G;oR&EL>|M_gOPvzeeeid!g?I)|#e;Or+ z{}=A#fdNUqCiIu-N5^EIM_My#W#~$sH5n6sdP{LySxdft(7iR8(Y?~0;twY;hB|*0=^1OfaNBT>JZqsC2w`=GaE~suz z9k2QFy(W#4ej|T%@(O~>0s_0Y7E?(cFeGK$1o=M9V*I$g!A3OQ4|4j|6I^)m`WKle zZ8@t^ud&GN4~&E9TOFtPVJPnT>Z+v78wPhBw$*6Qv+d4GgSZ!JmF3-I!z_=MAfAk3H4NUEl1)y*<)v~)9izztCw~cM0!>gk zu{(&If^c#i10$TSs|#~v8pMdEFw95fFu6&9kCSyV1p6@5>d z;g*cOl;zZ(9-}msvyUjalFZuwa;TZzI}C{)wzy24psR^RS9(rBKI$ctibj4Mn@y9Mnp{t5nueM*SG2_x-j2X6EqL;`#*TTII&mqN}Ohaaxw zk*Hb7J9RbH5Y6@~0MvG95#XDE5~UKXhxbKXdyTEoPz|{K2>Dmx03DeZ}8#N1&lk z8ptPn%1$34iq;mCE<72vy-XA%`H__g#+K7V)dsZmyT*LNuzHvS8Yw4hk6I+1dg~AE z(XDd|29Nxt(u32zwPC;LJ3qlL?|s|Vq{v!{234%P_q+5b=ZBMm2Szh}7PCn0Moxu} z!>I$TXp3pS@Z(z+Q8nmkuys|AFpqWpy9PqXN(31k%+Zky43#^}|I@&s$_xnX4fd^l zecD>YGVCv<){C`o|M#)pxJx9Tl77@sJqpo=ZZxYlaP{`t(Xp-N<9JraY06FiFCquh zaePUDb))4WN4m%<3nvR7Mh@pdBw`x`ELeyhF}x2RmNU(bhzxs^^>S85BZHBG$;lco z)fWe+1I8opUg7!=4YzHtZm-7huP`~CskR2ae9TgiH@zI6*_H=AGR~R^9c7qs5t(~# z#R1Xau^9VC!Y8KJ^mKP1$^Q3ejLBUERFxKikL62ly(You-$^cyg0pQ@ju#UnxjY;4 zOJx!DsKiJiGaVCt7dFIEf6hGDlLr_%#uxZ%n_?lbXhlTT1qH+WJEiiU#}F=uyM0#1 zTW7Rv|D32^Z^7?NK`lh>o=>|$x=};isl=4))Fq5kSsMYq>$DeyIyfIuM?SNz*w``< zFt2K%G5-jpmy$Mur3o@=o=p4- zOBY+cMujOW)CtAKB*KH-OY1iq2v=GFJ{QZ+S9BznAf!5PrVi4DwR9qsOM5RRW9iyj z3DUDcP#K#33KNCTba&-P1y> z^9Y2}<&ZeoM7vmQQFZyiOYP5ZO)aHPHZgBo#QEZL%+S5DB<~=%y@Hl;GZpDb4x93#>>Tq&~2;qX>@fX9MplNj15AUmET=a zQb#Ew`UvNFm$gCf!E0N%eoXYI%3H?bqI0nRB`JpewKJOaDcx00n0O+EQ+sS;a~!!c+j^b-=o$$4 zFpr?tg-C#AG*w`}y2xqsMvf$oq;hLxXtMuX&ud(nuVMZ_`4+m{WM3(PBu2ZKZAsWj z$qWl$FGcCLwS0YBa;8-ULiE|X#hg835TjYvYj8ES?WUlliF}X%hI37g!`)Gww+2?; zeUr53YI$dzPboMcT{RSwj6b9h0-qdjf0RJvk5<>99wl$si=s+K01m{0@yxvMAu3kmmYr!&`@i+Qq-^4{rSv#L z`Vp!RrHPk1sQ63B3BE09S*p|S^5&?Oj&)MQd6K0FM^{l(f>*V)$9)ILIe|u2;cxDD z>KK~P@B$L1=cJ<~qcI$s`+}abxQO2bZh-;*r9azX9M9QuJUAdEf)H*9IW0!vAht{r z(fvBJ|F;f7GMd8S@RH3<^Aw5#-)40n{;e-YhvIQSx;1cOa&UBU_)u+n!qZJo2L-!e z1mEus&v!bI`$?V%UoAqHA4M-h*Z%mL=xO`>6}vU0!LvrighL?V;cDFf5f!Kj#1d-PP)#pbAG)4@9odw#h#zLMKyY zlL>tEge_l>S+j`PG&TT!O7=FcN8QVl7Mr&5n6C`DTNM?{B2 zhb@O4)qMk~YcU?>`O=UirFkHxdJ;`Aa?vxEChd56rg{e4{5oi)w99S3pf3cFIIO!A zawBzGb{vmx@q+yC{*0=a>su;cW@rn$JjhNtOil6I_m5O)-`X?t?b`Q?UO;02J-FMM z_b&Cx^dhaPw>`cQ{liMa1UP5GbERKzLchkIc>k)}u5JRUlkI!~iXxE* zlA5yqHyB#*XH&HCE28M1r|x(+<6pVB6D|#FJmoTOy2Hkfz?H)+D!ryviCOx!v2qdd zD^9=ox75!8MTB*7X`O|k_>>LDzu?=9L2IwMTB-jGrF?k)u8PVe}PbMYNY5Y zVRU^_%KAxjtJG|1!!h2+%Iv!{0l>g%ZHDEa^EOD-! zA>>V3I-i*|Z!z(K$RLF;?*QyoH==vJ30| z7V|tdPcPmxq2;Sem`gkw!EzY~X9AeUF73w7L#9nB=q1xZ<$g^cNx5RkoISpK=*6YqyN)GgF-{$Fb|QIXtI4 z@Hgb$tkpc|U^IR|yBYcT)cH6lQ{VqBZ|@YHXouRb-Z8eo_?;%tm+ZpYzt0{{Ci%q$ z%GZunKUxMu}BXkc7`m$T8db@rlz!gdP2L^uvvg#Bt2Vi_X{O8PBvQjvof*d}Dzmx%-%A zmT`CIE2;y(b#4hiKIyK5eY~~K93gX7Fz0e5bYnGJpt{E_SnRpQHp@XLdC?-0ZWVa-nV6xYH!zhAef7dK8^HK z!jAeF#O4^K1*n=iOm5HkBh-5N%cBt_8h5N;A8yJW+j^#CY#Ks>75AxPRY^_b$?6llf`& zlVo6tW>Q*1Y0)bDP0_WLT=bXrl_fv3X+7L_Xt9m$J`l@7W(aB0p z76fX^1Q~Nax=W|7W)%nplCZMzK*D_9+bE$$7XjK`6Q-V7p%F%!N;0Y-1({+Y1`%bg z{B4aoMm0={r}!3%&%5Yv z)%HY|68<7kIAYzCSzY%HHzZxmYHQ2~ZVJ9R3#J!4VDw<)fK;`NScm(nk6}5PUZlUz zW?^0@?j}*2ZkK{@py3}(iK}0~nYs#j#jXe!>Sj#;!U4E1+UxP@tM9&s<@$WnhI$?G zGfeuxzt7InuF*CvO1tzJK)I3^>K30-9w&Umm3i20J-X{3iwJv`ImksM_LMoG{$dlz@9Bkoi%U`2typ9v4M;77*Bo+=1wcR5^#MdM$c{|XqNF*ld zO|9)CTG1FVu!QGyz8&9w70x0tR(3oFUftN;ZVWw>ji$IG#;N|loI^lW)Aj8IFp@nT zX`$%3p>W`v~ zyWK}$cum@6Pit8qQM%Y#=|Z~k(BjXA{j_(LmENPKXF0w3Q6lcrq9=zggJ3>L!dcg8 z(5`KMS>Gjm23wI2}TF;Ja_BX;d-D-P~zID{* zAoB2^oXes#M>spg&&H*9_stEaw#UpzhR4huWO*c&t-{^Iw=b8-54Iu?w@aWqWOa6S9;wD9;g_USAM->m5=zdz}|w#hgGPcHE_ z49cmbm_W753vGjWJ7zwT(d20U)<>_I=~!;R z|4tUZKJ8z98yveMs147K<|A2-Topv{`wO|;8s%QX)?E;}`1<^b#T*c3EV?xp#QA?g zHPm5v`dgTMOc8qM=Ot`5<9&K-+j033`ipnW18luM5uu-x6yfsc1RBtmPX0$IM= z+#x1utg!~p1DtjfMMP*XirAk#V!fNKkBu1u#_c42A;~~jUoXnUpP;Sw_cP-ZtyvFd z5>0U56?bi%lsT|?iE+QG>lXK~x<3BLJe*kUH}|kUDayU_jPW1I3Aqk?7PpmnJaU?)^4g;4d0>}D}KSt>P^)4KH_<6E~$!iya z^v~t^pNs=?cW;Ejy165|`@MHY=zU)=jrkAy@;tGoA;zJ<2e8xc{CiBw?`QNmJ*N## zSL%8+E3?UXB5l);LS87_vYE!iauO!3908>vx&6Ax5dZ5?#)B6En^3t-{wK`86N8Lk z#;nGQn1)|tfg&gdUS@C!;obR|-w%s-OwpmAQ(j|*epY(cyB^}d8_H-s@(%JK*7Tm+ z(SF&Y|2?y`j`E2K?Hjwt`K5gpDbd~ZL+N3#8iNYeqKH8fi@KlPR?hX$zWOwV_L~0a z`@ADf0gxJ=PZB$NKUS9!o!YWG`VSyX-DCVz!%3?EEA9?ZLN^j6uqr+m`=&tcF@ZnO z7C`rSVly@7$WmDs6E`@jbY;7Z%KGe)M~j@hMzS$=pA&||0T?VCSzB>g%!JF4#9BEn zlXP$vytE}xf?vV{G-xj^71mLMsA%uw{+nHflk*u;OTQb<@Ia%+2AAnZA|q(H+2*q3`JJRT(ArHW1KOqCalzux$6>JC;-Fge41H-C zjp`p?CDEob$K=HFwYWPXlYu(f zD6`S0XNc@ zOj=*5FGRvE|dG3!1eYJd+p zKSe&vhRgS2~* z#-pRaf-D>=8o~#}I3&qz#@4E73us|+b^@EUc8h9Ch6lIZUm=VKnVdGWO1-J*TY;Ly zIIQoIv2~XNd~02jKEBAYUnwD)sLWH^yzS<;{>n3=%!?JT9|BgGgq0|vAGfV679eN- zh_=PT0|HmR5KTHRy&k$wHty4V{SRN+g&qd`tF50&80sC&o#_g??z9emWqh9of#KeF z6E#+e(o5D1AElBI zx$j6OX69}up~uTII3IueNa0ik=FOm`>0^O(e|sivdX;Z6aM4TqrNE?3KmIixxnQeOI2rU7=*y;$IysmMR?!VI=2FmQjaTG z!K1E*^MIP(TET-N5(t(52YwQ*YhhcV26eLNDd>$@j(u0fFqoLN6q2#S@pOLkTq9fv25b9M_#s)Gfv6nVej*v>>5B6x*MKH{_5oIXz*F z!1@WI@6O@trwOKzfY?oKJg~~rJYX>cNyeP`orLM>Pu)lWrt40KJL!rW`%4`}%L}a# z`oP2+Q~&V;$Cqp}--ay;0eRS-79<86Oi>jc0|qz@Z@jS#z+okD_*V|}ferE+TRoxF_~hWK{XT? zSVPX7n1=&r{tgl`@#|Bdg(kpkQ6GFK`$~mPrufYuOMwPJoJ$PEt`?%p*B&w*P#duT zZ{7!h^I)K}VVd}P+~+kp3KmCdzE&l~^qFFZb%M-RtPRz{l*FSi|0KV@J9gn8>j>r? z)Cu16i%EhTm{pkjghr&l#*&}z&KWocpUAQR%z0l)m`o^yT|B7B;ZMeJ;mmm;PA2P~ zyI}bn_82!@RuN3Ab@pkWdbF8kBbn5xo32%JC0tzLpCb>a*Sk&X@1N;H)N+09pDA$l zQ1I#*7u-J-yW>?i1O;mn8z|RO&@@Bv(J}>llmx-NexHQ2fG1f@zX!k)wFQ}yIr%Zv zpJ4Cl^Dh-mQ4gVrm(hC;^v}`Zm&Z%6+n}lDC}Nycs@saCkM9?6+Yg-5Ucq264rb!V zcn&$hM+SIks62XZ%hzds0(xw8T9WpWEYi9s9`R;j^DtBVGJrPE&`4g*3ma!Kw>*@{(1>+iIQ=)9A`Brq#gHjq2m%DxScOakc^gY~KLZu6voCdRDn|xi^kM*<$p4Qhff&n; z&HIQB>d>VufNfJO&jC`vUUG?kQ?LKA35?@nR!k%B71p*ujVT; z;57S?C@~vwbLNf>>W_RrzSAQ_XJJ7WDRw!nbYJf|)RGqG;=h7hW8E-9Bn<_OFJAWl zhsDf9w8Jf9)Egk;&AtBNd`}Z;r`tYep#Y@&86oYtVgIogKPH^W{}!z2`Te*;bWUQt zZn7NBJee;!6qb^V5?w!FaHC(-Y1~JTzB?!yKD~S2oKBf4IehBh(45j~m1fWz<7lNg z=8ZJl2#aM9cn<+89qPgDVoCVABN6lm&AkO$HI#X;Qlh?I+AZ%xhsuuHMT3^0mjPrMhWmQvhay@8e2tE=-jl<*rr z^}lQ2In9Oc#CK;F^A-ahC>AC?P3Hf!E+wF0<+xj-pb*OEU$@PNx>|jIPn>9N{&ejL zuEwAB%kC^FLijpodJ_aKe<7HAu2VI_-ULijNkehFrBp#o6i0wsN2zza$KgD{RFanoj_5m19Sj}4fllQzRa(3U^( zSqZWk2Aq2}0k9IknO~O-B=cw9q@XIVU*n8K(q>c<0BC35F(92maz0$Ajr+Klj?g

QpCxYIe0koD4+fFg;&C{}9^Ij6Cbn0`9w~BG%{DW`aQ` zkXfh)Ur`v?_P9E?9cDs-BZdJ$d~pvP>8qm7;qQ6e+nnhL+R;o42FR`8{|(gUZa3_a zn|FKE3+zJyxS5VZ-M!Ieu~MjRA)8}YfKbUF8swCa&D~p$?@Aui9%*;)!fg|C0ew&| zkT$JwTTm{2WAw=;3wz0Fl6li_Enh=`9w*K;{3oDcct+qzk!YpI#tDFRE0KuSyxA-e zA&CMZmEP5NDU8Wh-r&%cZ`sc|QjoeFp{~rlc|!#}8GHIAEVpE*bP$&}$zdx6Bt9(( za}mi-row}QpKSL|t+j9S66VNbcivE)OrK0R8}xd-eMsxvbZ5jLgr)p_93N{=F%pUG zL>6y--esGdmZff2lZyc`Wp9=oQZYi}@)qktH6hkp9=S8F;Rugkxt`%akW?hbSpjdm zt`yrA)a_ACo*V2+mK5ywE~;tGdir{ubLdjtzWy%;fH>}P54l%V>fZ@GBbNWF$>10@ zgEY%oPBwZl7%PYF_%3*YF6>0>43eP0GHoOjBsxOQI!$k&cCVToPG56QTv??*2g3^|hH44`h&QPMU(tha2t(zC$RzQkGSZR){6Nlr zzfWe*QKI6m5=didRK=Qmy`gzl;muthUsrG4}X=w|!guu0lz#9buL8g=6$u4nSm z8p_nKK;h!VuUTLC<}Kd5#J~e&BnBu0$`$uDKuBA0{5Bfl?r)v4$+>|8kG2`SF+=)M z5AvJ1FQK0UBhRhZ{@}a6J6e#|Yybd!)(hU8-DF{OEs0b&`sXlK2j$`pS9FWt41U(W zW=l7pK0zJ8W-+XDo4hkxvcnHOuIR+E%l)u=K)Gb?%Bbn5gx29`)XR;$;j45 zYx(IxDWLCL%Wmw^UUJj?NAN~@iWr2*!q1-8b*Eu{zA5`Iy|m;;ymkNmil;dSiY1v^ z|D)(3-G8&XGLD$1h&k*OgKg`LOzhlJJ1&BfAN52ca*%Y1e2Eq10u&k6w^l0y<<6RMhwqi8kj(eAWGJah;auB%$Yl5p(v+BIkpqN zEWwnO(7wo{Q;&Qaklqn{C95Jo=DbR-e<0Qi31GjEs|Z>cE6Zy%6`Q^W#T%l$?h)oF zKaHSVtIt>!d(};4tQZ{4^|Z%5a~+N#1Hc0~}}9rh<55*T))e+kQd|MZ^< z8PAeB zToK)Vsa`Yd8r6kS4gfYwz5diMm)o@0HH959H{14aJi@?^1ZHNoP3q{T0lOTBBPD&g zqQVWb*2n))=2N0kk76*4$MPQ8`%*wfr*t@qJbPvaeY$!NHNZfgd7|q}ccEu@NMH7i z*wh=2UjlrsSr&YNx+t+Z?yR zXj@FNTcu(xtHRJ6Dqba7i2>w%&6Y(_fKsuY{i~31=ANBvv7r^)BAXxjIh#MYDc+nk zy`9cq@ub|PST!b7u&=~mlPb)Sepx%Iw3hd9x&AYgbzhk3*>IDC6j2Xi z@UjU(Vyg%JCMf&KbNApjVzW7F^)qDn<3@H;+x&Ghl8XhW`?>23&73&_9;l)w@1(D- zuspnDk1?pEjfCqeh+Dcwi`=br1HAc_ZC^!+Fb8zJwkOcd~J9j zuzB3!5y1%u``t8W@6*8Ke%;D$s^?5q9XwWU*I|R@|8mcyKKBzfL_J|9Hj{{UG37km zu3;a%@wQoWIVyiCnskWL699V-qsFkiu>r*I+EW$Gq~_t3Ujec3`HnC0ml$!9sw4-V z;U0GkEgg0(oj?!o{yV-_Z?wZjnfY`m{IWe_1cU`JN|I6w`Onc{`lFst@n?~X-{i4YTz^JVX>B&p z)cM~{m^UHmzLRg20EA$V6@zg!lCE6&7h)j)g@opk5OM5I@+nF${_~D*uNu8#IoSXE z)FBc{$D`7Z;LLx)thpo#PBDX%(w?7H7?`|pZG5{$$bx5{&WKhIa^p9M0GL@|-d8DG z52)iDYzI3PO4S%%9AQYoR~}A@>VtQGV#kVy{l=!;V2_O{*9*_{2D_|nf#7;*fWA?q zx+ZvYn?J-KEZn58H?n#mD$M;OBq}qwPES8e zA2Gcs1IYk$_@SDUKLx$(^Dk(pM0;5NghYV7=8nRF*f!JOa@uN zq2(OfaBDNJ!PmmD<&w#U{o{R3sQfmo#O{e$`DG`$IjHD)>RKTo_hDDZksG3Em<0X) zBtP}T6v>Mn0Yk`(NN|d#Ye;aA^Pno1&!lSR5>J%6cfcc>RpEWu?X9UX0Y zo`4zDp)r9wCpjd_?pucKa|^idGOI<-TC^4UU^M|k`^TZ&$Hg0i&&v8cSi3Y0|gK& zVPVcP&~}SkGwK@URD1~q?%UeZg!DJX1+jhTq`CdR(-d`j*CEf%5ZjC1@}h)3%AK&0iIx=1vK)FC`DQV|F*&Xil0mh4!hu z20aYK6P9YR{1;Qo=W2aJ4m29-e+`c)!46yDq>GP@%P&Dh<;kdx%_ZyW4NTgWK@hU5 z9PsZtvv$&ET-gqpEFZxvODL>g!S(u7ui|NP1*-+z9ueshSc|Tf4k5L$2wC|lg=Ct%eVhD5+3<`TjM>1z&8t zPKM!Zz(vi_TH8no{PmPh;44ndaQRw!k7`^ma#Bl zRoirKXG1;5FG4sP*u^@XkU(Riu#v_mWAPE2%KNvv`qmF+<5@EN@rMBq(Tc36;`S2v z^yLLH#Ks#e1yr64eTMQU!5kC^x?keaI}3FacK)_nx`o&Uk{W%m{3qUg<#T&7{afH@ z=Q`^+YoNm12;D`H_Ufj(?}9J}H6 z%Hx^-|M*5FjF{#el_WWHXSs4uWm@}Iu1J`(oFPY(-{?Rct1a{X8=sd7yDfelqRLmrcs}kYl?*z3fWHC_QD+T zmzM)wp!%)umJj)@l<1}>R(I}8?i}vgH7Xsrv}(2|e2dq|Rx-EB_Bo|H!s+#sy2B)f zqi&tt^FordHNEN0L!wL3gcPOEn>GqP+#%BZdryl z1MC?f2Xb8k%Y)(W!<~LFEbw$3$}02ybKRGHW4cWqJasg9e^i`;%aDfJ9ttns2m_m( z!9edNesD1B%XlXsYl%n8nt&2EaqPawxx;V6BL_`NDsd-QKz#(g0`J1kao|S!5BmgZk1Ga^C1X=xc*sM zZH0Wk)c-B)EYrs8l}(2mhH8?TST!6(`4TI~v`g1`ftd~9SS<^R(cR9^^&1+pva4q} zEP&_8&GQ?(T-MN>Rri>+T%*WjX10>H;U{&7;N25GZ1Ot8ytE z$^a`_fDrb#3@m??T3qZ(ikaqG^}R@%0A0m5=d96|Va?8k=nQmlM~76kM)`kq;7clJkaUmY0rB~;!gJTB2HoS>lB4-52NA%9}0m%l`hZ+5EeJ+~ia+Y{vGtgFmm|)i1 zv3C_nOtzB+V2jZ;^q=+mYM6}?5+0MpRJ47{=Xhvn*x+~AllQ~sZam{d;D3h_#_PBt z>xouhSmV<7*Dx?D@6$z~_#BQEo-nk)3!;yhD;X8)AoI!IQ%@1U%z5ge3pj|XoK_egORV8*OTI z#!xk*d0R1D(#RC-^(r8ll9e_9aRpJOGH8Fv%d?|>FSS zzvEpD@&ykfx$^jGp+l6}ZgrieKb#j^TK z^wcHR{XToZ^V1fk;;rQjafQa`I3>it9YVSm$%K);6@l-N?;gMs%S2)uUko>jqtbIT zYcA45`^eW$Ca0@MOk5ZpW=AWh8HmAU8cy8KkzK39z`7oPdbjS!=V)2;Yhyt%mhs>k zyj#h9k_XEtPE5%d#Ye^!nMk5C&%h7_*(%1!!?8_7urp6x0yLq?Z_aNv>#K{4>IQ=> zdFnbq`ozDx(AKzT@Po*nNJvM?YHksr(UN;;(gis)3BxiM{8x(yOZglp47R)RR@O_q zE}Waf2!qr$4-B?2F)J|2NPk!J@v;cn_5*mih1|UHM=_JpHI~M9`T}m%Vcg- zo?Fnb*Cmy9QL2#dhmy$gjdH*FXds_8RiW4bXB`;xOUTz2Q5QK>x>B+bVKa?;IrF#H zWZ2S>XuAlRhOA1+>b`w<|EFGLl2ql;qxsEH6(E)JlIvDHVAftO8i|_-NYWR~^8W|S zGj8nshO7 zqOK#S_QoPS=4iMA9Z)J*$)b%dB*|>IW(nV0a_K&b8zL zg`R)L{B}|v)(YbFvxLcbJw3rJG0#N5pY_HX&5LrVmtv?)oE8F7AeKZn6{+QB$Ps2s zR*`CF`Me%?x90jx|2bzmE&Oj1MVGDvC*7GFo+^mETiZRlYA%QPCIh1G3;jrQU00ZK z_c)m7rZpf?nceq49*Cvh3{v=(Ik;DC_|o5EGh>J2^D_2UjJ;{XssTe4ucm%E@{F-X zKv$_Yh@X4hbzCU&mF@%*zRu{Lg2)K-E90YM{O@vc56qS?`&_@nRI1h>3OLi z&b=24RyUe9+0mj@G~wO_%};Gr>SlgtR;jOUY@Fg5D+tEPls&Q* zc$8fZ#HcX*4yNNx3|4-aMO}MdGoGge)F6h+ zX{!Lsrd9hr#MJP+-U->wb|8EvC_}4T31}y7LGG9UBZc#$y%DF1fY60Z;?5N~NdVK+A4}iccSJ*KPSw2+_0XP(I$UCJK6U&N^*+UrHhbOfzeQgh*-nk! zaByC~`5V!V+mO?nTZUrWlHWM@R(venMD3LM3w7%``O}QM`3G8LdS_q7(Y?W!F7LdC zHCgy%Be@d-GwP%2kD{yGZF30UI>ou!V;!-DZj6*$zB)BSoGY)Bm`AergJ0N|x0s+R zGOevhQ%pElYZnbN`((={kB}-Mqeqo#$M?HY#z%C-_pwlvvZYYn{Eg1Bnfs W{}1PkMllc&grKb*tX^4o-2NZdZ!UTO literal 0 HcmV?d00001