From ccde2126444f693b3f4c1f5f23d16628bd0aa422 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Fri, 17 Oct 2025 03:07:08 -0400 Subject: [PATCH] Add Windows VM (#2462) * adding TUI for starting up windows VM * updating to use docker-compose * adding possibility to set windows product-key * ram and cpu settings * first time run notes * add two needed pacman packages * key and package install * Revert "add two needed pacman packages" This reverts commit 04dc96cee0d3e37103b9866d9140ba47133db7ad. * add install and remove scripts * install icon * rename scripts and menu to Windows VM * rename also launch script to windows vm * update nameing * remove quotes * fix paramter and quiting after installation * fix launch script * update * certificate acceptance and remove of desktop app * move desktop app * rename app from "Windows VM" to "Windows" * add example of sharing local share with Windows * merge 'dev' into windows-docker-vm * exchange rdesktop with freerdc * accept certificates automatically so user don't fail first try * remove certi during normal launch (handled in install process) * remove volumes and orphans to have clean state (avoids hang on login) * /cert option still needed * Simplify package installs * Fix icon + desktop to prevent creation on initial install * omarchy-windows-vm in working form * Don't need this anymore * Fix commands * Always use uwsm-app * We are generating it instead * Make omarchy-pkg-add quiet when the packages are already there * Improve the questionnaire * Show where you change resource usage * Add default Windows share --------- Co-authored-by: sspaeti Co-authored-by: David Heinemeier Hansson --- applications/icons/windows.png | Bin 0 -> 76463 bytes bin/omarchy-menu | 6 +- bin/omarchy-pkg-add | 4 +- bin/omarchy-windows-vm | 445 +++++++++++++++++++++++++++++++++ 4 files changed, 452 insertions(+), 3 deletions(-) create mode 100644 applications/icons/windows.png create mode 100755 bin/omarchy-windows-vm diff --git a/applications/icons/windows.png b/applications/icons/windows.png new file mode 100644 index 0000000000000000000000000000000000000000..ce7b366d9f65d24ae8c313c42df3e84bedc22221 GIT binary patch literal 76463 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

{xxL#_No7m1F;1~Ftdg8y@j%qdk?m( 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�bG+*9m_0H@ba%VSm)1E3Vp9&98hxXFr!(dORm}T zZIA;5gYg97Oo_`K5e-&-5d_OXF+y#Q1@}#JyVrAs0CP#e3nz{2WTsn{7bpqrnK}2q z$|9z7lfeLtpabQ7-MT_8%K~vP(Q~=N^Ih&&!Uuc6~NGfD;Jnr_A)C3iM&%iT%fa5vI9~y|y;m5t?Qqk#i*OnaV zG*5pLry|yAx}ek87NSxauni!i-lwc96UrkxY~=cK-V`TrBJcy#xA-nH@8CG$8}oc% ztU&C8*|V6m{4?LjTP(aeowmG>oRQ5G`WEf60fsV?iFq za@>*zr7MiSYS{-;*Q;cC{pdc^*Em%3fIkbLbO(!BgX93jx$TIn!5{zCJm>a@v-0w} zOSV=}r_X6GL66>g=j#(RdU7-jA!m`XS^LRuksH?lBWyn-dav6 zUtc4B@%ikUZUarj;0XH&ixzTx{@AfpkP%_gj@EtwfiKaw#`4Lv;tJ)&QD z`&V&p&QtE-`QHo_I4<3$WMzzjavOY0W@3C&zgSb#eq7OX3A+zYFEbgA&-%n@a37m_ zrJa!yzt*D@<-K*T`LoL!36~@eJsf~3(r}JAyums!Be$o5^8F@R4)!AvEbXgP)1TdT z#5F!ve`7u(zkX1+2tVBU8GpU|(vxz7TsU2KPWti?emZ6pyo{EN;f=h_R?u-&A0Z8>B`DXj)S_mhJ#mm1mdqQ0^*sP-ktEd zVsU75*?p^Y0TKFKO+*{;pDr=*x^n~KnwcE(2WIdPXj?`#Fy`IGdX!#3JlqCD!}qDD*L7iy_|KLKm}$KOFe_g1PnLY}RqTe!hGB_3k@rjRc`m>9sZy)gF)=SW5OH{h6d2;)L9==9A z=}X&u!t-V+n~G+2yc(mLd3N1k8QaFW8^ap#0Hm^!@Px|ysd_>wLq~>pZ6O(PbXXTk=kLIW@onv{<68vL`3(a$5ov>_( zxmYKwhEMm>OarA*etk8~kIp1+4}y8qnWD*#B=^r{7655(C= z$!G11&J&+*BKiY)l+utFAT1`j&;h;y@t#d$aPZ1v2uF2UKZ3^!u^jwuV^WZj&@YDF4}<&C`{5T z(nbDhdVft`@h1~Me9x|l>yZDOb?&@@OZn|F|-Z(KwjdJR z+WKfD%C?4`r0RdoT0g$DMl8CO6)mVC15co(kq;$>NdW1|QS5>~Mj-%G;}O4io!vj# zb$U*w5Jz~TqT)8EIum$f4_O3 zmL}^wgX~;%ABqKGPmRDwA}%WZs^n|di`-*p4xAJ6crw9WB%_Xn?%_@A#fO6znHi{& zkvl))uPy`P+<>^8HAkTcDy=<@E>0(N41(DV31o21j8i+5&~sF zg#B-Q#PIUGU(bJ|C3$^u_Ea93!KWop^-0!krpaa|>uzy!DWG_;$BWCx zCb*QjldUViO-+AwL2CNNV`@6IBc2%-ScvJS)~3r?@tNy~I41*U%k!Nh#172eqku9V zoJTM;^Bni>LAa$~o{k7AS6j2M+x(A{5YD;xK&!~utYDNYz~f}f-3Z=|q~*L!IA@&fed#a;h#o~Ajd^T!J$=ipw7#eMV$ zg5GUMd{vD&lSgcXDd-oTH(K5@{dhFAVmX}hAMdmZ_`jeBZ48Y3V`kr`Q_;6FQy@U0x?76Z>B(R$OUwgU0jk3d`v5TDcYcbezQ_nj#X!DaTyh8wZoN6wP2XM8U7=8~Ks zRcW#yN>ln^)|(=P>s>sW)Spl3`WMK&L=MpW{4}7y?37q%{8f#Mx~4zTe9@v&|nEmR?0FYqnOmHO7&VQ z3-5^O{N-P9pVcPwIED$4BdJ}3Ua@)Qao!xrsYj1WVl9dQZ2%q*!u#9K>~IZ9yEUsA zS=@c@@Q;`4t;E#jc*E=!6Sz#l7tTB4A21MSrQz7g;~jYXycGYI%;p@faYn2-yq53Q zFNOTGxYJmSeENtrpbyNa+k8|*di!uC(k--2+U2~X7J&F?e|QAqT2s@j-L%*Yim4%H zDez)CFXK6DE>^VE>7I}|*&(o}>7ZoApI|tXlk?(x;ZLe2;fUuJxdQvZgsCFAi7KRe z0*Q2LiD-(eMwFpGcxw8Bj^r)%3~zJe9T&|V@pj>z{{UGtc`3Bq#2uYoKWS5H&N(mG(}gJiE%un29x-VqsZD+`c5lzCG+T?fh4^|P zPG+;#{_wk4UxT938V~6XSDRkJv+MbGe5&i{^{q5>N#mXXqXS*6m+J01emyw{;j_|Z z(!GC7>zB|~s*@7uGOr;4e#(2ZK>YRF)O3xP@M4!A;SJypRigmp5k!|x5iZHGPAdR4RZy(Q1B(eEAV&7-&~@0zv7KSstc$0*-7T*Xq0X*DKU#p%4l!S~BwbS|UHsyg#T z{$kDMKr4e}#2ep>;Dxz!T*Zgu)Ckci=sJa_V6v~!p8eDyGs}7^2AjAgqu@JW{CkY? zn`?mh%U@^YZzJO);XUlSk@^3x@2&O_hTS`JJuH(hDarG?DgF6AZ{{KHu9OE_1nPH>{!ES!VN&_(x-mzus!Z-+q7Y73I_L0XNWS z7zYci@RgrM-BU^qN~Q`FQT6!mFnc)zVeF9y9K~tEQGS)1BC_c8n(n8|OVhOh6#N4>vIafYXjxK6--xX;%z#YX3=8|sxjf>Q%|9u>!=OQ?vo7fp%e z&Mnam>dknlF@FCBh#$rnKYcSthlwDdZM?Z<=u(BxLd$=TL!yo@cZQsRhDE%Xh_FmZ zR^bxw2Wme{+P+jen&~i2fEL-Vy1vtJAi$a2wc3$UL4iVE}{~jI_tw zv(LzP=XiaaX}PztgTKOzsv1?(yEm_MThHfl4>iV{`+2y1_S-iynu7g-|Tsu2dai;w!-uiMXG@YfhvHY-W)6Qb{Qv@Z>a4V%A9?gNx)K2 z-_*4}tS_VfwftGxgf$z89rxt-;*wE|8WcSTqq8yAWLiMqVQd<|6~jh9H7p+KV1RO3~0w$`U|v6Bg0IGu6dq1S2H?m5K9h{uyjkTe*r}ezozMBt)Y@Optnm z+%Y-O<@I;@{p8E;&bOm3_|rFDOm)6f#+I$!P@H?XBEM{BX6`lsk*vFl&G7N(NN93}IW0m+iD|9oh5>2)s7khkMqz}Xd>a*;w4KG8 zNJd79L_R!gqp9;ygnW+9VGJ)o&$6VUm8^VvH8tYXWpTHR^JV;z1V~VV0gI#FLB%61 zQ_K!D$!BpijkryRu}u&D2qPe2HL>DfDm~25WKqJ0Xrdws4?2~I6v1<}iTcP6p zJ_q>7$AC8Cy~kf&b2xuYV~;#f%*A-t!)QlpG5;S zI1HJKooO7k*TPAsK^UlWkeIO{FpFA(8e3cVGgoIi1Q*Ec$>|^U(>oB?T5ks<#y$R# zawjPl?jC$xvhbn}U)|3{p3<_JA^G^$$kcI> z$n}vNBZcF}Lt-gOK+KG7QDW!y|1#p={(26G|2P=&s5s-yarz4=E<|X8-tKc+0nA;! z7G-GUix85mss<&vL+Ys)e!-cnmD!tVTS&-_L^22d)}f#dFg|59-%WeHVUj%n(~wG> z+W&sk&%eJj;#zMj2N0j;g+1`u?@DT;;8!&Hyw~B~8K_cZ@=!{%>Iwwbd_5P5XALr| zn)SIUm?=wO4+&lf*v8Vz&M;ZlNd?Uh+{4To?DRbUmU!_4>8uz=aoiGo8h3<=>Fkk@ z{J#USBtS%(g1%8rq(!73l&5ns+x*B2A<8J=oK#ZEWnGvP8}C($@x>Ub#$-;KP3j7I zxfjIt5-qIPt5?Jl`Vq@kE>;?GcM5VZ<1;Zcb-(38g z{Mwa|QQ_ZotJ=3xiZ$ScPNp}PGJh<$=Th&b(MNJZ5|BH7|DkTVJ$*FR7^JiTaUDP$ z4*ye|ga3FwZT`x)`{8IT5%yQUHSIE}Gg2OHZx2^9DUAj`qmijxu9;2b>rh)c%6$dR z^tl;9Ip?7Adi5Z~B{N=2_wO!*JdGa~MCO9aT2BG7R1O(8u@UCqD`78Bv0&LpC=`gg zpK-ok^ckw;JObSWVkbBP#FUBM+OX!Ht(2@HzaSI0gE-RtCwu)XQc2AaHnS$I8l$mv zfDxbVg`MKgtoU#4-a<>(BuUaVUEYm7d6t=(?}0wt?@})^%*@O)Pg1AeVVId`VwqRg zZ{#19mQotu6*qJ9?96|ryEAThxPkxvi>aunXcP?>NTfKT6hv%kv;x@9q8fZVQQfMI zqqw97=IB3Q>fPTt2jc42uSUflQ{q7hlMS{18$Wc?DOb*hoPRSVTt4Oy$3z8`LYpb`Bn&2%F#_75U;Nr zehq59E%4`~+&YWmj6rotvF)+?^R;I;Yi zXAcz46R)mUKB|XpS_ge31>7u&(_lE3mrO}#OX|FkuUD7W8#VnF5tqg%(a|_bPQ$!e zEghh;!>XdBJm$D1zkw~x=^jKYu2l|5_IfTBNXuvBn7v5X%C>$X3Wq%@09K_`ePY@o zIP=>3@LrTFw)wD=_)SY~uKC$Oe0^ta?D)_Xkv#I$QoEGG07^n=Mx95_+8O0@N4+UZijJ(LqBI3_LtScg3w3HG2 z7)8SzX$N3J(HZ6%y2N@nU-5)9T38st_s5?|6`ewZ(u~rwz21&&*xvysCx@8}2F*iJo;lj`d`#snEAG&5g1HQX>A?2`WS|a(*&0?*8 z@YT>m?R!YBS|0wgN?dC`)6b`-0fgQUGV}eY-dh@-mj+lC?nWH^@DubX ziv6#3-^14T<{{j>nD#Vi^jmeEF6IN*WmeH2X7&tA)*Ep!U0c?LX$8^0SVhn<;owE! z5pfK}@{>#+$VN>b#8S%m-UhIO=WqV72iZ8Jh#3qyBHee^iVh{h_fU`*#i$u0%Fy-{ z1zF<%lzkfX5Se3F!5%{-B3|&&v&CA!?(2wHqh87pQ(#K~zY&Ey{%?WMa@}6qe()*< zY$U)yLiLqr@k|R;{*jeW z>P@UQsiw`62JoiOu|mvC5wW5jgl;)Dfshi-qb`UD35213nxjLfG^p7{OqY6en7d7R z1Xy>7wPc{jW5QccpvfQ>e)e+Jba+od-StpPt2Zf#=NfuQt$2EDPr)4Io%skDy&5==tsO)HpTbX2Nr%h55)iCEh4UWYP!0zIa4X^DF7=~x- zc9R-a)n#>DHtPtud`ad@hLhj#f2?Vfsyr<@1M#2u2ktc;cj?M~qJu(uaj8-jvc?bz z(H#bAVaI=P9*GX2jk6C78RSdV*9nT@do@1|k?BIYPLOpH2+cC%3}Z#sT0Uw*jsExk zFJk-_2m_y$BQ6KxdG>BpX@!80YXvD5?88!242Iw3!bhJg51B{m{ERksYo&&nnOUYk z_l04>bBS`2OA)3<0gs|bHG7C7;r;TZ`TSk-L*WF(|Jk3I3_bhWj?t3J#DX%Cs2k5Z<1@vAG;+pEJ>T@ zMD$*vyO!j%!($CS&<;}jYa3LjOr8o0hcHoC2>6IL|BX z%AhzuY@JNxFC`nvfCdKtRC@=SbU^7s5;?8or5}RMOT8iyz<~jgqg;<7M@AhwA34T$vu4|dc5ms7rpS8r{5N`q^mrWBk%q3YpfDwLe6 zIsacAjI8Bqfk#qqqq%D60d3gtqr%yyGh$d4CA(Ng7-bQ0 zFb`kcBn$6u(U{6^9}PlRD|1bm@Xi3uZO*0{hWT*tD~`d4Kp1#&R!n2W9+VNaa4zkO z#3C~f23(O)OPr?QNZU7-*%cm}SqbXDs*`oZ5D`N>Y=NPb;ZS6h=REg;SQ=HeZ1}S- zkm6@mX^w=)E(lLiJ-AVAMT;1u^a}b=@s6`rFAA)Y9HfI!27owwn*-&>(!8fL5SwZm z>3`UB#h*$L-Bk!=VBiHO8+XU`U-DetgNyAinHFYq^{D9typ{!13-o#iBmhkE8;_}Y zZl|fXT|( z7ZCHI(6*!~A&!EW7HK98wf-7LqU#}dk_2m zAIJ@N&!B3fAI@(^^-a(jSTf)MC|RbaZE7ht;P8>({7 z66`O*3&intzA^w8qa*W2&idT#nCHT@T^9C5vrJz%SK zH>xkUTB}pa(_9QQ>S}LCx`|Z)WN>mR=~8ViDBk)JHJPx~+?{B`oHdaa_)J?p?7n*0 ze)M~B4CO$K0Z5hO6{A*K%FFulYHq-;D61HVon-S|Y+5)T%mqEDd6?d6lU1oXf(h%J znL79W!+9x91$}@G=-6S(14=g2$jvQw>@DrbUg0E32G)10x^TJUWe-E z|Ce8K4v1@v7jr7MT4K;wEs00r4ZrNKkD0 z9|zB`@M1vij(3Y_$P}n}5|B;P?^Um`uAG|o zJM|QlhO)l06F_K*Ra+u0--kYYTM|C^TH%;p0ms2TCpNctWF zH5_zx+Gi3xtz?iNn6GS^mGrB5tczD$hyNirObO#S)^jHte=KEV$D$q0y_q6J%G4zkSK5SiZ*)l?RgFtVmRA;5lMlb;NyQ)+XYM z3mG2e+$$X4?Im7hWL^RhzZjbGV2aZS!vEDEe!{iJU1;ihhYYQ>ss9_ zDt9o8I!D3YS=4FUY1H(%QPcm`;T*Ai=ma^flaifB;68tNhS;kSs^-U5LO3qtWqqg? zv9#UF`URs};bb2)oXFX?U3-zSgfT66WB;-J+Tq!zwNv)506rA|nWGweTa^Q`E+8(r zfr^@*;lHO|%=B6YGaJ>wpu&Q9#$Iv6%u#UAJVPJ8pTJ%-1nwp+-xSajC{a`mi$k?G z?Em})V*lw}AwGjO+%h;XadJ62$O-pbS48|@oy`#gVQY~xJhb+s%jJq)HTrF!RO3tG zOgb`EQ3e3>CxcB1!pMfv=U;dXF)kk=55`YXHl8-4kt203$2Nw|0fRWgL03f*2w@amOj3 zrWuq3PIXd{76<^*qzm1jLtP(uTl;>45lJ8fV*#RGrJJ+XFF8}bq{-saFX~hz+Y8Qb zMtRTu&N=0W#K+k=a#ZRM-&twTjMsA)Mh{gKKrNDD2r@iHeT*pdK<`NWsoo-Ibhp0k$joL3(Gk)JX| z4looe$KA4z4*=jkrD=Z{lsp=Tu^}P`r!POKDz7aMn~wOn5li%{q5bYlNKG>k^L4sB z3Fuh$555jvYA7-C*q@)|@|kQmm0N%EGi;}R7=Oe)jK%~L#@-!_^Mv_OhZv44(GM|=*5L1D{K zQvDVjzuxO+hnQUSRuvqHuAe_N-S5|T^iF^R>rX0|?22#vySolD&_uFgHZfN)n{L9V zCNyiy;Zd3eiQ(Jjfq7-+iYXBD-t9Eg?xSlnd`RDeok||lW^h#hgTQb}?QzRM3`QYp|K0bDL60;61b94mY>kLrmGI#TWnw+A$bvJQDN)m-j&)xeLsLY& zYxsP?LmHUvYW5iVKKY%$-{isn%s$(^DP%qmj94XSrNcLZx*&i^ID9UY6e$fnnMMTH zH5)H5YlRIDz#o}82I9Z(h90oic5MN@q9}22T(S#U>v~ zn?d+}MvW^6Pl!r$OHHT4StTB@5K@*`cRoNLOuKA;96i1ciOZLEfw;!YJclAH(t@w@ zv5SFUjh-Yn9ucoEeiBKKsgqV*Iy4=?%~3B|eHiU^aq2Q4MocA`ZD^(WMpx$M&H0t( z@c9D20`OpOfq06DbLTmyZL=s?ZV<0Kk8fhSiB!3a9Cbg&NLc{4B)3djN!J-;p0xkL z`Dj>rKe*TR@A6WsHE(D3E8*Jwx?*sXZ!8IcDl_K4XjcQ`jm}3C$~ra8wC&mlFUhmp z4vmkq)134Kw!w7g0Jepwtr{ws>l;zif9wXtHGZNtN8D2b_r>!S*;eMZXnA`QF#_SN z31uYy;3YVn%51vh_KN}i%Z>h5S`d0}7{M_2-u55p0KzGzybWaD?onVD_VKUOM+}Mu zbf%gfoFm==;<|vC!GVG5JP7-J=y}WQyOxEtuuk}MuAr*4*$i(Om(I>zdR<>Er*Id6 z7!L9?WNH-@#W8+;$-QfDT(c4O8=L#huJhs3aee9phB;!*IbwMSvDJK#Em-O*h4Q-| z-Ls(Iu=%%v0e9YzLSHgat&rNZ0ap!0xXVvo`lS(xk{rbNy-7HyfCUh2bz&j{%^Zrr zSYWJTSu6u$Nb-lSZ&yToB1e1^Yv~ee1>g!lKf0S?Q1+tn9%WGH9++Ibj#Q<;>GR0; zzb)nI!Ax=h;C=T8pN(V@e~tmnRC+>z1a8_oz(GXHmi2_*oUqm>==aBx zqnEhMi*ZQaf9GL!VvKvH%F&~8|145dR>H_ad{+cXB+b$2soR>UnjZGCzj<3K-Ri-=E0w>i%FXYb!N5uKPX zK{<}2{-ey=GR{+nE=`^dp8lOpE*32=DOfhogth$xgA0or(L!}utd(_L%E5#)-k0f& zEjLk3%YYczZ}OjZ>heMg&@v#dn@oZJhCVapdro$Z0!1l1+rW>q6tTa5v;X4nT~{o> z+;%w%d1U(U>FDTq(T{{9D4de0c(DKaGfS z_x!f7VG10V_9W*3Ze+F+0x`HR^-&ttXaVgIAx}O3E%x|T>MhM_w5au={X_LY z4R!%=5CPg4Yp@L`?F_E0zcK7zz(NRC3>~iOT{ZoK0Al|D!75(`oz!y0=ze|};zR3v z#xT6s@=#F@b0NyJa;1hJgBsXHx>(8jK%rfG-K97om)~NHkj|9AvH=a7KYvzhFmAot zy_kI=0FF)7C@{8z9@L-)9?l4QY3n=o#SLp@sgBhz=kY=K5HtGOpFHb+#H*pI)h%mc18b(yH#u&> zOFGL7ofBz^Cb&Kv-|Jq)#D-0D<%j1e%3pwEYdCY4SnEIeqcAM%78Fkna03C3#%` zX+b%cx(4ph5G3z?+`0=X6$lFb$vq-I55(s$Tjx8d`8_4-pOkwE706ry=)Edm?BbMJ ze&wZ8)a|PtVnr-yc<3KaD)s@R5c%OkJt3{~U~1JZt?^$Qdu39giBTC~390ED5Wm$C z*Z5Q)ogz}cd*P^}xK1iK?7BO=)VwzI8Vs6VOJZlby!9eST|94y4595JsD~wxzQJVK zSt^e@@9Vfk!nC%mj+vFj+uFt!IwpuI^OgnqK2y`^)zqZ7>chiTEi}J@;d69!QhWj+ zRqZ)VXsI%_dC)T^GJ~2~d1^$xl41JLtOr?+{t&QEhqJphgZY{g5M0k7BEA8!%AB?M zFE=;H{cv(hxUuVFJ8(NRYEG0Ajm{k_H7kvk>1$AZAM1%~NW~p10*2#?kM7`3Y*2J?&6c-UoTJ zRZ~uhJBrB=*mfkq2%8eLUFb_B*Rl@PG2Mw8NSk+}nr>CJZ@HB-ciC6}tq?@SZ(=R6 zp~pJzc6#gF6^0^9gWp2L5Gx1KhnOEM%F3xS1vd=NKrB_L^bJaQavUWEv}TQ;%>k>XrXxhSTw<{-zs^mpX|1p@e5;&}UTZ5U_hXg69Y@5jn%=k=w92BB z#Z#OUM~G7Xfb@VT7bAsD>%p!O24Gqm3;N1bxs*URNXqD8PzJaD-9E)WLo0X?se=5k zJTP?%zo)0DxkWK8uF9J@V8^BYEX2OK7&y`6d`N=VeLJia+6AfmQG4cnI7K1c{4GUOc?3#MG zG7xipun(YXV+!_B^k7JuZ-DQ18jWYH##w6mpXn!CAHPrVLeJ)_muKo4Xl5Dl#%5fGd5UzEz@Magu2aKonVUJP=M-K0W{%a+n;7_23ec8p#ZjyZRT zhQaV8ur`G~W}wB!AzVM4J8CsK^k>x(=g5Tr=ntln{oe0iFgIL=8Le`(4IS*W(vH;< z*fI#kS-B-b*15{Arj15u;*pOnE9EhEDi`SHLmHbw)HJiOYaF~x>z^GU-hlY;-hj9O zh%xswop$>VvU0Hn3bIUV=LN|8JrEBBIvsnR3&S3xk}k4Nmr*){1C7H+iwcbLFiZazXZj z*k)J+TxC$PoQsXTA`LL)&GDCNhjSc|PtMlP<1!BOkuCbX<4aR2q)lNm<*K}Jr+T-3 zYD>2n5ko`lp^x(U+ENoT!)~Y4lIIA+2&DfYl(a-na>E%yLwiVtU8{sjzstoc6Ou4dofa z9l}?SqSx&iXZPYt1@D6Mq`{*BwH`y)bN%qOcH0*ODhM#RI4qz04hx}ZvWw#t_gBw> z_>W9LT%Z}K*_^v(;Jw_n7S^SdrZ?ob!e*du>EQ@X26BfiQYcqqo*`bjlsl5~oW(g( zZmP?<&D6wWL9r|XH;RV&bFye3B6Y~Cap_u;n{OM290y_z{kX<>nZXp#yA6G#8l$dg zNi~VKtQFk+Feuj?yF9glpxESR-`Ajh7-*q#GX*VBpiE^j5p3o5l5Lh+K4q`M2y>_D zN2N1|EDvOSu0DNkPnlCQP&yj}@qheBzFkLLJ#{iK%0u(}Z_>(C#$^!=ZIn`R1V8Ax z4m6b53%&vJJyQEd0UewGu)w>707n5W>>xssJx8Pxe@+S}uducn4io;#_+iJNMsc$a zTEASt@O(oLvrMa>t#)wrdG|Q4Z;-n;GMN7=?_88eFzZ)u9@X0~Mps0STN{$T^YAEX zIXBEYQD-K&H7oBosCCWABgcnuJX7KijW)v1Z9SI!rlF5HZK4737%KNPz_p*hlh`3!XyafnsI+&1}2lcN-h%6u!O#DB%d3G=f--J&W1*{lIZ z!!jf_*#7$JoV+Fq-Diybr#Uz86#sc3)_57^i2+>!ZBve<>osKum&t!wibE&pF1!LV zIaqL}&+nZm7|c8ORDVdVHX6P_*hk%Qhw=gwKNQLHjt^`$?e`fSZ~ZXWHz&&XjXcT@9X8PR z=W9K|;qk6rr8MX%G>utSViHr+fA`7}*QYQ4Wj&nVN2n6-5JzK7b>{c8hSu^RL3brq z*)li^Ce8rJhXUv;Z8WMFU2^|zGGkGi8x9Ttc+L_<%L}S+Y8(Qo1DyuqKYsynz07UX zRFi>)HDZ}pgj(OcaAS$y^}*MbwXLOu;f_a9>p;v-Pd<`2SK#LVIW>+iuvM<+N^z`( z>KPu_({xocV->VofRgU}mEms#IxCdUAp+w4K9`u}{!;$0)`6G<+?dwMJ12RbH>_DT zz|cou9?cPp`iFRh`C|}^VdpI~?N`Ji(BU^1i1}pJ%}c_zi&|z#0Az#y$0rRve$6c+ zuJI<;l6thO@{RF`*mJ(vyKFt=s0T*JMv7XBfzE4(dj9qWL(5cY-l@(qrl8__oQK4; z^V1CG@%FQw_KzE-ae0PhPG8!Syu!AN2E1iw#`#3++pVTp!D>HFG z`n8ybbkQkL{8FlZOd@qI%ko@QZq%W;_cC?4lzbfo!akwmlBl@vvjTcKrpEL9xWl#d z9BTU4{P~~L_zcAL@{!eZ^^faD_(GS~Ti4ZN-WCGssfk0Lt>P<>(#+-H@Xi~)_=<9Yt~MHxDTo6KYRi4rJBZkZl#lNwMrJQQ_Hya z6(B&&LvuFlFi+X2x35=6DzH8TiCSobScFq}gXjLr5~GtSw>_VP1ItKo^2(bt=q@YI zxaDFVk^4P?wf#h&9R%WURMWkZ^`rc6twp)pwC(}>%7!_r`dJeSts8j6FR4ydU;G@% z0EMfRMbcZXcE%^B*$#LQQ^U)?OQums-%tySHJeunb`{^Mi-`5$(tx;Cn(pq362uw# z0aFm&;*&RzhR05`35>#^N;Iw!-bQEr%D>b)HkQBmTCXrusrDp8LH_sHyzNkP0?)VJtY(46y#)jEI9tcv)|! z#!KssGL;#qgKg6d9@(kQr^jIDK~!bHV>B{{w)0i0&W1}4#8*TN>~oZR5tA@EM-1;z z^)lAc6BN<_ApYXKX4t|he6aWJ8EIUPv|t+q$evTYtO94867O@YmhNp$#lkB>^8^G@ zsm-+Xw<)TzoCY~hO>4+3F5#iI5G5Al(oqm#sh0VVi08WxzVO_1&tL^3r}JdSeMPt+(Agdvve6pDT3F}fqp^^U>#$fgib&NdVSFnCJi zVimTv^tE%4EdGq;@7_nL<>N>!JGhIv$Q{`9WjC)^eHLr|((^zZpdrxKS#Ww^rV|*gZk^W8s3mFG7m`A_^@V(GZhewk_K8K7)@Xx(YwfuAp^9`EMtD(sg zk(Soz@n*Z=i$JJdp8w4b1JZ*{JWwRo&#jUM7n#^b+)ndV#j5G^5pj+z2vjQ%yQS(G znM+n(#Md`bjLS$pc3KB!zd*sFCX!lqlLX^(TU(p4&7Gxq%-mtkfpI;LVTxsQvf}Y- z4}>*aFs~j^9f<#@u52DLe64rUW$2QatO^q~xh^GFn)Qx3a%m#3AovEFl6eMCI! zJT;voUk<9dJ^d=?yY$E{8YhqDnjV(0gcA{PUr};BQ>$w`xB7Q7ML?W03({uF!+}`i(?VMkWc|^~{EhU9PE|W)bu#R;)eBA~-S}=eB$KK(- z~mJ5HpgyM0K~BAT5uEV8GYqKKs9-|#KZ%DSUMaL>xzgg@7}X; z_&*vAmo!xFN#FvS6XW7)977hSf zEHsuU_01h^*}_$CKy2kp5hDe?r@e9~t*5p2*cb3Ai+b9&K~&$-huAQ5g&>wm>DxGRnxMr&MWJYQ!P>K=$S@`NQSxUfy2(F@xcGq4q_I> z1hjNof;Go=mSTf9Nu9MWYFd|Ai@tjx!@s*Hr!wDg`99~z9Ek(HQ6UHiU`OGlS=;uL zNqTXsg|FbD4tGD-T8BN4DJr)H4lq9EhSU5o9+>8mJIx0kw&?V8lJ&~A>@(-OvK#p< z5dZ26hzo%D$pCAy8#E1^RJm#t(=`FH)|ax#v4WV)ya3934zF7_6xQwn+< z2aO_l-hBVDeW->(?z%9mW|g+zTDb zd_iO;T6I~@Apqf|;XT$A1L#K$_=CAZbA>GzEjAGWAjY9UkjKmiIl-A;_4-qBf79`# zh?o!b7})Gz3|@A%I)w7FHvj4^A?cQ4%6z(=4cc^n5L6&J4Eue&uF~eLA)9FK=V<2< z`o<0-fkFdy=>wiyv199@c$>LBF?ba+_WEy0QJhx6|-|=frFzxgKh1S0^C8 zeiAp~uXRizS1rT2cu@fm|3NEXTDn2kZ9Cv$82?ROH+Y;p*P2-egP52-t9`F_;ISd}wCk0N2zmi`>{24Myx@Ah!MDt~FmjGk`W!XAZs@Td zMCHPcp_&ShE>5&2mITr`5X_gO*yGBrI)YRt9D9sX8Dv@BJ2+t1;@z5nrzaRwvAQGoM=yzW3etGS{jo zkt~X(gVO-k2t(A55fz_Y{h41Y4HY;yoV#r0w6y(TO*KMGONqvZ@~u!U&Iga;Zd3NY zTu1IF>MxgX)kRHvM0_5IeIe%|+4H=fNL779L4Q;<5&g@4BnQM=Uw45ZExn1RrTnbmsYRUx(k#xaA_J^{itQ?}>(3(C2dx>e0i9xVI2Q zAXd}ys&@~ovpHf1;^W|3_9KXZEW&G|%;}+cpi;@E5Ui)UHCBFP__HqA z^V3ndSYDZ;U>ZVWQ)>scxm*&>1{6xEeL+Kh-&^GX811q66s%5sX2t-xBxQci{_sX~ z4L-DZRDumWDie(LeOxafK2A+{YdL@EgZ8Oq6sz4QZAP%pcT?hLX#11aQo_o8fhDie zEo64q^Rrw&nc@4oi&cH#pRJ!g_H1DSpF#i6Sps zb4dUJ82mF+kQ96~_n6=FQq;(zpL5;`D5Tf+kkaY;M$TxsS zt*hXfFtcVG5yQBE#47r_r!~XD#VHe&AF>$y`JQti{sT84uFKFPyVb2^{kpVWH2{`{ z*I4<@%$bZSR0nq^P~Kr92XJMXA2MPvH){Z;v^j)k{wqf%4yu8L5NuJdQs$0RveS6Z z5b%90^^bWO-P{1XzSsywAef~pG`)^d2dQb@fVf^3;5Ve70lqbThE;ZGpIe~H1*-2y ze%8mHS4R7@#E%pH*)H?3JXg<87eK;tJ6Zq_#hAX{XZZSQI-!ZtHD?z>th|h+yt0M* zJcVtzI@R=B`I0`(^X_dS?SWEUo3?vNYl#IueCUogW}f3D&<=uYDHEUHTOW%}1g0|w zfw2D`JFAQ^r%cf>l}+vTJ+?*|JRHw~UV{e#Kh^WY!lwGn9PxR@^!p7sf0wFh%_q6Q zeI0C9DQFOLR@ZtpXV})BU&*ZeP`IDOgoX}%_uuZt)W0WBV9bNNNHT~@wOL;0Wt1tu zk>{wLnjW9#Ad#fk`vEURf@S6$JQ|=b|~+v0Y!+Z%Fy3S+oi5_YXaao*qSL; z+pFWEZRNGi-NCmc6VG1%UK)BN7`t?VIw{S)|I}8{Q{|9ekEol0{A$5K+;(4L=9Hnz$W4Gkf0 z9{tgDq{cWQ?<@rS>fo1)cCfq`Gyt($4kA#FH};?Su{|A#J?j|OOSt2aR|0t3 zX-(8}4fzSuqMOb1-oA3y+s&J>Q5N}Gm$F3>4=_yNUFGhF{zi|Cj2#TiXR#0k(~TxS zOyqmJy>@jA*%by30%DD;j`;B9r;Yg_t&Q$f?9dd`&@F0!+^a;|WELJlWE9uk$%blY zvP!|qB_Yc9P$G}{>0uZ*(&JQMlhCz-$*nTe+6LfoOIn!6&fcSqu z0>ppr2E=s(VqHL7xy|4Vo({Nb@q~({dYQ=i{;>|65;;sv8jN0^)+I?qch; zcOeGcSy7ss7hseTJmBFziSmj*_Xm1MkJ57mYV)^Z#m*pyO1+I2Fe>))m*sJ?k}S502fy1th+ z71QW^FNsxpttZ^OTxeN6srIR8?)BUkOBpB>m*a2LREG@NBcowa(jy1KHA>v%hw_+z z9WWPdK1w}7$AmUeMj8xPgvssUFbCJNX0~VWs zwZrv7y)IN8SY9%Tx|OFWNU%mHJR#l82TH9dn%HnIJ8xa42zh&i1whlOQ`6+GRwZ(tMe#CL0O*AxEL@9D0Nuy;Xy+a@tzeY4} z9&Sg#CvOSXr(Jl>cLK2>_LKtx0x`H4Q69c^Mzy~pvt;XEBKhlw#yb%2sir}!^%fCp zj2Ayb`<&UxZ$A{vaSQ)@;WC=lJ{;BT^i}>^CWf;$EmVRyE3*T{dF?WnD+SJqvEaA- zaJ1IiLo4H3!x1qhzE)z3>wk}k35d^I%E`xb8jBZ}d!=*8+SdnzAd8(P*$hHnmlORt za~;xh|6pk6$MeZcr!Zn(xA@$NhDBS^M#8~-i{~#F6VYV=Zy_N|;=UnSfxfc!1ZH5AE7W6qND=^NQy(`%BMba7?^OPc+X3V3-eywQfK>MZ~pc zL$*K@d$Ria*%7Jsf!If7t4h8kX2{_|BDW~_L3!$npoWQq_2^SUn?Gt%Rk>HAk?Vt`Y&=kCAk-s+k-nvAHf|FQuzthX@g_mmjZ+IZ?#9al8E!^>Wso zg1X#m8?8ED$0;Dbsirk_A|eie7!W_t1&25;&@xq1yyYnlb({wfCyfS ztbC?nAWHIN<>s`&KwBxY0zj;{tW{qyXS?y>$lTbjYh=fh{m7hO zJgcU4iM7m}5!A2cpROl~Sp}8fIJq};e}&-5c{}Cx(5BE9+<PKy7aivGID&9J;=%ps&@PgNWQQ zs*%FIMZ{i5ECONU6dZ*BIc-r}qBrGjuzJl!-q={V6OGMCVV+A@#D#zu90G?pMARqv8BE(`QESFdL5y%|d zyBwctRN3QCk1^WZZ@AF*z}jz^0nfsM6jkLx{W1U+Fi>(&$Mrd&SN7E0#M<9(6eMfa zUR5_B{=M(2X_;6H?kth->OOPDT$6l!dyXdQCUEjl48nFPXbT3qJrPcY@`Kbi(#apO zb?2~$R_GQMQ_}QLd7d@5*3<*~4UeQHp3o7TTD_eE;$L|K;<|tsz;mgoLfsW5=B1C& zdZ7OsnRKMU>g^y6Zx^?0fIoUvc~Vv5YvjJpoS4k#6G4!@Wi^4!J_F(0NpoZaFx^(g zn~Ozt!O&+Q{+nL|v8FoW1ts$i{UmPwnGLEhvaH`YNS4y*(m9KqQHIvksFZ^Ni4rkIXR`~+r z@gQfdg?8W;g!&)#2u(R4-8n1yDJ7>KGNT8kSLu>SWjz1V&XAC#ROJxemgLpbWI0$$Rs)??OLU<9)swN)N1;oGnDG_mA!N9!biW^Ya0MKGLP(+vC z6XT#IwpN<^a$oEHy@ocgoSim+pk-{Psto|7Jn6i#Ctd;*1a36YlA(+jiWxOM6asPn zwNkn)ju?1s#xriz5Ew-hJD}EtE;te6n2wtO#AW%;0ATn=0_^QgFL5k7n=TKzt}iEEa3+w-jE6XoK8_)RTs)MFl^MpOcVa)yGJ#Jz3yTO7ilLTk+~4e+D-cW)7KH4$aE z!UAaV+m4{^B2w-Zbb11$UC0rCyez#AeFozH=0HRYs_ApIGsACQ5*e^<#oz7C3!F(I zW1SrwPEFKinz8B@5Ue{~FhjH?nOnEh^h3_NxQXLN3{~YXpMh8x5Le)uMc7ouPE5>k zFh3?OmLqzOFjt9K0Lqk7&Soo$gy|H5K%6&5fSj^YaG3$kC}}!j)KJPIz9E_A z@-0Zk9cmwYHtzQoh>s+)tOss=xg;rnIIdq5GqAm;uc+4r>%g9??<_3$j-sLWSq?u8 zTz2f9n$oT+op}h;rxX_RJZR799-k^v>RV#135fF@VK)&MLgn8M&;5Bs8O*V5mQ?pi z0~E9-gC#Lo_b*mJ)k`_ep8;`G11&gNK(wB^XXP$o1!W$&eWVa6KWrAk+CC{{K9YXd z&Ycxg(`SKrAG1PpX?c!v`fL9HYf?U2dL(7Y_WXj2RpV5O+1dN@xp8j|l1tmvNyCUf z+XtmDN_>P)r&_8{kE8MClQ+w3uRnv!nc)fr)2Vxt=Gr@Lq+g{5ZZ0A|@2gijn(?_{S^>#k>aZXgnXmj6vqlAsy zTQ_#d1*bI`sjQ&A@WupK z!J7qd;7qqm-}zLAIed2R{rsn$~+ntP6<6GIH!) zrmX8nvHCXun6+wW4M4y*Y%X@n?j9+VWl9UtW;Ac%=B=A#@Z1=P8HAHQ&$-K($XLyz zzPv|NISz>jGk9eN503xfD6{*t=Qhan(?149chapyjgfBY;8HoSdS^{Wr3dO6mIdHz5Aq zw}`l|95HK>al<(BSU?hk*FczD2|}s*8vx`ZDmk z`f~2qmUY2UZFGLoiQdWU4-tXL3=NI+m?&6A7=Tk&a~!Za`hIKm@N$hZ`O_>Ma{h(; z#6xoc;fjP=_WIcCnyt)yC%s6}=g7|S^E_E?#gVD6m77c;5IYNuKn!zo5H8ucd8w5n zw*rNYu88>m*r%oeh{wxE6tex)M!p^a7kUZTw;w2FfMj5D_CjfM_~i9$Ywyih?CQ2Y zZ9~oujJe|aq&G?pGMn6deB^EO$J4f4ubb34nzO=^ z!MTR~uwLgu7^7@Xee`haM-@)LT(3P*4rJ^RS$`e_VnY^a6`JqEY5*K?-Xg$ zIH~emd`C(PIbp>IgP=hcA}@>`n6mha;l%aD+HWP%uzj8fBjSJIiikDprLOOq#lMp| z&kUk%t2)c?YFhSGBvVu4^@g%3YvFnH;_^d`I?NgaNa$ksp>?OqmTW1I%3+-FP%m!H z&urUHCE`$;$lVt=6-cR7qgB(u|@NNtlu(PXOUcs;B-by76c_}7+40%4-vo3sZfYC(FkJJl@k91%1$@O+P zRMWXIOxmPSi}yc7WKo{AL6y$`|D^S?RZusl>;n_9DA zXt@CeI>M>^z?9xeU`d8e5xW-$KShj$2;-e;tbvD|Nz74iv+i;Iajsr24-$ma}Hzo9JvF%q1 z`0EdU_vb2GC^F6u@sBpY_$lJ3s{Rps*0{s|$=d$stR#Di=NGp<>{EL)5bG*mig9F) zt^JpCpVih_ZQoLiL|CzWIBSSs;)H)zI!sPf{GiX)1bG|mtHvsBu4mrw(X6o}f(pI2 zjV=$1pQZGG$sby~24J%5y^i=$j#wH$9yMO>>VaD+mHGS#IQJyZtvdT2K`ze%mTe!1 z%}&_87lf^7wckRJ!e9fw#>g`@U#JK5IQIE$Hg<+XdTwJ0GccF98xa4ltBzRu3L6U^+Nu9t{%%Vog_yR&tvBi9fK0*U$=T5 zLn1e))RoVR%D@0efsO#&vR`^MbG&@%0^;)M<$H9ovUO8r(@>d(t@L2rm34SJiqgBL z87b1jRC;KD37UqYR9I4Ug!XlOv4@$;dOYu7k(PObsb;uPtMdlL|Mu_t>lYB$r>gM{ zUFvtCnzHqi9n-|Lk|0m8LNR<9cNGa0lCVy9_7ClLJvSLqm>2Glf4aHXK$z_jml`Kj zUmlekqwxN5D4f?b^Sb&I^bEwh0r9Um0K~uI&zi+0TfslSLn44`a_N3AXgcz8JayDy z#C}FiuEnGQ5HBH8Ig@oA@*U&Dn`s~LtSj2AIl-7X-vF)kURLj})`QJE5Z9Q!rjJq+$LnEIm-{*Ng*v1mSkn^B?jz9nbfLP3Lx;e=b2=mag_&%V^9Z*ZT8o4jM zgez!bAxKDO3T}}xjYq_1f%q551-O_4wk~p%y`X2h*?-sEEBFxFXX5h)Sggnm6x^#9 z8{O0xeUlubh^A}J_fo1+)i@Sb55ysyiN_j5NzpH1~Yu+?{%PK5lLYyjkH@SNL)*PX2m>6h44FA+gymXaD=_P}LSIS7ZAY|ZOl$2bMVpX-RV z55(s|7f#M~e{E@BRMN90Rp{Dw!q14Ez1)Nbs!a6YLxVJi8MD}&Rzy+jh^cD|o}_f8 z{{tf6(74gr0Gp?h^&$}GAX~w|$3^rm!e0m9+<8iO`@D)KC6e;+(Bd_-^IA}%q{=!k z^pRX&poxbDdo4uvu&;x(9j~jL+zU<{kEZy*?ui{_gHq=5V_Y|MSVgaGI8J zF9yW_*6+OKi0cAkEb1LPjP2yT49ucceX`+1 zl}=}@B5R>r@+?^%5${X3u@#q}M+@LHo=aX2oU1Exb|Y=asI*CzS=ERmbKgq_xc$7a zt<(@6f>Z^`83bQ~T@3$atO-gD1=N~>02MuG4dsOb&;Xo`L*oH7) zP8;UT#Tur*b%U);18g)OF?YmL9f>w6LESbuRPYqU-|ey;X8#JB9suIMb_3%2$257Zqbd%`gJ+Ih>cTg! z!Un+#&>s#9hJp(XCqh3;!GfbbmngO1^S^-jzdZ`X2cujl$*~f34yZ1SX#gw8i-{)G zi6O%0&qBxIFXp@5Da&K`VpqL=8agNY_)vqOw)Twmq(Xh1jMR0XRQfhZD_Xb62E$m^e6~kKU{s0B3F>}g^QKDd;ym#PX6XSkfV-I$T&c= zDs#UI_e^$DWpgR{0S+l=uDc#_y>JDkN-+?N!95qYJuxB%FkN@B;(ItpbPoa`E8Mpa z88X(U$Rp;gBDx>bV_u(<0d&VLDv#=d%W2i(l7sVhk-)A|`^o(|!XH3CuI{-7Z|OPW zF=XAB$_MV-$FrT;dKn3>}X_T$DG==0Rw7oN9Ql(!~>gIL>*b07ca>2m1M{jxLqoUezB$@X*cQX z_FFGJ*-Lp(XAkA5QQ1Y*+ql1W8r*g!X*R)>7sJyuY(5q~&A=EUp|M;fNkwZ^1%*t)>-KSyPBxi35d5$oOG{kxXizy%(7AyPbeOBW z`pXY-3<77{75XoFo87!?1O`F-5og=6t=dvBxU`N9R7EY1OiH6PlA_N%8m1~?NFoer zsKDS&c*6k@9}rL~s^Im_Nm_=CBti^&QmU70a!WCsf`IEtnHU9sARC76G$}az@d_YK z>fp0pFDxZ|F}QotM-_(kN)_C}2V-|~U@)Rr-GKQ2JOadj<_5&|H4qn;(DPM{i)tz- z7*)DN1OMJGD3CZA3B$5_-*}%+5CI>G>g9(7O#&@3P0oh{-g~M)@yhVN5@Ms>e+oop z2ZBygJ^7Wt?_F9yoCEQ?xfXmEtmdjXVqMr^DZej?PSlPoj>9+91{+9ZyQ$>+D0cc{ zaCIPtsdyuWMOs?-+ft^Hu)33u6y}ACtjU-x86D53LB_|Rmtav-+XF0YHNv%Fm(9mG$FvS1@6o%y`- z`NUd%_J9B&{x@$xTo({??k1<(<@Nccz6*sad?&v2ki3c3d_;QiTo7dCi9~e%c5MTsEH`D;h}oE7No4wZQa4CRq9=LY@tk;nS$kbeIE{FR3z;+)kA zV;Q+_xfixryy5EC*3hNq{s$gzdNd4RwSW<*B(>UB|2+Ymf6sCX^#FG%j{>#AC~s}F zcUBr>J~QjVM8@Vp!2>Q9r}?~lARc2(EUj<x2j>v2(-LYSaeR+5mNCKnk>AV264Bf}Yzljf+S0JxR^F zjPS}ONAd&Iez*Sor9o%C=9uSGS})59{si1JeCd3Ma zSLxPDc>4orSp=9Xi{sXNHY|exBOk7-H`7ToRxW;(tIb5?3Y+~4gBEd#t)f2IegH-ijwS95YVGw4&ymDrS zFx={eNdl`j$vx+Cqg!1Tm;dK6)wJGn#70I2GO7CLUg$ga7zAy$e#jVeXhu-1OMU3on_=1lmzTV?j!9WoOy)rtJ-l@x^N926X*(>pE>|Ou!pEVfm!`hR?LwVoOD~jswaxj4UgUg86Vjf1Zn;JR8PY z0=bW-5u83bW?^i40K{Mc8l;!=I&DSrsNM1%qQG{F?~Xpcczhl zEZ}riON{AWiS6{D@*JJytN}DzjLNU~4;FAXX@=N`1=G1f2& z8hSiyF$1waJu<L5JHe0vMxk!S|QH^pkth*AelrJPE}0Qs!CLz~!h9%0`%~ zRv%rN&S3zn_xvkQN%i%>9;8=qy?NGf1gaXmWx7VG+M^)f<2>K}3D!jL$?lbv_g!kg z=%q`O&W+`1r+gFL^OBB9iOCzj1C$S!!!f6wc@>~zO-V&2u1$;eIN#ET5mwCmulu( zbnjL|UOIT&$K%~|@|5Ixunli&Hry;XuJo~}^Va^_+a~@OGw3Xp%{O8TH+lsW(S1|? zZDs&Vn=PP)=~S4XdT;o$&erL?av-h?h{eV$7%6q1j|pH7Bs=^uz)+K*6}(4I;o2qK z199Yr$>TW6H&8?4eztquFaKFl9Y>#=vJ4i!CO`bYM{5nKG|x&b7jL z25WTgnm*rhZ|O$>@o&3;xIQjla-Vn1A86LI6B<;JA)V)OWc>wBJ`)1 z^IF~TBL`weCaCES#bofl22u$fClAN5{bi_DPYy=h@ZT?Q(dVx@48-FNh`|OqptHRC zaOV_$J`&Cg>dP!V8}mglCb1>4J??>ga9Q3}s%Z_Z-Oep}_YV$g8cIA&`xLdtEB2C8 z4OP=0OVeAIIT!8%u^W2ezCYCDrMp414mZ5VwC^NR7dK|$&)lQOye|4qx=Hr{wl~g@ z!u$@8<&kPf(mC+wk+7hPBm@ET-@)tH95@I74EX0)=JcKD5OYqf^~)yJG`at*gJw=u zJ)e@s6lGs2QIsSBX;#>%K@U!MyV~|2({*tH9fY@ zTMopzSc@0Nuk(aZY*t08kg)*+zkRNf!?T3$jo;^DsjO$>mpk z01i9{@)s6Qwflz4B~ktUMwb>2i_l%^+Rh`VC>zQnVttyCkPST=<6H-+>XCsu5Gh|M z?@RP`%0pd$zut|B=bXDM)ohVyfoYbQ7VK&i4f9|Sxti!f;vH89(F~4WEiH{K=N%-a z^K_z(mx!|*#|y*%vvtIBAP%qdk?}g-LY!cq8?;t*in&I)UZE@ef&2BW*~kRM>WS9n zMuB=P{W>?yuZtp+_PKgyow1X!H@I-8KPwal(23^;)bzjpTmQ->)~Zi)wCaECWez1X zcQ0E+59bfKDKcL?CFM-HV9B{4LL>Hipijml#T%?My;H4I4V8SE%{hc^F^l^rzmB1w|G$3afA^$_`1>FILM`Q#$9D+!N3iQEgyLow z&U60o91v?3%T={{iM)OOdaW>ajh~Dqre|SDLi6{G4i4DP!d{{7i>tu;bKlJ577^co z_;W<8s!!EDOv_w`q%{t2z$JSj|VIOkkwVDEC&)u_>G~x=FBpBm~)b#fXWhvq*`Zs&zT25F{xxwE= z*LOXc*4LEXt}$Es4(WJnz?|;&k5DdaJKtlNIbQQFFpFo4piUhiCmiAkc|~@E$pns<)w5o zP{d`M4p+kI>jL8c>jw(N{2Z_!qxN;4mg$MBfIqX?h~u?q=7Lq zb9B>U2Pj_ax={zeR1Rpd*>-O6r(BUN5`F6a&#j*eY;11u0`q^Zk*lVEun{q)=M1Su zZ{d^$G!613xMhsxwB@P%xo5*Pdqhu^dyP>}^RnXRAQ0O;G<{5y8HP$@Xu%JHx#reG zRo57HS$P_J?(Tn-l-rnc#9Y2~Du?3}V|DUE^qWu5+2Q<6IHHA(SUwbLP+yl2+{F(J zWCUzXt`i0zc99Dn#BBN4iFq;>ng)jCk%W7lmOkU0niS5UN&O0%nAz zQ7YGrK)zBri;)^S;Byi}T|aAxb;x^QOc$sFCf!rj zkTeO=AM8FlIvBX9X%P?uufxCNlPX0SES1=cdKLU~5%A%!OwTBT#TcQ4=LwEydvAp~gX z0f6m0vz9(PX+**gZEuErjmyu-3eLCdmqnXouG3Dh_8dYK#(n%0^uzr*p&hV(S48}m zzZ#={GIRkk^6u+(TY{niUj2UEaKXm_Pxy>g*PS%fPJaC17WO#^Ve}ZR=d>_<$bh5@d;)^iq;&LdC#C6&C;v!JX^Fx=rgUL%DpzE; zxjyf{i|qx(zvWg(JTwDw64ZmgRE^@gNiGmwWQY4;U0z=YZw{-^aExu#B*08?TeSId zL`G%FVZ^Vv^<+P`&#m#h4OwG|-syAELZlDEJbQgs&7hcUQNQrlaRcK2>i`h{v$q^^ zUHynB5HlpGg(d@DLw!97symHqziP_W2ziDAl^Snu>)mQ zLp31-J#Y55HBWaoyX2*l<PAc_T5Kn$c;YMc?FJeg2>-*RpWIy zYDxNQ`^%ZOg^ojjB<&MGvmPdZR8sCNNtk-1#Gp$Ez4@Ed9{Yl=Vs#}f>!f>?zsS1W|lLm zJ&5LdXg0gpM;EWmcB=)eb=C=MPtJQ->cZ|pU30IgJCz=8*#V7)S|HY3N9^n5twf_M zU;X3Tex=RuV@UM%M1z!DPl3-e4H&F1D{H*KQoM$?g((b1W+UoM6qGt<*%wDcS`x|` z0K;p+Y7;Ft+r{`^%G(F>C3(r**UnnM>c4wD5Z|cjn!7K}=)e@3uhiNfR_N3YiIb{P z^24XY?sb1y%`XeFh>p$d|Ms!VhLVP=oZ)i3+(%IeY!?5V@8jvd--qD6h7%6O@*vV5 zzlQ)gXuo*_;@^A|Yh4zX#*NNLo7CI;0G-pEY$njCnlluJp3qu>zMN9@m)N{kckdDO z4COYC9L+`%aBAQm7vTD@?_GT1dx2RgFt-chzrD8 z5iQ%Gwp-|rzKIJICOYX{pmVh#fs7oD5kC+GuRYb|4F{kf_ZdJ~_x1J?GBd`Je^hz? zI=I!cx9~pfHP@-m&l~Ywwbyts5SZ0x)$}bQ*3hJyZu~Wi)L&^)*nXb72PTE3A^o40 zm$Afk!1fzQxOjz4M!h;qeq z+GQM~VC5VzT0v^TblPZMayP+zYPnL;|DauOMuA0*jT9JP1M#ee zHoby;2iWWSd;@=cGf%oG{vK{pJPVF0__6+dhxmi0b=lH4rIx8Iv=1g37$mrqTl)gf=UTRmT|$p zS&mQ*C!+B>Y8!~zSxb7cM^|8>VbM@;7TB~_a6^rhBWC^)S)_VC7;|%yYIj%}A8vcM z7@ciC#a)nE(;-#?BN^k8rwNyg!qgo7$`8NWA$;x}2lL+rV#O|YZYt*D5ZR<_jq?Ux zO}cYcrhHnyuK{JXe)`MNk|SH>tXCr87I%S5%&kS~P$A5t^GyrN?r;+Xhcpt%Lj-Y7 zHGPYSXNya(hiD}(-Wt&U+x?h3S{CZDkM*C$5GkKPFupgFFPGPt|M7JJ7lGG$J~Efm zO`4mkM#Uj(Aeo@f0VOEf*S>iN=A!(xZ zi|@AO;C0~-;R)4rzq$aoCQ3aw2tBNj1~z8+t30)t?;8(JYy_}#@|)-e#J}lXHLXt{ z$uA~#a&9b9^zg3W7_q(?%6GJ}0h%5nkeiK_(9lpi5-)W(5?`<%(5I0Dx;SJM{xGYG zD{#jEQ4{>QVA>I|&rqkRF;rP=Mn%88#9F`lRQZyAtWhr(%h6N!X^7q~E zz;s;koY|9JKx`+jsr!)Ln;zuZR1#|OWAt%YD2xc)nrE(f504)r zii5M+;pG1r- zbMVbysC+_PdLpb+Fq_VReu8m1u!oDBvy`&T3yx*x9}F{omB!Ei--m#B4829f<)ea( zsu~3|vrPytS&^zI3D1KrmKs%kT!1f)o)2holO|n3k`y+5+augcey%Ttra%Q5-h2YV zzh%~ygC&A(;g24f7lyJwSiA%AU;1k32E=t)Tv}^8e|L_*x7vO|eXluHDoZ6q4h72Z zgWMO|A6h$}?8>N5yZaPq(=#d>Y&*N?C+x_eyccWSs3Hepah-65NG?BgCc{Q1+pj|q z5pR|+=?#eM1;Z($st-hxxzMGSA3Nu}x@t^frO_Sg6T0v`9Zj^fMUW~pH8Nlpgnp-^ zNl(*N*>l$eJp!V`bfcP^tJ#+)&@hO`v-C+Ab+*;o1UZr!+S>}dc{fo?+ zJ}ch|djMBy`nlFbOh_-g11nFcvlUDYw3T>VLQ{=KVQS+Bl(cfidep;I`TY%EV^7Ty z|8rN4SV8wCtYd8ev6q1?HA;_y#is*t!w|l+h}9Oxl|30Yk#v9UUU&vi&6?Z=v9kHT zR<*gXj9Xu#(x-+v!Z@GT=Joi|;WH5brJeGn92WU^&OptZXRbQo$WRue92cW-QB+=_ z4g1s}5|pgRRpKiu4Q=##6w&O^O|XQt9J_G=#h*<_B(Coj03~WUGyU-|w}JM7p1=9RQWmAE2@D*l3XDtQ#jI;u^L=mz)X)5L?_-$x zv1lF^@15Z4r_p^QuAyZhCepeQ6?*h$59y6BlhEhcX~+e~ z6mx&_uN&0PDD{0bW%#R0eGteH6TNX`fJS z%juv*#&g2QXzKNY#1#?$##=;OS40fp!>xXym0!8@4d4tYH=+VC8++-CAn#z|7uZq) zb=3ZPrl6JQjYfG?}uv(O_;bG=TUU+^MH%{KHHeMWXKSd5*xlAp6 z>^@`hDjS+RV>#`*E+8J`C#tW3xTuM}hx-PyWM-#)b#ZGHwn$#Q)PED85|Rf6Bfx$< z-F0dwPC{be9)4rD+4mv1rb2U$TcIcmJf8#b@(DT^EF36?H#^_Y2?ygJ2VzYTalsk* zREf;_h?&2APRaVcXb;lXAI!YYAGTDTi+=4{);7_}XIyK|fVAJ(*Z9b$p??jLviG~p z4f~(Y5wXTVv6jCXH$`}4H)W^9@{T~uH~jPg#)OP=b)pu^kyxS2%J3Y7)rhxXxWHRC z?fx{lgOcU20$HBGxqRVsvpHmSr4Iwy zTVD@ujitxzAOX&edOWzU?++z5Z(^;Bn!cR1HVJ=T41mZ5upD)0pZ4*S7IY0l3Op~# zlFYy%o3-d>pnl8Bo~@qCpuVt3RLo~qT|bw1BJzES7RkV!=C->BrLul{VPp^MqDUB~ zaxx_y-$z8XA6d*-P1b45KwRd~XALbp zK8Bch8La%$Zt&(h4b!7otdj%fUO(HtRk^@yv^JKFt>YnJUQye5Ym}L^)@LC8i#H%H z17hHUy+mCfThobwb=1CFTN+AE=Y^W49aQ#d0sFPk=EWVvQge=VdVW2B>iH*$^_36} zrm8zdO7DD4Jh>c%Ss0EW{M|>yKY&XvFrCZHs?pS{M%DES&B7~JKKB~e{5nPH75Fq& z*V$}7Xk2UU9mWqjV&w-3;OELepQ-<=|(S+>@S@|8! zT=Dneb?6om|C%2f5a$j>ePfnt@^-V&v%cN1qOfb3J^FK2ClBq8)Y8HM(z_aaBNJZR zNy?UOIhwb+qIaph-r2`IbftESv|`5~XIm!K^uPR>n%37j;##*fJ$)L1=E`EfQNI*K z{Bioj!=cJcc3eQsDu;y*Lul^0nm^6c-)z8<)ds^Htnioue}0HbmPZTMWc#qJX8!?D z(+h=*;Ed;bs+oY(1+dn>@!c6pGKEX(6fMM``b?xNp6!oCq6`>C{ zbo*Nm-gz>(M*kD`!oKKdCSGqq{2Tt_TSQ!Ae0n0_u8Xs!4`XjFkC8j}aqn5asCJaU zxvLcUOtl50D98neH~W`8*Tt_-n{QB_Uy&Mg_pXGBAiSw zKz5UEsYW&UQl%@>^Qg%I)-4;OfMXv~bjA+MHMz4Pn3?&U@5ZZOYan4rhN6m{-D)q- zU3oJSuGwzq)5OD?-{wY5-+)-VO&{`{^+IpWewV~2S9ssNjJ(NFk}-BpMSFA)wXiC; ze&mZnL8bfN%tz(n97KK50XB>lXQ(v`QaFUMAGLi1E6O}4wG~7TQrNOn`Z^;1HUIqq zApTP~AT9vn0BLh_&LiIW?`#vzL!&fGHRaRgmcm^p8;EY*6Ch8i@zS2}w=GkE%Nwdx zS(ApnQvo{n_T-l)*K9I-O3eQZ;!r9BA7LMz-W&>i4Pos`g$tJAsas(RXHtP7b z*;nz2Jr_r%`4s>H-9>(<#wFfSL!nkGh%h}59e$S`CoyaY)!#wLo1L7U@M0G*0O5U~ zZ@!*SO*30e1-jP%uo{^5hh4{>dKF4>&+j?1Xi5-s2;KzT1K7aMd=u8154QKCv|4EU zuhq%>rsnZ4GC?)nPpSqL1+&}+Vkj2MbKd48-=Va1d^2RE!zi;oT%ymeB7g zKe$p*;+vbp=tF)Ia}VTce>ClC>EUxYw_X=9dg?(&y!q#LbdBZ`Sb!#ICu$Osn%8GQ z{OkXs^&^h-(hHdYJ0aMr@c_JUARe`ktdc)l@eF3uGypQ#U^%!klL^xIfRKYWBG{Ul zMREWEOy((ZIY7=U4g=y8j19yWYTOiu+jS6#|J2W^>c{mC#L}fzn1Gm6?Nx5RZ}~~m z8k)$eCX@cD|3X)YmNez7J{Py^1?`iH)lU1>!7huL70|PAOZ5Fa*Fj15W+$DLb`jq7 z8+rPX^|c4{+cu!f<)9;!y_$l{DYss}yMpyNznq(qr2IG^ZHRM*ygTRL5qsITGCS(9 z9Vl(MQ`2>%eCeOLMa1=)ny&GpX^{;C7`-taE1hxH==z*aY<1Z^-V=G{pOKe)^shK= z=5X?YbGEK#_j9Y%i|MNCII_|BX8#ZZVp=w3aCkBjwk}&>cECMfqU4JGL@VtKufwq# z|MCln|D|957rv^uh`2uWUje>H{iKR8>on(b2a+6k)g~_u#FkZEwxrYrUE1w44UoWz zY3gtyDFbU`Ar%yS+pn_ylFw1lGTMFtx%c!E0=pnBk^0{EUV~ST_*_K%2E_GJ@}Z~Q zFNA+TXlvWqT5E+EWe74%(yqLI#;#rPr#SKaBVb z0G9gaLesZg`(3`ayIsMbK?!Je;b(B~PBhRBh=1KJBCdLG`oI-+tnBU&LC!f1DsSDS zm|ODF=dk_>n{hl~-A3aAR?dXJ%GnY%AqT${X!yjvUP%#?qnQEdhM9nPeYsmI&pa=| z;v48F5dSkbARg~PJaNixU-2>(vgPSo?W;Leb;Mn3BMBMY`i{H|p4&xW4Ecf2gsYm| zz{tRZ5%k<1096ZJk>RkzLCbM(Y|29PHc{nRl)9|FMZ{B%c%j=ye9w{aYn`cfdQGJa zh!*;DX(yS&ZEblrLfvnI6`=B4M<}KCFOBa>iA0y;{IR|qu~)ZKS`pjjouQ&TA@lrx zty4gJQ%%=fKVrR@UbRU$@gb{hWlBU+_U^q>gbz+!^_|OCSYmxz6)hLrZo?K z+pEL9br=4O#i_G9R@LlPe>f!|$_{!Za|QBZxdS#mk7uR>fLK!ZuteYe*?pHT7s(vYXV<-k0v45L{_*;Qk+hA%o@n8Qt?Cx_zY-ETP3a|e@ z$8iecmYS;YFE&#-LUc?@16gnO3<#H{YY95LyK+h)DDm*T5S;k+CoYQ0I*$|^-hi`8C8KN(4eKbP%dcK*fh;M9VIS}CQbS*oq zPjPfoij0ZAMhbm&Vvif%Z{3@D@op%T$w|=XAxP-9e#CQ$%NoxC%14B_K2?mQnPwrq zW>(!{x(plM&YWb=ek#k4?#;=-W>b@)v%$|pZ)RY`fz_9}8_ywy3Kurb9kjQwM+`mW zhEmF``&b(}Q=oU6vPB!jYdb_u7h4m;67kbcV%vNwwf_K8S0hGyx8oR3-jkA)dPjoa zV`1A=>l$>#Js@SwW&F!L1cg3{yrneHWoF-D_y6N}u1_ZQb7nJqWNdgN6d8r(#PKnh z*zDfA$SK8vt6bIRs3yn8@^71IVyd>Zm?nbGEY!hj0m20$(*ROhHu)drv|a}NEpi%s zDcpE%!9S;OPZ+G#l_4%`x-r#`$#0gKns5goQgQ#Y_7pz9Izz*-%^~D9F=PwysO>>bm(tPP0NTij8tLLU%1CT;Nlc0XPLDK$|{=?xT*liFy zLsHA0U1Hqf%P7X_=uAKn^4DWW?gM6s@qsf2zDLqMohWOd1)%}XdZC~Z5hK@>B7qXl z*U$yvCm-d5ZW`H9^asd7>vRZg4VI~ir^uRMJJWyHzzj>(;9KmXe>=SIigIzj?N=lCr-xJZ_Y2)Xv8r?dRdi~K#FH{I5= zLK5Z5{aKKCKSqCis=cV|D>lR;MM-FB$ey9Z-nzpOU)#MQ?k%d#3oG=W>5lbue5^2i zh(-q&Yt<0Sw{c1%WTD$>bCe1rP6y8-X!C5;iSzfE(X!Ybtln!gQjDHA1b19r&!ei^ z+*ggh(LVO^H;)d!>*QabIW_ri)cz##dwr?O85ubm>Kh$P*N>z8Axg#3AUzNlYt zVvZ=a+V1;d@02XLj^CQwX9KGLAP%7QFOoWH`z;b|-kKjOrvF$$hlUupYfX33jYlaY zTC#_)b)ACd_Z1vQ;826ovEq#+I=!{eGx9S-+EJ~bNb{J)(8V|VF)H*?%;DKtH+q{7 zZKVVNH3;i_sTv$!A1;5@ZC`uPU%dOrH%?9eq^|4!C(F3ewX>he`z`dsxd$H>XiQ2C zwD}}l;SK3`skW`*$B95U|Bqra>I!+3oW?3ZTSq9PDaP)d4!iSrO`wOh`@e|0|7TiS zcFiLW3^Ct|9<_=F_ydJ7)1eV(VC1{ zgl;7`Gvj_H)0Fg9$-Skfh1_JWR?Els546^s4RVWRt`E8^H(K=U#P^7iNqfrH{#C|| zusQO0|9Z7(?@oun-Y}Wz21i-0Iij|jdjCmYBl`xUhu>$k`YpFz=YoGec+QDiHXk$I zoP9Vi%rI3PG@Cazc7EGBKT{94+*yD`XjL_8}h6>Kt;sR zM{)+yPc1{r0O;D$z6Yl(gT>r%0U+k`n7D>QD_;TQS+horxgq}Wvu}uhm21Q*AVc(2 ztv?nMPn`bEEHQaL7>{9y*JD_UvYsK#`YC*IQ;vx#$JfxthD*8VGWDzjJ7bEKg^fx4 z>=zG~5Y+CwGMnwMMn7}QHJAL!ZD+Xh;YU|)JaFcpH%?E!!TH6$A*MStO3N+|hz*b5 zOiB;2QR0h1H)<(?cCV!uzlW5{3lFgFbV51I_fE0vhX1B$ew(i#1${33bP~WoRQ>mp zoeg)bkY?tuzAVfgJ8zyG5qD&WRj|ulX@Iuj2G_o^&=*IMDg^=k1W;q%I_5RA^CygJ zr7REx=(pD)Lx%pN@%x;Dj)F-c8%5IsYFIUOG=tKYTKtT@L8DW`E?vKrY_4&ociK7Tib;lAYv*%1cksRMu-( zVI-~7-#w|uT=N1*`CjeZ(5)KN=_z%bXt*x3e+Ak!M+9cv+f2>A(24su#3`Gh+noNZ zy?jiN9s$^IL<8t<1x9s155!`is5meEsV4!m^Q=hWq8RV*UMgDd?{58|rJ)DVu_qH} zH~hQf6Ker0r={1b(XajDg%@A%`!#uete}jWg4quj@KkNIE}PSNU(r zdzxrq_FV7fjvH|p$RwYv-vRe*4Ih(;%yQ-&!t;p+#Q!@xE51RdG@kl%DARx(1B0O? z>Kp*N&bM?<@efQN94khs>D~r*^Ma2p_l;(3Kx^(?VrK@;3#kbCIzf)pf0 zxt^X&-y^>9_J&Ft(u*AteLC3?$8(SuBSSmXKdqG3eMCH(8)EC*5GOPk%qP_NkuW2j zeE<&2zee42qk@W{wVltybuZt^J?^Z%bDCKJ8()_gKrcF|1?Mvad?>FHg!D3FkeaG* zF3d$$tgH@(*I&8+LBIThU%p$-w^lylkvEQxyzkT>%t2c}hFYrK>XmZUSh09Va^!|itY#>Geb943S*9E7q`l%_<4?ua*dlm+<|w6kSG&ngJo&(PNgWXuaspdji=nSuTd zF-63$|JYKD3~}CY_DDHu=)E^Y70k#vT8L~|W4;?a`=+9rk=Tm0Z>;_6Lgz2)WCH|c zF)~#I%36Tgkfp5UfoNGNP7i+7O3;FL5l>k%=4&g_@VnNBOJ8&JstaEcCV$WU`}cj! z$zxmpHQAb7MEg1IT5K_M{TxJ_rVpHnJ%arKBxt~T4%m^GtxLAmI1gZi`{)#D8*`cXYVCi9qP~BxHxFW}^^a znf}{;Z3rkpfg%@s^`5yuX2m))#F!gmD`icw6M5iNYgZzvdM8_M$H*86Xk=E51Sh=g zTh`R{Z-fLx>;xEAD81~;bFwNFUAzD8Q1Q0poWR$=PGrhDpz|$PgO}W6u>36tue#uE ze0w~~h5vNm-Y1T2{r%R)>?;AZ+oN#3=%4Lbu?wouhZU%QIsR&TP3?U#Q`%WLu$@na z4A%ij^jmIC8To=MiF30+o&W5mC|J+5_!5@B0ggS+DBA11MvPL{l;DhK&}$RN+n>K$ z14B(xwgQ@>7(3ogm<^mtpF)W2+MuR{C*1IY@%W#*=u5 zA^z~bYQzkNk{$-7`iQG(eCGI6jWjY^IGh$x8^QE8Y8~fSc^kl`4ywR<^EY*K(#<_Nk@Zt9uEd9j$uDakrums}q z$xl9Bz4Oht{P4z^$u+Yn){AAJ7HX?B2&zZcu9lJm)g|s_QFChY54|KzZ!-*@z?i{90CT>08q=Ge0tk zb>^JxWkfvb#?a=Q5$Kd0egB{&Egwl_iiUo+oU`kH?zmLz{LvVvz$#!IEBnxl_Pn=Z zlm#RFg0;cuhvrnJ*R&rijLZJ*z}hW0kAHY`WA@9lX?+h3b8iB|Qh{{w1ba4J?i7;` z9x%~8|QvPDGPpyoE&7K?q2q7!442wuy6=EHc6Wk=p7YMfGD z7kRpuWReY>cBUi(&oq75J@`s*O1@ZA1p#nRFaTiPriIk0qUXTRPE~?6E6X-`+Wx`l zXOCQU;j4x9rj3tz_>F^u2TpzO=En3lrqlX?1?@^(KBm==1UR1TShPb}{$Lt%AV0mw zjz~ghd?mN4T~+UZ0ddlF4mEU#h>f9n;5U}ti+u*TlgVE2-jqp2E$4?#~_voX8!|&Vp!i|mTFOSFd zC!wzW@6+E3Y_ujkQyr$f;odmYY9YR=m|Hd-*a`h3O-2XgZ`gf*|k7Bd|8JR3u+Zd$2^ zf45c*|8&k3KBQ-0v_aIS_nvp=^z>)v)TVEoP3wEbTRMBT!rJYO=*Q^_+HM%hpg)To z=7*dB=})8?VIhKrewZ|$ETEp5JAxRnjtq1a6-_~uK0&OTt!Lx2ZXkF^JXWl`)HKjY zP19&Z50pk`od^F9Z`7d(>b&IZas7{!6PDMHu-GWOv9F*N+<)VKHP+xc(Yw_-Ee%^6 z3^lZI$#YM5C{?j~R8=oqt%ld%cWL#pZ~BdgPIgxcNsi0^{qVly$F{y;Yis&LlX3m2 z^$e?M?@6UAmRLemL#jr@@rulAz?&b4I)!6LShNXJfay9smebwNf4_jD=%r(S%UnIn+45(%N(Bw7;V?B8h_GgH#U@h93%}aHPd#UM9 zu3v?#e8Yi!*Pm4Hc5B5685&d^qo0Y!y6QgltlpxaDwk;f!EOCDcTjIAC?i>`nrM*4h)7gW|-~=(VqM zOu6(k#f&@PVU5mOWQ{hfB)Uz{K8+l-)!%h zowGbX;=hkBA3wHv;oKl!QP=e+PbT$8pvD7H%KhrP?4Q3k0{Di-f7o^gh9vo51xy0( zf`HDy$bY7S;6zM&03`IhVB?{I7NwIn22onFby7G=YNj=z^xu*r0I3T@yNO1kM8YXG zw4UTdDdm$pK~2vMF-mz(DP=V)S&I*)`mJT#?a}86q_fl;m?AuPzL|sM;|h}W%05xj z(qr%+po@~udj2h$o;&uU$_lDt8)kNkm2!A!)w>48o-?xQwX4J7Yrp&c=ic-iKWsRA zbh!@4CqDY-!I2|pR_nUH-)vT&Ga1+So*U-n*|e_e8WtmmsnZXOy&Ex3TB%e_mDAP^ zeL(v+(Z$Ug*<^uWh?tlLNpuPh*ud{-6Gx$nmk(dwk`c9;-u;M0U7ftOQYMa_aO|ws zgMtJoOK1kj@-wi;UVunsY+Oot(%cXq>%b7-8^yk$lrr3%Nwst#O$a!;*L3FBs@}1` zkYb}D4I&&7)X^G&g%Kg%ZNbcqRD9Ki?uy!BOL}l0U;5mHj0(+-vmZI~F7aO;?K /dev/null +[Desktop Entry] +Name=Windows +Comment=Start Windows VM via Docker and connect with RDP +Exec=uwsm app -- omarchy-windows-vm launch +Icon=$HOME/.local/share/applications/icons/windows.png +Terminal=false +Type=Application +Categories=System;Virtualization; +EOF + + # Get system resources + TOTAL_RAM=$(free -h | grep "^Mem:" | awk '{print $2}') + TOTAL_RAM_GB=$(free -g | grep "^Mem:" | awk '{print $2}') + TOTAL_CORES=$(nproc) + + echo "" + echo "System Resources Detected:" + echo " Total RAM: $TOTAL_RAM" + echo " Total CPU Cores: $TOTAL_CORES" + echo "" + + RAM_OPTIONS="" + for size in 2 4 8 16 32 64; do + if [ $size -le $TOTAL_RAM_GB ]; then + RAM_OPTIONS="$RAM_OPTIONS ${size}G" + fi + done + + SELECTED_RAM=$(echo $RAM_OPTIONS | tr ' ' '\n' | gum choose --selected="4G" --header="How much RAM would you like to allocate to Windows VM?") + + # Check if user cancelled + if [ -z "$SELECTED_RAM" ]; then + echo "Installation cancelled by user" + exit 1 + fi + + SELECTED_CORES=$(gum input --placeholder="Number of CPU cores (1-$TOTAL_CORES)" --value="2" --header="How many CPU cores would you like to allocate to Windows VM?" --char-limit=2) + + # Check if user cancelled (Ctrl+C in gum input returns empty string) + if [ -z "$SELECTED_CORES" ]; then + echo "Installation cancelled by user" + exit 1 + fi + + if ! [[ "$SELECTED_CORES" =~ ^[0-9]+$ ]] || [ "$SELECTED_CORES" -lt 1 ] || [ "$SELECTED_CORES" -gt "$TOTAL_CORES" ]; then + echo "Invalid input. Using default: 2 cores" + SELECTED_CORES=2 + fi + + AVAILABLE_SPACE=$(df "$HOME" | awk 'NR==2 {print int($4/1024/1024)}') + MAX_DISK_GB=$((AVAILABLE_SPACE - 10)) # Leave 10GB for Windows image + + # Check if we have enough space for minimum + if [ $MAX_DISK_GB -lt 32 ]; then + echo "❌ Insufficient disk space for Windows VM!" + echo " Available: ${AVAILABLE_SPACE}GB" + echo " Minimum required: 42GB (32GB disk + 10GB for Windows image)" + exit 1 + fi + + DISK_OPTIONS="" + for size in 32 64 128 256 512; do + if [ $size -le $MAX_DISK_GB ]; then + DISK_OPTIONS="$DISK_OPTIONS ${size}G" + fi + done + + # Default to 64G if available, otherwise 32G + DEFAULT_DISK="64G" + if ! echo "$DISK_OPTIONS" | grep -q "64G"; then + DEFAULT_DISK="32G" + fi + + SELECTED_DISK=$(echo $DISK_OPTIONS | tr ' ' '\n' | gum choose --selected="$DEFAULT_DISK" --header="How much disk space would you like to give Windows VM? (64GB+ recommended)") + + # Check if user cancelled + if [ -z "$SELECTED_DISK" ]; then + echo "Installation cancelled by user" + exit 1 + fi + + # Extract just the number for prerequisite check + DISK_SIZE_NUM=$(echo "$SELECTED_DISK" | sed 's/G//') + + # Re-check prerequisites with selected disk size + check_prerequisites "$DISK_SIZE_NUM" + + # Prompt for username and password + USERNAME=$(gum input --placeholder="Username (Press enter to use default: docker)" --header="Enter Windows username:") + if [ -z "$USERNAME" ]; then + USERNAME="docker" + fi + + PASSWORD=$(gum input --placeholder="Password (Press enter to use default: admin)" --password --header="Enter Windows password:") + if [ -z "$PASSWORD" ]; then + PASSWORD="admin" + PASSWORD_DISPLAY="(default)" + else + PASSWORD_DISPLAY="(user-defined)" + fi + + # Display configuration summary + gum style \ + --border normal \ + --padding "1 2" \ + --margin "1" \ + --align left \ + --bold \ + "Windows VM Configuration" \ + "" \ + "RAM: $SELECTED_RAM" \ + "CPU: $SELECTED_CORES cores" \ + "Disk: $SELECTED_DISK" \ + "Username: $USERNAME" \ + "Password: $PASSWORD_DISPLAY" + + # Ask for confirmation + echo "" + if ! gum confirm "Proceed with this configuration?"; then + echo "Installation cancelled by user" + exit 1 + fi + + mkdir -p $HOME/Windows + + # Create docker-compose.yml in user config directory + cat << EOF | tee "$COMPOSE_FILE" > /dev/null +services: + windows: + image: dockurr/windows + container_name: omarchy-windows + environment: + VERSION: "11" + RAM_SIZE: "$SELECTED_RAM" + CPU_CORES: "$SELECTED_CORES" + DISK_SIZE: "$SELECTED_DISK" + USERNAME: "$USERNAME" + PASSWORD: "$PASSWORD" + devices: + - /dev/kvm + - /dev/net/tun + cap_add: + - NET_ADMIN + ports: + - 8006:8006 + - 3389:3389/tcp + - 3389:3389/udp + volumes: + - $HOME/.windows:/storage + - $HOME/Windows:/shared + restart: always + stop_grace_period: 2m +EOF + + echo "" + echo "Starting Windows VM installation..." + echo "This will download a Windows 11 image (may take 10-15 minutes)." + echo "" + echo "Monitor installation progress at: http://127.0.0.1:8006" + echo "" + + # Start docker-compose with user's config + echo "Starting Windows VM with docker-compose..." + if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then + echo "❌ Failed to start Windows VM!" + echo " Common issues:" + echo " - Docker daemon not running: sudo systemctl start docker" + echo " - Port already in use: check if another VM is running" + echo " - Permission issues: make sure you're in the docker group" + exit 1 + fi + + echo "" + echo "Windows VM is starting up!" + echo "" + echo "Opening browser to monitor installation..." + + # Open browser to monitor installation + sleep 3 + xdg-open "http://127.0.0.1:8006" + + echo "" + echo "Installation is running in the background." + echo "You can monitor progress at: http://127.0.0.1:8006" + echo "" + echo "Once finished, launch 'Windows' via Super + Space" + echo "" + echo "To stop the VM: omarchy-windows-vm stop" + echo "To change resources: ~/.config/windows/docker-compose.yml" + echo "" +} + +remove_windows() { + echo "Removing Windows VM..." + + docker-compose -f "$COMPOSE_FILE" down 2>/dev/null || true + + docker rmi dockurr/windows 2>/dev/null || echo "Image already removed or not found" + + rm "$HOME/.local/share/applications/windows-vm.desktop" + rm -rf "$HOME/.config/windows" + rm -rf "$HOME/.windows" + + echo "" + echo "Windows VM removal completed!" +} + +launch_windows() { + KEEP_ALIVE=false + if [ "$1" = "--keep-alive" ] || [ "$1" = "-k" ]; then + KEEP_ALIVE=true + fi + + # Check if config exists + if [ ! -f "$COMPOSE_FILE" ]; then + echo "Windows VM not configured. Please run: omarchy-windows-vm install" + exit 1 + fi + + # Check if container is already running + CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' omarchy-windows 2>/dev/null) + + if [ "$CONTAINER_STATUS" != "running" ]; then + echo "Starting Windows VM..." + + # Send desktop notification + notify-send "Windows VM" "Starting Windows VM, this may take a moment..." + + if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then + echo "❌ Failed to start Windows VM!" + echo " Try checking: omarchy-windows-vm status" + echo " View logs: docker logs omarchy-windows" + notify-send -u critical "Windows VM" "Failed to start Windows VM" + exit 1 + fi + + # Wait for RDP to be ready + echo "Waiting for Windows VM to be ready..." + WAIT_COUNT=0 + while ! nc -z 127.0.0.1 3389 2>/dev/null; do + sleep 2 + WAIT_COUNT=$((WAIT_COUNT + 1)) + if [ $WAIT_COUNT -gt 60 ]; then # 2 minutes timeout + echo "❌ Timeout waiting for RDP!" + echo " The VM might still be installing Windows." + echo " Check progress at: http://127.0.0.1:8006" + exit 1 + fi + done + + # Give it a moment more to fully initialize + sleep 3 + fi + + # Extract credentials from compose file + WIN_USER=$(grep "USERNAME:" "$COMPOSE_FILE" | sed 's/.*USERNAME: "\(.*\)"/\1/') + WIN_PASS=$(grep "PASSWORD:" "$COMPOSE_FILE" | sed 's/.*PASSWORD: "\(.*\)"/\1/') + + # Use defaults if not found + [ -z "$WIN_USER" ] && WIN_USER="docker" + [ -z "$WIN_PASS" ] && WIN_PASS="admin" + + # Build the connection info + if [ "$KEEP_ALIVE" = true ]; then + LIFECYCLE="VM will keep running after RDP closes +To stop: omarchy-windows-vm stop" + else + LIFECYCLE="VM will auto-stop when RDP closes" + fi + + gum style \ + --border normal \ + --padding "1 2" \ + --margin "1" \ + --align center \ + "Connecting to Windows VM" \ + "" \ + "$LIFECYCLE" + + # Detect display scale from Hyprland + HYPR_SCALE=$(hyprctl monitors -j | jq -r '.[0].scale') + SCALE_PERCENT=$(echo "$HYPR_SCALE" | awk '{print int($1 * 100)}') + + RDP_SCALE="" + if [ "$SCALE_PERCENT" -ge 170 ]; then + RDP_SCALE="/scale:180" + elif [ "$SCALE_PERCENT" -ge 130 ]; then + RDP_SCALE="/scale:140" + fi + # If scale is less than 130%, don't set any scale (use default 100) + + # Connect with RDP in fullscreen (auto-detects resolution) + xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 +f -grab-keyboard /cert:ignore /title:"Windows VM - Omarchy" /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE + + # After RDP closes, stop the container unless --keep-alive was specified + if [ "$KEEP_ALIVE" = false ]; then + echo "" + echo "RDP session closed. Stopping Windows VM..." + docker-compose -f "$COMPOSE_FILE" down + echo "Windows VM stopped." + else + echo "" + echo "RDP session closed. Windows VM is still running." + echo "To stop it: omarchy-windows-vm stop" + fi +} + +stop_windows() { + if [ ! -f "$COMPOSE_FILE" ]; then + echo "Windows VM not configured." + exit 1 + fi + + echo "Stopping Windows VM..." + docker-compose -f "$COMPOSE_FILE" down + echo "Windows VM stopped." +} + +status_windows() { + if [ ! -f "$COMPOSE_FILE" ]; then + echo "Windows VM not configured." + echo "To set up: omarchy-windows-vm install" + exit 1 + fi + + CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' omarchy-windows 2>/dev/null) + + if [ -z "$CONTAINER_STATUS" ]; then + echo "Windows VM container not found." + echo "To start: omarchy-windows-vm launch" + elif [ "$CONTAINER_STATUS" = "running" ]; then + gum style \ + --border normal \ + --padding "1 2" \ + --margin "1" \ + --align left \ + "Windows VM Status: RUNNING" \ + "" \ + "Web interface: http://127.0.0.1:8006" \ + "RDP available: port 3389" \ + "" \ + "To connect: omarchy-windows-vm launch" \ + "To stop: omarchy-windows-vm stop" + else + echo "Windows VM is stopped (status: $CONTAINER_STATUS)" + echo "To start: omarchy-windows-vm launch" + fi +} + +show_usage() { + echo "Usage: omarchy-windows-vm [command] [options]" + echo "" + echo "Commands:" + echo " install Install and configure Windows VM" + echo " remove Remove Windows VM and optionally its data" + echo " launch [options] Start Windows VM (if needed) and connect via RDP" + echo " Options:" + echo " --keep-alive, -k Keep VM running after RDP closes" + echo " stop Stop the running Windows VM" + echo " status Show current VM status" + echo " help Show this help message" + echo "" + echo "Examples:" + echo " omarchy-windows-vm install # Set up Windows VM for first time" + echo " omarchy-windows-vm launch # Connect to VM (auto-stop on exit)" + echo " omarchy-windows-vm launch -k # Connect to VM (keep running)" + echo " omarchy-windows-vm stop # Shut down the VM" +} + +# Main command dispatcher +case "$1" in + install) + install_windows + ;; + remove) + remove_windows + ;; + launch|start) + launch_windows "$2" + ;; + stop|down) + stop_windows + ;; + status) + status_windows + ;; + help|--help|-h|"") + show_usage + ;; + *) + echo "Unknown command: $1" >&2 + echo "" >&2 + show_usage >&2 + exit 1 + ;; +esac