From 3313535b275170cca111b8b5963d6bb544e04075 Mon Sep 17 00:00:00 2001 From: MetalStormGhost <89945461+MetalStormGhost@users.noreply.github.com> Date: Sat, 14 Jan 2023 16:33:05 +0200 Subject: [PATCH] Add fallback terrain icons in campaign selector (#80) --- game/campaignloader/campaign.py | 2 ++ game/theater/theaterloader.py | 4 ++++ qt_ui/windows/newgame/QCampaignList.py | 9 +++++++++ resources/theaters/caucasus/icon.gif | Bin 0 -> 852 bytes resources/theaters/falklands/icon.gif | Bin 0 -> 1252 bytes resources/theaters/marianaislands/icon.gif | Bin 0 -> 1091 bytes resources/theaters/nevada/icon.gif | Bin 0 -> 1454 bytes resources/theaters/normandy/icon.gif | Bin 0 -> 1345 bytes resources/theaters/persian gulf/icon.gif | Bin 0 -> 1173 bytes resources/theaters/syria/icon.gif | Bin 0 -> 1364 bytes resources/theaters/the channel/icon.gif | Bin 0 -> 1358 bytes 11 files changed, 15 insertions(+) create mode 100644 resources/theaters/caucasus/icon.gif create mode 100644 resources/theaters/falklands/icon.gif create mode 100644 resources/theaters/marianaislands/icon.gif create mode 100644 resources/theaters/nevada/icon.gif create mode 100644 resources/theaters/normandy/icon.gif create mode 100644 resources/theaters/persian gulf/icon.gif create mode 100644 resources/theaters/syria/icon.gif create mode 100644 resources/theaters/the channel/icon.gif diff --git a/game/campaignloader/campaign.py b/game/campaignloader/campaign.py index 03b5a05a..776a6698 100644 --- a/game/campaignloader/campaign.py +++ b/game/campaignloader/campaign.py @@ -32,6 +32,7 @@ DEFAULT_BUDGET = 2000 class Campaign: name: str menu_thumbnail_dcs_relative_path: Path + fallback_icon_path: Path authors: str description: str @@ -90,6 +91,7 @@ class Campaign: return cls( data["name"], TheaterLoader(data["theater"].lower()).menu_thumbnail_dcs_relative_path, + TheaterLoader(data["theater"].lower()).icon_path, data.get("authors", "???"), data.get("description", ""), (version.major, version.minor), diff --git a/game/theater/theaterloader.py b/game/theater/theaterloader.py index 7ce1e626..075d1873 100644 --- a/game/theater/theaterloader.py +++ b/game/theater/theaterloader.py @@ -90,6 +90,10 @@ class TheaterLoader: def landmap_path(self) -> Path: return self.descriptor_path.with_name("landmap.p") + @property + def icon_path(self) -> Path: + return self.descriptor_path.with_name("icon.gif") + @property def menu_thumbnail_dcs_relative_path(self) -> Path: with self.descriptor_path.open() as descriptor_file: diff --git a/qt_ui/windows/newgame/QCampaignList.py b/qt_ui/windows/newgame/QCampaignList.py index d21d33b7..7ec61448 100644 --- a/qt_ui/windows/newgame/QCampaignList.py +++ b/qt_ui/windows/newgame/QCampaignList.py @@ -15,8 +15,17 @@ class QCampaignItem(QStandardItem): def __init__(self, campaign: Campaign) -> None: super(QCampaignItem, self).__init__() self.setData(campaign, QCampaignList.CampaignRole) + + # Define terrain icon path from the DCS installation directory by default dcs_path = get_dcs_install_directory() icon_path = dcs_path / campaign.menu_thumbnail_dcs_relative_path + + # If the path does not exist (user does not have the terrain installed), + # use the old icons as fallback to avoid an ugly campaign list with missing icons + if not icon_path.exists(): + print(f"Icon path: {campaign.fallback_icon_path}") + icon_path = campaign.fallback_icon_path + self.setIcon(QtGui.QIcon(QPixmap(str(icon_path)))) self.setEditable(False) if campaign.is_compatible: diff --git a/resources/theaters/caucasus/icon.gif b/resources/theaters/caucasus/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..9fb7935261b0b3c4b594e2ef21e9adbd68917e90 GIT binary patch literal 852 zcmV-a1FQT;Nk%w1VHf}y0QLX?077X1L~spGcM?*108M}ZTb31Plo@E1Gjf^$Zmlbi zvo4djE|s}2n7jgj!3=@I0FTlIkkSB^-2$85I-k}(p~pI?(>Jr+Jhj~bpXC9f&zVTqY1<%k^%~@N&-abkXp9((-}F=7-DZfzj`U)bxwi_Kn%}jMw;$ z*!Yy!^po54n%wo2+W4E@`J>7;#OwRa?)=s9{oC{XP2B~E5&tE{YPt*)wOPF7`Rx45>qXsWHbPg%CQ zyPlz;aBQDxYH4IxUBar%Yiw_6W^Z$A$YEt=XJv@CXv>;zacgpNZe?B|S?pn9V2Wm= zo^WekNk#JVCmlwpnm2~b8D?hIxbfGeLkARH!c=kiu*@QZXU?!O;{}YoG9w&%Py)sS z#fM_Z7);}(qnC(aikut);$(*`D!Xur)G<<*D;zjD3>vh9&@50i0AXT+h>0Q^sz5RF zA_Bp5%9bTtma-&)=g*)+i%tLqM}gC*Q>$KGV22F? zuw%;>AiFl~9V`F@*v-4QZ{GlDqyRv?xbfr20j#JXV1V=I(4RMtEHf-_D)8 e0SpT+Sb$L@$BrIm)2HvzBZrO|FEB6&1OPkjTAoe- literal 0 HcmV?d00001 diff --git a/resources/theaters/falklands/icon.gif b/resources/theaters/falklands/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a1a3b455eb41db45b3ceceede677fa2e507419c GIT binary patch literal 1252 zcmc)Ji&K&Z008jMrM<2;r)^nxnKrYlk<~JWX{9L$W`%|iQWF#q5al8A`1k}q_`Z)f zq9XaqN~zgvre@mCI>i)UYppY{t!1*Uv)omhZnxLfw!dP(|KXQRArWGjAwUQ)`yG%- z-IYq)pGqej&xt;fPsl8Y%_@vbW+}2*hv}>X`+49=_CY#_n8P`g%!PA{;&%&?Q@q3Z z{6r@27*3|9^Q18n-M%s-LqLpDXsM+-c1b!*M8+$PREg#@m7Xo67l>(lAtVmeM^~V^ zV#7W)#w<_EFH_`7EAScv2?Dw0Ct@|a&$Y%3IZA*{M=E4wHN=CjlcB}J<)QKrS~u_V1VTP@{4c?pQ&I1CaIm{6G1eol3$_{ zCS&?zh%N_~l|c*%#7;*lO4J;(0m(!a6eC)u$)sY4M3b9^DNiBFLZmdqpv^XbBA9o? zY*4C&bfb!asY(!5o&jcKq7t+?&m?CV6%s>1k*O@tssXV)nemjs1QuCTVv~?(DTgp& zu^HxCA%R6#YJnscaj8urw#xZ-wcN@P+0@0A8lfE(+cjl&rQD{GRhA2@RIr_oSs;~z zFRjv*SL=mNy{HzEJ5i-m1J{6NhZd~WN>6K{dNWdo80xiH17>d0!)Gh2n^4PHtM#1C z)eO7N)Y#73YtGrNElyi&ZDp(Dbc?yxT~~9lrm@Y{+E#bwa$Uof3$5*E+}E3%JDXcN z+*iBW+PYiXZ(hC9d$F_Ui<`aO?R}T8-@bCAucPD6)xN&2-u~`xPkYZm-)--J$J^ue z-nlz=YjC`OX#6YBgm?Jf;OPCKiEqXyCPyYG$L~#zPfdM2`TgkR~5{O!%Jzc0P}KZL*iFj2y0O4+P1 zIZw(BOQsy90^xu7`>h7v0XX1a|3v{-z6AoVc{sSNu2rid0>^wF|1}|a+9MIOwSY)y zKbO%se7Qe(vq0BRO?Y#Dw5Af=vrINt+r^{|hrvG2&|m|eXhr2e&wMTU*O_eym-N4|U;Qcs%ejQXH^dpF)r3 zr>vadCUh~=8+Sy}$Q|w^TU5PkAPCsvX9(HHi^}i;0c+O=4fQWvxb!G;dFJ~sY2b+f z|A1YjxTGM16PLq?n0ZtfbZPba2xm3<&)s9|Q<{+I?D_cQ52{lrk0UyQhaEU!9J+(W zAXR-5y@|vA@(I>Ju${bC>!})Y1UEkat09c}qh1zS6iMvdYdnS!2$XFr1P@5gv`Z7` z(GA(|Jwx2;`lO9XxrkrNCfFfP^aojJC^4{JN(`~)J}|8bC*LOp_bj*`Qt(oEbTg|r ze8sx8P1gra(Ffh+Q2D&iyR$_x@Lp*Ay0o7tL@7Li8~MA_vOPVpYRVD0Fu!c0rA;@! kt$O9EXQtRCCS|LMd+V7ApW3nfqYP^d>twuOLm&|Q5BCp^ApigX literal 0 HcmV?d00001 diff --git a/resources/theaters/marianaislands/icon.gif b/resources/theaters/marianaislands/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..2546cb88777389552c9c864aa591f6177c15211f GIT binary patch literal 1091 zcmZ?wbhEHblwgox_|Cu}n^i88RVk9yES*&;n^h*8RUw;MW}FcrkyUGz9b8c=&uob4`}(IA^$DW6%akXfja9OIm7XCG^36KUuZ zCJ`7doscP|mmDgV)u5W5p_GxQoSADLWfhYoURo&|nIP^SAmkn-77!*B5T~e}kt~^A zCzD;JlAdKBre+-DU>mMeU8_=Dtq~kA=N%^L9xUk;XQY&oE16v@l~bpZmTn$y=oTcN zTcVPjs~no75F9CN5$`CO(;%H)Es@)765|k^AeNf16qBat87$!)CZ(2(fxDP*Jbx5~=P6bXcUgTfClhW`$OKa7UYZ zXSa4#nzDbCw0oeieYBxeMwx$-R(rcfX0b|Sib7zdxMz&IRg`I6opN!tYG{JIe=wg_ zthI51S8AF_R)M@vkbq@`p2 zdGp}n;p6;Wyi5#^0xl;6lw5mc94E189%k^GW{~;l3Fj1zAUmIhK}#JDGlZ>6IJqd5 zd%9lSz6MU^Wsf9`QqRnBoa}a1$}IQJ9!pO3zB!g9uWsyYR_~uTulmQAkDu8C6daqY z`V>P>Tu^lB6w#ekH7QWpy-(E0;$(gJaOjsH3Z literal 0 HcmV?d00001 diff --git a/resources/theaters/nevada/icon.gif b/resources/theaters/nevada/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..de705d09b568cfe5823f2395ceae24057c1ca104 GIT binary patch literal 1454 zcmdUu>sOKo0Eb_^gq7x{ET$`qyx^TWsCg^YvJfxm&_ppa@s_%wrqgOAqLoUD2&pK9 zD25`60-^+h=&Pu>NV{3KHIHp;<(a2b+v;@O*8YqA&UwB)AD%D2lbFaOff+CW2K)&C zFh@s+eFvQ2E^rrDS9cE&Z*NZzS8t^6u^Vn$p3oKe0n^q|8$n9<|Sz*UM?!Z6d6K49$9*GK^v#6+>gC3325W2*Z zF>>iz-FLM&6RO3jHwI4E4iW2zur1Q#93`ejL1>qg8l?pcc@}r1@V307Ra)AnEN>f$ z>mE-Ps0un2UyC%Echp5)qZj(e%f;hCvS$%vKc*-i=Zmx#2eoAq-K8O2&gheJ<&!Yw zPnRd37tgF#)i<`VYN-uPv}P8K*}`n+w6NR7Y-%r$Cc1NLxSy?-a;|X(SsY$vhny=A zvO5Jed=;%n#Sq9?B2}A6$rlKE`b7N$gMEWi-hg6YSlT7IE0QS(Mm59okzs{Wu2d;i zs*zEJR@|^O)}WWrm(}#gTJG{BU#HVlbx+g_Cs~6aU94{z1A7!RqOmEF+8`L4m#QX5 zHIp)pzF}gq9(-N{K5w4=fjRw%15OL|vv(&z_0+s#La&)!YP+}Ey7V(`@z=?zDZ||K z1UNf2yD)Ds=%>L&qX9H5F5G{x^x(n$hs#f&J$w3ed2MZNeSQ7+jg9y3-+%o05%_=Z zzz4Jc!Vmnt9aET*lNFPZlb4xqm6K6em=TKfLHVKl`~a`d%ICuX7Mnm#rEN)MjJx09 z85aCy9Ww%DbI&HEd0J0*>nG^+kXFGR6=PVL9>!YMkiFI!0C zAYV1X1#`Dg)RV<|3=6zlXeD}x?U(QF6W`ju@#X_G9^r?B)ocTWjZR52@=Kk3dy8Al zm2sj{mbb?@8E5BrzPr!WJFYx5YuL`Ej^T{qzjzD2e#i{3-M!qGIDhL-Y{w>^U;>la zVMlTahrM!*{IS|CdxK;`<82pgD`G42hLIaaB@!qRxj1eB`K?9J8sfeay3*!VlPUE3 z_JE@3_=d3UATH_OtCKe7W7|51gC>~&9jWlXa=?S=8$Qe>6rOV1oqBU)^+YbQd z2%Of$k{ dOJ!zE?>_VHHMl3+j2Nj&CD~rHg+PGde*kkzQB?o{ literal 0 HcmV?d00001 diff --git a/resources/theaters/normandy/icon.gif b/resources/theaters/normandy/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..33686f05db09f1accb2aa5a9f1e3c24fc0c9b208 GIT binary patch literal 1345 zcmV-H1-|-6Nk%w1VHf}y0QUd@3=9bn4GRzt5D^g%6%`d478V^E8!QhDAQKcJ9UUwl z6*dhFG!qjt85%tm7d;&wA|4DJn51Av7u@JT4_UI5j*uIzK!; zB{o1NIz=c#PbNfCDNki6Q)eq#Y%5!GHD7WpW`98u4@VjtQWqISGA2MiKSVt}We*Q; z78-RgF+)ELqtzaLrYCeRZ~=6TU$X_VozjaTyc73V`OA! zX=r6;ZEkF4aCK{Oba8KRdT?%aa&mWdc657xd3AIxX@)R+n0APNF@~u!im*G8tTU3j zFq6PEpUFC!!8N7OHmBG&sMa^KQ%n!Vy?|x!s=wj>}ba9ZOH9r%JOf` z@^s7Ye9rE6&G2~7@^{emc+m8O4G)bM8?_J*kX|pDUMiMlHJN5Jpk*+lZ8xQFIIM0l zrg1r{a5k!OIGJr3k~HC65$aMJ=O586e>xAL1b)<18!cDJ$$O zG2}KiQGPXQ&Z_!SLj<> z@k~zfR9N;~Uh!OD>0n>$Wn=4UXzh7-?t6OiW@+Prvh=zuf zk&&5}mYJNIp`W0$udTPczO}u-gvjKD(eRJi_LSH1me}&ci;dpDzTt|A>x6>uh==cs zit>Ph@{5b~kdpJ8oA;um^{T4&x3%`Tx6r}A+swP-&Ai0J#LVmW&+Yl#@%!$>!RFlB z?bp}$!ol{=&H2Q|_{hil)YJOe+3n=p;^N}-?d<#F;{5OL_V)Jp_x1Sr`1}6;|NHy? z{{8>}00000A^8LW00930EC2ui02lxm000R80G;XUN3fv5e#u^}@Uo_1!!%(A9-PR` zND*k!GHNt4(IB;HcXVt}p{697lW4LK#5ZxD8#i)-{1Aet&YU@K+N@Ej4~Myf=;+X~ z<0A);IA7SnfphbWK4ls%SSHh0D^7KZJAw`}^L!-rt+XN6g zB$&{p447hs5D}zzBu5PjAF6Dz@c0 z77$TJTmjCRGiw=*6p>r^j$5q}Avk>hAhX2AX5p_lQ(*VaTP|V2h+TnVz(OBDFbq_$ zZlFafRiJrUpy2!vIn~ai4CMFCZvEI*|aQO(c>0I0`u4 zz)}l0wqOH~J6Ybaj5XLq0!uG+CQ8XIztj>7FSnplNhCyELrW)+K!S=miAFL?FR_dQ zNvDZka>}W`ykpO)r?BEpJgBf9D(k6|9AZf<^7PXVDWljD&O5hwGRm;T5<7_t0RaFz Dh#p_s literal 0 HcmV?d00001 diff --git a/resources/theaters/persian gulf/icon.gif b/resources/theaters/persian gulf/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..67a9ead8c0ca42e1137205fb229718acbe4f8943 GIT binary patch literal 1173 zcmV;G1Zw+7Nk%w1VHf}y0O$Px4iXL$6%Z5{6BIHvH!K)GGaWlKAvrZ^GBVpex#SbSwxZDVX_Wp`(De{^PN zb!l}rPJlU6fI4e}HgbhFeug%Gh&XYDIevsVe~3U-fL2+AOl^cic7s!HfLC*ZYh{9Y zb%Qs7h)9QrP>qUim5Ftpi+Q1pp)?(nRV|ZRF^6I=hGsQ{W;%vwHil?9h-Ng8XE=#y zHI8dIj&MDYW;T&#IFM*JkZn4iWjL5>Jdtobn{qy^V?BXpL4amRgKI*HZa{}{L5gug zh;>VfcukFXRE~I9o^3^xc0-bNNtSp;m3c{-bU~bYMVfv}ka<^;dR>`*QjBYAfp2hz zczl<8V3l}sqiaB-dqSaoNUeTMt$tFvZAYbflZu( zP@IEXlZJYxfJUT&NvMEFsfA0eh)tt~QKE)eqlik5RUgR<@K`wwPVHl2*EuSi6{At(Iw{n|-vDVzilKxRhbMoMN({f32i{zp;M8 zlv>1{UBR7V#GYu%n`FkIUdE$k!lY`)s&B}nWyq##&aH03r*p%ra>K89&aQC4uzk+3 zanP=A(5`UOv2W6{a@MwZ*0^`pxOv#NcG$Rf-MxF@zkA)le2;~Mg`b6xg@lTyji{N1 zy0U}7vVh66fy}#v(Y=J(zJSESj@QD4+rom_#faU>iQvP5;mC&N&Wq;IjOfvf?$?q3 z|NsC0|NsC0EC2ui02lxm000R7023`*w2IZLR*OnKg7v7>B2}tbHB4nI7cN$c5;@Y8 zNfWMEx_teDHZ7#CXPTD%V#Vs0tVM(tC1TY|lPX%Xo_X^&jhZ%i`0{~UHf`B1UAR8V z`bBG(H)_S0MdS5MpH+SNsDY#PEEX$~x_V*@M=xBseDUsGwHl5mHKVg+(So%L8d-c+ z?bWl#PM$q|^R!WW`-~`0ZQh_+J0=fZ88MK>l&Oam+cIy_pz&H3?is!xt}JHgxiWQP#IEa%6k=hOV2fkDVBF$JiYUhR$|mcHyuQ6GP@NyDH4bKz?i- zGP``#g%4`eFlb>J n1!8p~G~SH(U2|6Da}PP*6myM?4Yp_xJmh>cSUksk7Z3nDvhO6J literal 0 HcmV?d00001 diff --git a/resources/theaters/syria/icon.gif b/resources/theaters/syria/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..1c261d57f3308b156cff8d83c96d93dca4288baa GIT binary patch literal 1364 zcmV-a1*`f;Nk%w1VHf}y0B`^REC2ui02lxm0EZhJ7#*A15#$C^8@(Br`W0A|fCoASEIsCM6^xAtfs(C?X;#EhQ=}D<&r@DkUy0 zA}uZ{Au2K@E;uPIGA%bFFEA-BFfJ@HGc7hcF)t-BD=9KJAuus5Gd3$TG%qzVE;KbS zHa;afI4?XtFETPQGBhzUH8nIdF*G$YH8(UdHaasnH#IpiG&nXlKQT2rIypHpIy*Ev zJT*N!GCe&tIXyW#K0G`*I6Xc%JU%`>JV8D`MK?ewJV7QqMKeA@IzB-?IzdG|LPI=2 zL_bA9KSV@3L`^+LOgu+WLO(S?M>j`8Hb6l-Ktnx3L^?u5Jw!n|Mn*bDM?FMIH$zB2 zK}gO+H#rJzh{fU{O9nML|SHKto1ILPM@A2>G@bl{M^zQQW?eX;U?&I+8 z=<@OJ_w(uZ_3HQb@9^>Q@bmWZ^!D}k_VM=k_xShq`1tts@%s4k`T6$z`t|ww`273% z{QLa;{QCa=`~Uy|00000000R80JDJu=gk{9a^%dJd&jU{IBw+_zKa*{9k*`Xz9m%X zP9i*b^5EecNpj@7aR?PEl=$u=$dV=BsZ_X)q05i*VD96`FWShteG%d*VF*0mP(Dqdte~5JFTaQKCYbJcTe~LXHz3aG>z{;-^xmAa-1E zfgw4pphXXkj3ERI6?8Dg8#qL9L=h@*!GsHQI3PeD9+c1n4^R;C2P~U(5yT5vB#?jx zENYOz8w3DA#|0S#k%I;tD4|3RSR{b}1R%87A_ygXz=jJh*bu`D90;wY0Rfd?6skb@2>NMHjJHeewF1{h$0#19}?v1Jfz z7*Ih8DeSNV1qmEEfItg8JaE7ONr>u032$gg0Rq65P{RiY6acIN5@;YL4nM$v!U!_> W(82=`FdzW~76ib+w%ZmE5CA(IUN^S@ literal 0 HcmV?d00001 diff --git a/resources/theaters/the channel/icon.gif b/resources/theaters/the channel/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..97f4561a9f9eb8a40cc39fae4cba0648498fff5e GIT binary patch literal 1358 zcmV-U1+n@^Nk%w1VHf}y0B`^REC2ui02lxm0Ea(r6;fU=MQs;EY8Xvr8%S~;Q)(Vj zavn@$Dokx6N@*!ha4JuHC{tq~Qe-SuYa~)@EL&|PSZgU(WHDQ1GFxggQgk6vcq3GK zDO+j7cROKdHe_l&X=pZLbu3|eB4&CoXmKQEbunjkJ!N|| zZE`efd@*@{I$lF?SbRiUepOk1T4{GyaCbm(ba*d*tTKJ2TyLyVeV|#1C|-s&Z;>8k zfhA>xE@X%+Yl|&ogfnY{F>r$-b%rl?j3#q~GIEPBdWAk_gFobB{%MmPToc zZgr1(f0<)7iM~IGu`Y_kG>pYGiOM>Qz&nh~Gn3dllF~bp*)N;rF`ef%o$EQC@He6G zI-v7Tgq>W4n?!-2M}ewCjI~IPwn~nN}zsq$N^@?o36W1Y-oqQz^Z#crd| zaG}C=sM2Gv^kT5}X|(ldwfJwj^mDf2e7^O4!1lT&QnfHwfqzJfi#>&!N{*6SiHl&L zntX<%VWf~@u9a$`qIRyLdAO@_fr*HPjgyO$my(%{mzvZ=7Q zskXkVxU#gls*w574)YaYF+TGRG;N9Tc!Rg(==HSZXE_e!=+f!y-R0=u z>+Iw1?dk6D=kD?8@$={K@#zTv0BJR2#!Q(qf(R2TLj-g<^yzC?$PgheT)cGQqQyp* zD*-5g5D}u>ynLGVaSMc{ww2pfq_mI{#X*G%9#90EmsvBmK2?%WnZg^2H#9UTjM%}W z$R~NR^;!GlhYuAhPo7Bs8FLOzjSN9_3`u1#c0PRC@YG?Wrc4A88>i}#}^Th;7L515!jDr)$D;sBaI9qVjFXy!weV#0HA_B z{KQt^Kheyxha`|ZV&fff+;U7D0~AmSJ}qXak2>QZ1CBJm=%R-ksn4u zJLbGOCz*7z@?--BJn(=p`tXwuJy)ue&7{c?(~B&!ymBW221F3S0T$#yiZtX5S?Msf zq*{wBsm8KO0vBvE00a>|^nk;yIV1rLGQ{}e%P_t8!b>l`uoA-&NGP$yvY<5E?6OV( QlZ`phRBH`1GXw+xJJC&~%K!iX literal 0 HcmV?d00001