From 5a3c210ab78b9fc2a704511b0639c8db0518f038 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Fri, 24 Apr 2026 20:56:48 +0100 Subject: [PATCH] feat(newserver): Military Conflict: Vietnam MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add support for the Military Conflict: Vietnam dedicated game server. Supersedes #4594 (original WIP PR from @knoxed — completing the implementation). Changes: - Added mcvserver default configuration - Added mcv to serverlist and all distro CSV files - Added install_config handler for mcvserver - Added dependency info for all distros - Added game icons - Fixed CI workflow issues Co-authored-by: Knoxed <1338733+knoxed@users.noreply.github.com> --- .github/workflows/details-check.yml | 2 +- .github/workflows/serverlist-validate.yml | 5 +- ...update-copyright-years-in-license-file.yml | 2 +- .github/workflows/version-check.yml | 2 +- .../config-lgsm/mcvserver/_default.cfg | 189 ++++++++++++++++++ lgsm/data/almalinux-8.csv | 4 +- lgsm/data/almalinux-9.csv | 4 +- lgsm/data/centos-7.csv | 4 +- lgsm/data/centos-8.csv | 4 +- lgsm/data/centos-9.csv | 4 +- lgsm/data/debian-10.csv | 2 + lgsm/data/debian-11.csv | 2 + lgsm/data/debian-12.csv | 2 + lgsm/data/debian-13.csv | 2 + lgsm/data/debian-9.csv | 2 + lgsm/data/gameicons/mcv-icon.png | Bin 0 -> 2334 bytes lgsm/data/gameicons/ps-icon.png | Bin 1216 -> 0 bytes lgsm/data/gameicons/squad44-icon.png | Bin 0 -> 1849 bytes lgsm/data/gameicons/tf2c-icon.png | Bin 0 -> 2412 bytes lgsm/data/rhel-7.csv | 4 +- lgsm/data/rhel-8.csv | 4 +- lgsm/data/rhel-9.csv | 4 +- lgsm/data/rocky-8.csv | 4 +- lgsm/data/rocky-9.csv | 4 +- lgsm/data/serverlist.csv | 1 + lgsm/data/ubuntu-16.04.csv | 2 + lgsm/data/ubuntu-18.04.csv | 2 + lgsm/data/ubuntu-20.04.csv | 2 + lgsm/data/ubuntu-22.04.csv | 2 + lgsm/data/ubuntu-23.04.csv | 2 + lgsm/data/ubuntu-23.10.csv | 2 + lgsm/data/ubuntu-24.04.csv | 4 +- lgsm/modules/install_config.sh | 5 + 33 files changed, 257 insertions(+), 15 deletions(-) create mode 100644 lgsm/config-default/config-lgsm/mcvserver/_default.cfg create mode 100644 lgsm/data/gameicons/mcv-icon.png delete mode 100644 lgsm/data/gameicons/ps-icon.png create mode 100644 lgsm/data/gameicons/squad44-icon.png create mode 100644 lgsm/data/gameicons/tf2c-icon.png diff --git a/.github/workflows/details-check.yml b/.github/workflows/details-check.yml index c58aa0ae4..aced7522d 100644 --- a/.github/workflows/details-check.yml +++ b/.github/workflows/details-check.yml @@ -21,7 +21,7 @@ jobs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Generate matrix with generate-matrix.sh run: chmod +x .github/workflows/details-check-generate-matrix.sh; .github/workflows/details-check-generate-matrix.sh diff --git a/.github/workflows/serverlist-validate.yml b/.github/workflows/serverlist-validate.yml index c2605b062..e2016eddf 100644 --- a/.github/workflows/serverlist-validate.yml +++ b/.github/workflows/serverlist-validate.yml @@ -6,13 +6,16 @@ on: permissions: contents: read +env: + datadir: lgsm/data + jobs: serverlist-validate: if: github.repository_owner == 'GameServerManagers' runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Compare Versions run: chmod +x .github/workflows/serverlist-validate.sh; .github/workflows/serverlist-validate.sh diff --git a/.github/workflows/update-copyright-years-in-license-file.yml b/.github/workflows/update-copyright-years-in-license-file.yml index 1123b8cce..d9870a166 100644 --- a/.github/workflows/update-copyright-years-in-license-file.yml +++ b/.github/workflows/update-copyright-years-in-license-file.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 - name: Action Update License Year diff --git a/.github/workflows/version-check.yml b/.github/workflows/version-check.yml index cfa7615bd..2b4448643 100644 --- a/.github/workflows/version-check.yml +++ b/.github/workflows/version-check.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Version Check run: chmod +x .github/workflows/version-check.sh; .github/workflows/version-check.sh diff --git a/lgsm/config-default/config-lgsm/mcvserver/_default.cfg b/lgsm/config-default/config-lgsm/mcvserver/_default.cfg new file mode 100644 index 000000000..3d822892a --- /dev/null +++ b/lgsm/config-default/config-lgsm/mcvserver/_default.cfg @@ -0,0 +1,189 @@ +################################## +######## Default Settings ######## +################################## +# DO NOT EDIT, ANY CHANGES WILL BE OVERWRITTEN! +# Copy settings from here and use them in either: +# common.cfg - applies settings to every instance. +# [instance].cfg - applies settings to a specific instance. + +#### Game Server Settings #### + +game_type="0" +game_mode="0" +ip="0.0.0.0" +port="27015" +clientport="27005" +sourcetvport="27020" +steamport="26901" +defaultmap="mcv_siege" +maxplayers="32" +tickrate="64" + +## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters +startparameters="-game vietnam -usercon -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} -tickrate ${tickrate} +map ${defaultmap} +servercfgfile ${servercfg} -maxplayers_override ${maxplayers} +game_type ${game_type} +game_mode ${game_mode} -nobreakpad" + +#### LinuxGSM Settings #### + +## LinuxGSM Stats +# Send useful stats to LinuxGSM developers. +# https://docs.linuxgsm.com/configuration/linuxgsm-stats +# (on|off) +stats="off" + +## Notification Alerts +# (on|off) + +# Display IP | https://docs.linuxgsm.com/alerts#display-ip +displayip="" + +# More info | https://docs.linuxgsm.com/alerts#more-info +postalert="off" + +# Alert on Start/Stop/Restart +statusalert="off" + +# Discord Alerts | https://docs.linuxgsm.com/alerts/discord +discordalert="off" +discordwebhook="webhook" + +# Email Alerts | https://docs.linuxgsm.com/alerts/email +emailalert="off" +email="email@example.com" +emailfrom="" + +# Gotify Alerts | https://docs.linuxgsm.com/alerts/gotify +gotifyalert="off" +gotifytoken="token" +gotifywebhook="webhook" + +# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt +iftttalert="off" +ifttttoken="accesstoken" +iftttevent="linuxgsm_alert" + +# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet +pushbulletalert="off" +pushbullettoken="accesstoken" +channeltag="" + +# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover +pushoveralert="off" +pushovertoken="accesstoken" +pushoveruserkey="userkey" + +# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat +rocketchatalert="off" +rocketchatwebhook="webhook" + +# Slack Alerts | https://docs.linuxgsm.com/alerts/slack +slackalert="off" +slackwebhook="webhook" + +# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram +# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring". +# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help". +telegramapi="api.telegram.org" +telegramalert="off" +telegramtoken="accesstoken" +telegramchatid="" +curlcustomstring="" + +## Updating | https://docs.linuxgsm.com/commands/update +updateonstart="off" + +## Backup | https://docs.linuxgsm.com/commands/backup +maxbackups="4" +maxbackupdays="30" +stoponbackup="on" + +## Logging | https://docs.linuxgsm.com/features/logging +consolelogging="on" +logdays="7" + +## Monitor | https://docs.linuxgsm.com/commands/monitor +# Query delay time +querydelay="1" + +## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors +ansi="on" + +#### Advanced Settings #### + +## Message Display Time | https://docs.linuxgsm.com/features/message-display-time +sleeptime="0.5" + +## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd +# Server appid +appid="1136190" +steamcmdforcewindows="no" +# SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch +branch="" +betapassword="" +# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server +steammaster="false" + +## Stop Mode | https://docs.linuxgsm.com/features/stop-mode +# 1: tmux kill +# 2: CTRL+c +# 3: quit +# 4: quit 120s +# 5: stop +# 6: q +# 7: exit +# 8: 7 Days to Die +# 9: GoldSrc +# 10: Avorion +# 11: end +stopmode="3" + +## Query mode +# 1: session only +# 2: gamedig (gsquery fallback) +# 3: gamedig +# 4: gsquery +# 5: tcp +querymode="2" +querytype="protocol-valve" + +## Console type +consoleverbose="yes" +consoleinteract="yes" + +## Game Server Details +# Do not edit +gamename="Military Conflict: Vietnam" +engine="source" +glibc="2.15" + +#### Directories #### +# Edit with care + +## Game Server Directories +systemdir="${serverfiles}/vietnam" +executabledir="${serverfiles}" +executable="./srcds_run_x64" +servercfgdir="${systemdir}/cfg" +servercfg="${selfname}.cfg" +servercfgdefault="server.cfg" +servercfgfullpath="${servercfgdir}/${servercfg}" + +## Backup Directory +backupdir="${lgsmdir}/backup" + +## Logging Directories +[ -n "${LGSM_LOGDIR}" ] && logdir="${LGSM_LOGDIR}" || logdir="${rootdir}/log" +gamelogdir="${systemdir}/logs" +lgsmlogdir="${logdir}/script" +consolelogdir="${logdir}/console" +lgsmlog="${lgsmlogdir}/${selfname}-script.log" +consolelog="${consolelogdir}/${selfname}-console.log" +alertlog="${lgsmlogdir}/${selfname}-alert.log" +postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log" + +## Logs Naming +lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log" +consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log" + +## Log Parameters +logtimestamp="off" +logtimestampformat="%Y-%m-%d %H:%M:%S" diff --git a/lgsm/data/almalinux-8.csv b/lgsm/data/almalinux-8.csv index 2405a4b3e..42b0bcfbd 100644 --- a/lgsm/data/almalinux-8.csv +++ b/lgsm/data/almalinux-8.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,java-21-openjdk mcb,libnsl +mcv mh mohaa,compat-libstdc++-33.i686 mta,ncurses-compat-libs,libxml2 @@ -82,7 +83,6 @@ opfor pc pc2 pmc,java-21-openjdk -ps,GConf2 pvkii pvr,libcxx pw @@ -109,12 +109,14 @@ sm,telnet,expect sof2 sol squad +squad44 st,libxml2 stn sven terraria tf tf2,libcurl.i686 +tf2c,libcurl.i686 tfc ti ts diff --git a/lgsm/data/almalinux-9.csv b/lgsm/data/almalinux-9.csv index 069e8e437..7780ebf79 100644 --- a/lgsm/data/almalinux-9.csv +++ b/lgsm/data/almalinux-9.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,java-21-openjdk mcb,libnsl +mcv mh mohaa,compat-libstdc++-33.i686 mta,ncurses-compat-libs,libxml2 @@ -82,7 +83,6 @@ opfor pc pc2 pmc,java-21-openjdk -ps,GConf2 pvkii pvr,libcxx pw @@ -109,12 +109,14 @@ sm,telnet,expect sof2 sol squad +squad44 st,libxml2 stn sven terraria tf tf2,libcurl.i686 +tf2c,libcurl.i686 tfc ti ts diff --git a/lgsm/data/centos-7.csv b/lgsm/data/centos-7.csv index 39af5868d..c61fbf7d9 100644 --- a/lgsm/data/centos-7.csv +++ b/lgsm/data/centos-7.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,java-21-openjdk mcb,libnsl +mcv mh mohaa,compat-libstdc++-33.i686 mta,ncurses-libs,libxml2 @@ -82,7 +83,6 @@ opfor pc pc2 pmc,java-11-openjdk -ps,GConf2 pvkii pvr,libcxx pw @@ -109,12 +109,14 @@ sm,telnet,expect sof2 sol squad +squad44 st,libxml2 stn sven terraria tf tf2,libcurl.i686 +tf2c,libcurl.i686 tfc ti ts diff --git a/lgsm/data/centos-8.csv b/lgsm/data/centos-8.csv index bcaf1e31d..a9b0692b4 100644 --- a/lgsm/data/centos-8.csv +++ b/lgsm/data/centos-8.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,java-21-openjdk mcb,libnsl +mcv mh mohaa,compat-libstdc++-33.i686 mta,ncurses-compat-libs,libxml2 @@ -82,7 +83,6 @@ opfor pc pc2 pmc,java-17-openjdk -ps,GConf2 pvkii pvr,libcxx pw @@ -109,12 +109,14 @@ sm,telnet,expect sof2 sol squad +squad44 st,libxml2 stn sven terraria tf tf2,libcurl.i686 +tf2c,libcurl.i686 tfc ti ts diff --git a/lgsm/data/centos-9.csv b/lgsm/data/centos-9.csv index 446a55ebb..2dcfe82b5 100644 --- a/lgsm/data/centos-9.csv +++ b/lgsm/data/centos-9.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,java-17-openjdk mcb,libnsl +mcv mh mohaa,compat-libstdc++-33.i686 mta,ncurses-compat-libs,libxml2 @@ -82,7 +83,6 @@ opfor pc pc2 pmc,java-17-openjdk -ps,GConf2 pvkii pvr,libcxx pw @@ -109,12 +109,14 @@ sm,telnet,expect sof2 sol squad +squad44 st,libxml2 stn sven terraria tf tf2,libcurl.i686 +tf2c,libcurl.i686 tfc ti ts diff --git a/lgsm/data/debian-10.csv b/lgsm/data/debian-10.csv index e0c6ea7e4..b4d0123ff 100644 --- a/lgsm/data/debian-10.csv +++ b/lgsm/data/debian-10.csv @@ -66,6 +66,7 @@ l4d l4d2 mc,openjdk-11-jre mcb +mcv mh mohaa,libstdc++5:i386 mta,libncursesw5,libxml2-utils @@ -115,6 +116,7 @@ sven,zlib1g:i386 terraria tf tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 tfc ti ts diff --git a/lgsm/data/debian-11.csv b/lgsm/data/debian-11.csv index 0d2652293..3e835e1d4 100644 --- a/lgsm/data/debian-11.csv +++ b/lgsm/data/debian-11.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,openjdk-17-jre mcb +mcv mh mohaa,libstdc++5:i386 mta,libncursesw5,libxml2-utils @@ -115,6 +116,7 @@ sven,zlib1g:i386 terraria tf tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 tfc ti ts diff --git a/lgsm/data/debian-12.csv b/lgsm/data/debian-12.csv index e67a822b7..6c3dc59c7 100644 --- a/lgsm/data/debian-12.csv +++ b/lgsm/data/debian-12.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,openjdk-17-jre mcb +mcv mh mohaa,libstdc++5:i386 mta,libncursesw5,libxml2-utils @@ -115,6 +116,7 @@ sven,libssl3:i386,zlib1g:i386 terraria tf tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 tfc ti ts diff --git a/lgsm/data/debian-13.csv b/lgsm/data/debian-13.csv index e7a622a7e..841be5a34 100644 --- a/lgsm/data/debian-13.csv +++ b/lgsm/data/debian-13.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,openjdk-25-jre mcb +mcv mh mohaa,libstdc++5:i386 mta,libncursesw5,libxml2-utils @@ -115,6 +116,7 @@ sven,libssl3:i386,zlib1g:i386 terraria tf tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 tfc ti ts diff --git a/lgsm/data/debian-9.csv b/lgsm/data/debian-9.csv index a111c6800..a79b9ebaa 100644 --- a/lgsm/data/debian-9.csv +++ b/lgsm/data/debian-9.csv @@ -67,6 +67,7 @@ l4d l4d2 mc,openjdk-8-jre mcb +mcv mh mohaa,libstdc++5:i386 mta,libncursesw5,libxml2-utils @@ -115,6 +116,7 @@ sven,zlib1g:i386 terraria tf tf2,libcurl4-gnutls-dev:i386 +tf2c,libcurl4-gnutls-dev:i386 tfc ti ts diff --git a/lgsm/data/gameicons/mcv-icon.png b/lgsm/data/gameicons/mcv-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fefcc23460df41173b4c4265a9f3e47018a67498 GIT binary patch literal 2334 zcmV+(3E}pMP){|8q>3VC9^G+t{kF@~ zMK#xj^$u)4oz7Cm<~U}XA(K*)fmi@DD~wVwDT>;VBuF_*kqadWI6)xBx>BVvByvon zO>Ln()v)|{?NXjdGgFtLwfFD$gXMKO-ME33NkkbTvroxNNCcUrWKNzj8wExQEl~@U zQiHcfWi2v7%G_5vR<%}(iY}Lv`AK2r?s|8yVNRvuyt_S~tyZ3-BXAsC77;OIU|>=t zLvRvuRTPs_X^|_UNnvb1WN%|Pkjm>twOXG{XND^ordm+2cI@{1`B%sEb0zY}=z0Fq_r$MO9V0 zD5VmLJ#obL$8G7c>cz3?jFM*`uNhU-Za@};#1Uo7Vw1%dWh<4JimW?MCd*2wG=viA zv|eHi_x%7VW*?FdG^^(Gxi+$GckQ+r?)`SN8m)+fze;AR>ZEi&GKZ98b;q8y6kuM?)JtGq22hpC@(MO_0nL0 z&a*6y=jxajyHssraWq2Iu}+qU!#MP$43u>gVpuK>wzgDJlRrJ3oKp4l`D2^yi&rmR zzWpgi???6?&YsP!_3Fet`P)zTwts)KZ5-t3!~0#@aQrpTz4yEO`-3S}G@*}rb}@feoWnq0uCzqgR&8N@*=Hb)NyqJCcn{PIG)~Z<- zCSpC+9*W+vv&o8-FoDs41jIfKQWuk=Ov{;YF=d}PgzWFT_af)&Os>*o(A{!2eg4^# zi^sFZdPm8u&hvvuV?%9kELH93#~4z!oLx@Nd*??NU8J(A2J3^$gZEWAZQ5I{pc}^| z{9I4PgvA6;iuL+ut5TPO#x}j%xbe_?$o2QT&D}6-$DAb`4hMupkQ8KTAcOWmQAVoj z)&96`4~;V0O+`%b81f_2FiHaZ)XoWfZ{vi$}93=Vw=&^zuXc!^`%VO^CvJj+_#( zkV!+L{nk?^Bl2Nr7iBfLjx|hcGhbhP`A?tLi`d0&T`pRe-ZrCJpNu#d&2dPztmg`8 zJbv`^kI&c5=f8aXYQulN9)ADLD~S?05FmgiV1tk&kG&mA&C_YQIA5GTI=T4xyygD- z=C*Nz-1%xf15>n3dvRH|hrLX5CDs8iJKubGbJ%70_WI@RNW;-QIy+-e`wyGL{SH&0 zoCGO_5WTl~?5e3;S8_R<{_%(F|Gjy?CjqrEs{i??(_cO-b+R;;#FM*2@#{ZtK$o#x z?L%-v?ko*H_YG$UI+BUgg}NXE#Ee9w!H8&cs=a8^np1GaXz`oYWS(8H+woceSE)b zUcI~DVa>S>vX~O4?lzCRFF%^ErMP+h1DE+1pFeb>{Oy1L4{>&xbHEqPy z-d$Z=y?F5SIk{{V14|W14ODKq+{$^_SN&v)z|;<`O|*CKOW#uKi={5+1Iab zcA!TVbcCFlBkB>09?Fp^q?Ce13IY=V015_TK*5jz$7onDG}YnQ6)67Yt1p*x?-#Rg zU%XsQ*Q!1}=5Dv^jseh6-?h{Vk%S&)=|yExWdIS55`nqg z6wA@EJ$thL@b>?BHu=M!zN>3r)$~IdlL1A3gfy%YS|O>ivg(IAY~Q9Q>&4kswm1 zW(j3L#V81wIH=^A8B$`F5rHv7W&ttzkU4-Bje+b^aj#t7*8gN;@wQ-EMdJef@YAG7(?2DxLyxc~qF07*qoM6N<$ Ef~gOJ-v9sr literal 0 HcmV?d00001 diff --git a/lgsm/data/gameicons/ps-icon.png b/lgsm/data/gameicons/ps-icon.png deleted file mode 100644 index afe81e82340b2e04a66a4487da79be395d144dc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1216 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 literal 0 HcmV?d00001 diff --git a/lgsm/data/gameicons/tf2c-icon.png b/lgsm/data/gameicons/tf2c-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f466347a186fad95ce446187b3c36c1c226c8970 GIT binary patch literal 2412 zcmV-y36u7TP)CY z3vP(S)HrL_|cE%jN3Ix;CarP8`vK?ex}>O){vp z6R8LNsEi@4kf@Y`h|@IH3iCV*gV7E_0YJ`K*9tio5pJ4>nNvzv!VvZ<$;Q^|$v400 zjyvx-{+i=4=12eFk*_@aAC-_Q9Jy-yrkieh?yFzjxqJY%8l#D594BjC)3l}JS}PH0 zhN`s&hLDnoAYm4cDU#v4?tbT6fAsc^tqoF`aM#u3+uQH?_4{A@`qyr3t_`6F zQlJ$8p8MaIg*k-cTDy68J(OW>Yw@mMz2}x&zxVM+{`k8up6j|55kXK|X<;a(5F*a= zY^`<9iAV_H*s)^|Km70wH=pQM+GXhH5|uGhaZY7<(0lKRFf(s%Z)$Ir;lQ`{4Y%C< z;DaALdewF*MHrlG5LHUWxrRa-o30HLOVS8NId$Lre)-sqTUM2llSL01K@vfhl=m(T zTxyKz$dMzpaxT$(8&e=vkKM5S-Ur{EN^G3t9HazeA;f`uEu(r0AOROkTv({7z4{aV^-&kCI_0jd!jnDkm-&*oS z#JL#dVh-A2Rprq?{QXzGdOOPu$bbuLA;;P4m7jj+sbN29tqB>w@2bu@7eesfi-@!K z%4_GuO{-I$KoF|+uG?Sk`Nn9ZVHnmoHo`n!cl_E@zw(RQM>aMOA5waubP=9_&HLZ| zn=k#(r7(>~1HSp{&KLtynb~T`sVHSCgOFyK0JGLMB|tPtnY2hw-nV@}TH{^g=M+jU zTI-dy^{vC*v16OU>dRmJcZG|RgE19vy=EmR0_}30-tt2yN%6}sUEI0Y_rsLa?6h&l z4+lXRqZBYC6pg5)QYoqJnlKJldqs{RR0c!@z?`#ho0OTEb;*%gTWhYp_L_%&<3Xf| zXrP#o!v4OWE&q1u0TI)Q;Gyi$^`Wvq;B?6&wI>q2S zzj<{1-ur*)V;}vawXPk9;Jhvnr*Zh;hu?F@owqyZw5DkoW8tw6I~Vpo{^;Z1dj8uA zP1|%aMsmIrCL*g<`^*=8*hFc8mhHUQ)=5)$^}?}nL|H6`^>+-e16~it`t#K zmsy&o$vHEpm_w;Wq;M_w-goN6_q;mH`^F<8G_7OK{qoYHbz$yLpFYh+n5%bf-}f}< zS*Q>JGheuH`RS)VABLnrmzWyoW0;Yu_3p(Nzgvn3V-;LGv^Gq=Z=6ESx#pP(%)%ey zqW|Qvzqt7F9#pNBo#LddBIBu)#K3LaBG8|H>d&8l{sm@sMhQm%A)=JZ?#{kejj$HP z!&^t1rbD1{n4NBo?tn2)>g!+o=4bx$>DF&Zt|5fB^C<_CQWZHx&ECP-_!VILI}d&2 z{I>_jhOC{_0aD6wzI161NsFqBwUuVEQbBPQ<%;M&)_rjGrT^ah-G@JdVwgEg0YxPX zf+hecr7*KGrWCQ(U$}7j0}p)Y%g;VnvuWJAp>BVtS7i2f_6gL+hBJn93JR$f1hypY z*S_+N4?OUpix>BeaU!6UsZ}iHHbTYegi+SZnoep>$1o)LO?dTiYn5 z=6SYWzyA8`&c5(p%*&Zj2VVODW#Nh&W+>foDq@28Bc7iv^64pzE3#V=2Y^wq&eONHH^)T%BujjsViOiz~Y`Ga|NaJC40`PLr`Q%nY+J zMp?zcxnxNIAXTdIjfnJ9K&;lgIVS|GjgB!kO#@WtoHjQP?e1P4=b#i;sALF$`f1FC zeP{5R#y5>)=31GEuK0;aX^3+H(AL@*M eNE1;A@&5oeRnKIuq;I