From ca7b25e3ab8a49e46484bd436fedf72940f02887 Mon Sep 17 00:00:00 2001 From: aliguori Date: Wed, 17 Dec 2008 21:35:49 +0000 Subject: [PATCH] Update to the latest Bochs BIOS Update the PC BIOS to the latest version, split out the patches into patch series, and update the README to point to the new location of the Bochs BIOS source tree. Also update the gitignore to allow the patch queue directory to be used. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6077 c046a42c-6fe2-441c-8c8c-71466251a162 --- .gitignore | 1 + pc-bios/README | 6 +- pc-bios/bios-pq/0001_bx-qemu.patch | 11 +++ .../0002_e820-high-mem.patch} | 64 +++++++----------- pc-bios/bios-pq/0003_smp-startup-poll.patch | 21 ++++++ pc-bios/bios-pq/0004_no-stack-protector.patch | 21 ++++++ pc-bios/bios-pq/HEAD | 1 + pc-bios/bios-pq/series | 4 ++ pc-bios/bios.bin | Bin 131072 -> 131072 bytes 9 files changed, 87 insertions(+), 42 deletions(-) create mode 100644 pc-bios/bios-pq/0001_bx-qemu.patch rename pc-bios/{bios.diff => bios-pq/0002_e820-high-mem.patch} (78%) create mode 100644 pc-bios/bios-pq/0003_smp-startup-poll.patch create mode 100644 pc-bios/bios-pq/0004_no-stack-protector.patch create mode 100644 pc-bios/bios-pq/HEAD create mode 100644 pc-bios/bios-pq/series diff --git a/.gitignore b/.gitignore index 0f4af35a1c..fffd440d2c 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ qemu-nbd.pod *.d .pc patches +pc-bios/bios-pq/status diff --git a/pc-bios/README b/pc-bios/README index ac8fc47263..bacf6c38b2 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -1,5 +1,7 @@ -- The PC BIOS comes from the Bochs project - (http://bochs.sourceforge.net/). A patch from bios.diff was applied. +- The PC BIOS comes from the Bochs project (http://bochs.sourceforge.net/). + The patches in bios-pq have been applied. The binary is based on the revision + in bios-pq/HEAD with the patches in bios-pq/series applied. The git repo + that HEAD refers to is located at http://repo.or.cz/w/bochs-mirror.git - The VGA BIOS and the Cirrus VGA BIOS come from the LGPL VGA bios project (http://www.nongnu.org/vgabios/). diff --git a/pc-bios/bios-pq/0001_bx-qemu.patch b/pc-bios/bios-pq/0001_bx-qemu.patch new file mode 100644 index 0000000000..ffca6b9ae5 --- /dev/null +++ b/pc-bios/bios-pq/0001_bx-qemu.patch @@ -0,0 +1,11 @@ +--- bochs-2.3.7.orig/bios/rombios.h ++++ bochs-2.3.7/bios/rombios.h +@@ -19,7 +19,7 @@ + // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + /* define it to include QEMU specific code */ +-//#define BX_QEMU ++#define BX_QEMU + + #ifndef LEGACY + # define BX_ROMBIOS32 1 diff --git a/pc-bios/bios.diff b/pc-bios/bios-pq/0002_e820-high-mem.patch similarity index 78% rename from pc-bios/bios.diff rename to pc-bios/bios-pq/0002_e820-high-mem.patch index da510db803..2886e85669 100644 --- a/pc-bios/bios.diff +++ b/pc-bios/bios-pq/0002_e820-high-mem.patch @@ -1,17 +1,16 @@ ---- bochs-2.3.7.orig/bios/rombios.h -+++ bochs-2.3.7/bios/rombios.h -@@ -19,7 +19,7 @@ - // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - /* define it to include QEMU specific code */ --//#define BX_QEMU -+#define BX_QEMU - - #ifndef LEGACY - # define BX_ROMBIOS32 1 ---- bochs-2.3.7.orig/bios/rombios.c -+++ bochs-2.3.7/bios/rombios.c -@@ -4404,22 +4404,25 @@ +From: Izik Eidus + +add support to memory above the pci hole + +the new memory region is mapped after address 0x100000000, +the bios take the size of the memory after the 0x100000000 from +three new cmos bytes. + +diff --git a/bios/rombios.c b/bios/rombios.c +index 1be0816..b70f249 100644 +--- a/bios/rombios.c ++++ b/bios/rombios.c +@@ -4442,22 +4442,25 @@ BX_DEBUG_INT15("case default:\n"); #endif // BX_USE_PS2_MOUSE @@ -40,7 +39,7 @@ write_word(ES, DI+14, 0x0000); write_word(ES, DI+16, type); -@@ -4432,7 +4435,9 @@ +@@ -4470,7 +4473,9 @@ int15_function32(regs, ES, DS, FLAGS) Bit16u ES, DS, FLAGS; { Bit32u extended_memory_size=0; // 64bits long @@ -50,7 +49,7 @@ BX_DEBUG_INT15("int15 AX=%04x\n",regs.u.r16.ax); -@@ -4506,11 +4511,18 @@ +@@ -4544,11 +4549,18 @@ ASM_END extended_memory_size += (1L * 1024 * 1024); } @@ -65,21 +64,21 @@ { case 0: set_e820_range(ES, regs.u.r16.di, -- 0x0000000L, 0x0009fc00L, 1); -+ 0x0000000L, 0x0009fc00L, 0, 0, 1); +- 0x0000000L, 0x0009f000L, 1); ++ 0x0000000L, 0x0009f000L, 0, 0, 1); regs.u.r32.ebx = 1; regs.u.r32.eax = 0x534D4150; regs.u.r32.ecx = 0x14; -@@ -4519,7 +4531,7 @@ +@@ -4557,7 +4569,7 @@ ASM_END break; case 1: set_e820_range(ES, regs.u.r16.di, -- 0x0009fc00L, 0x000a0000L, 2); -+ 0x0009fc00L, 0x000a0000L, 0, 0, 2); +- 0x0009f000L, 0x000a0000L, 2); ++ 0x0009f000L, 0x000a0000L, 0, 0, 2); regs.u.r32.ebx = 2; regs.u.r32.eax = 0x534D4150; regs.u.r32.ecx = 0x14; -@@ -4528,7 +4540,7 @@ +@@ -4566,7 +4578,7 @@ ASM_END break; case 2: set_e820_range(ES, regs.u.r16.di, @@ -88,7 +87,7 @@ regs.u.r32.ebx = 3; regs.u.r32.eax = 0x534D4150; regs.u.r32.ecx = 0x14; -@@ -4539,7 +4551,7 @@ +@@ -4577,7 +4589,7 @@ ASM_END #if BX_ROMBIOS32 set_e820_range(ES, regs.u.r16.di, 0x00100000L, @@ -97,7 +96,7 @@ regs.u.r32.ebx = 4; #else set_e820_range(ES, regs.u.r16.di, -@@ -4555,7 +4567,7 @@ +@@ -4593,7 +4605,7 @@ ASM_END case 4: set_e820_range(ES, regs.u.r16.di, extended_memory_size - ACPI_DATA_SIZE, @@ -106,7 +105,7 @@ regs.u.r32.ebx = 5; regs.u.r32.eax = 0x534D4150; regs.u.r32.ecx = 0x14; -@@ -4565,7 +4577,20 @@ +@@ -4603,7 +4615,20 @@ ASM_END case 5: /* 256KB BIOS area at the end of 4 GB */ set_e820_range(ES, regs.u.r16.di, @@ -128,18 +127,3 @@ regs.u.r32.ebx = 0; regs.u.r32.eax = 0x534D4150; regs.u.r32.ecx = 0x14; ---- bochs-2.3.7.orig/bios/rombios32.c -+++ bochs-2.3.7/bios/rombios32.c -@@ -479,7 +479,12 @@ - sipi_vector = AP_BOOT_ADDR >> 12; - writel(APIC_BASE + APIC_ICR_LOW, 0x000C4600 | sipi_vector); - -+#ifndef BX_QEMU - delay_ms(10); -+#else -+ while (cmos_readb(0x5f) + 1 != readw((void *)CPU_COUNT_ADDR)) -+ ; -+#endif - - smp_cpus = readw((void *)CPU_COUNT_ADDR); - } diff --git a/pc-bios/bios-pq/0003_smp-startup-poll.patch b/pc-bios/bios-pq/0003_smp-startup-poll.patch new file mode 100644 index 0000000000..cd1a3ff034 --- /dev/null +++ b/pc-bios/bios-pq/0003_smp-startup-poll.patch @@ -0,0 +1,21 @@ +From: Avi Kivity + +instead of timing out, wait until all cpus are up + +diff --git a/bios/rombios32.c b/bios/rombios32.c +index ef98a41..05ba40d 100644 +--- a/bios/rombios32.c ++++ b/bios/rombios32.c +@@ -512,7 +512,12 @@ void smp_probe(void) + sipi_vector = AP_BOOT_ADDR >> 12; + writel(APIC_BASE + APIC_ICR_LOW, 0x000C4600 | sipi_vector); + ++#ifndef BX_QEMU + delay_ms(10); ++#else ++ while (cmos_readb(0x5f) + 1 != readw(&smp_cpus)) ++ ; ++#endif + } + BX_INFO("Found %d cpu(s)\n", readw(&smp_cpus)); + } diff --git a/pc-bios/bios-pq/0004_no-stack-protector.patch b/pc-bios/bios-pq/0004_no-stack-protector.patch new file mode 100644 index 0000000000..a5f7bbc15c --- /dev/null +++ b/pc-bios/bios-pq/0004_no-stack-protector.patch @@ -0,0 +1,21 @@ +Disable stack protector for BIOS + +Some distro GCCs (like Ubuntu) enable stack protection by default. Since the +BIOS doesn't link against libgcc, this results in undefined references unless +the stack protector is disabled. + +Signed-off-by: Anthony Liguori + +diff --git a/bios/Makefile.in b/bios/Makefile.in +index af674b4..5c7bd4f 100644 +--- a/bios/Makefile.in ++++ b/bios/Makefile.in +@@ -41,7 +41,7 @@ RANLIB = @RANLIB@ + + BCC = bcc + GCC = gcc +-GCC32 = gcc -m32 ++GCC32 = gcc -m32 -fno-stack-protector + AS86 = as86 + + BX_INCDIRS = -I.. -I$(srcdir)/.. -I../iodev -I$(srcdir)/../iodev diff --git a/pc-bios/bios-pq/HEAD b/pc-bios/bios-pq/HEAD new file mode 100644 index 0000000000..251c985209 --- /dev/null +++ b/pc-bios/bios-pq/HEAD @@ -0,0 +1 @@ +8d4e158f0ea5fa00fa0276f487ff21609fbb0894 diff --git a/pc-bios/bios-pq/series b/pc-bios/bios-pq/series new file mode 100644 index 0000000000..96a4f9d8dc --- /dev/null +++ b/pc-bios/bios-pq/series @@ -0,0 +1,4 @@ +0001_bx-qemu.patch +0002_e820-high-mem.patch +0003_smp-startup-poll.patch +0004_no-stack-protector.patch diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin index 715aed365a305ffc417295148b647564463997b1..4aa218b28ccc6e4202026fb4872882361ddb67b1 100644 GIT binary patch delta 27736 zcmb8Y30zZ07dLz-gn$?cASxmPD(OiOc5 zOLGqo&p#x%3Btai@YVL!)9nY-I(P~kLL8v)t^ET8Av{0(N|{{|>b5FyNL``&&#F%^ z^*(O+d&KYr<05yXR%smPW%{iZrl(&|2~ZuBd+KdOb zM;2PSCz|9Cm*D1}Ie*HEUCy`j+_TT+E27))mYo)4#-m1O%J{TC5||9hkMb~qv5=~Z zj9m0b$dWg4kfJTa!c8fy1dAZ(^GOtfDYhCB?LFHK6D!Je2n!s>M23=7o5pPJ@74zD z)*u)%8R~_>H?{!Oz)&p)8wn<|0F?(&UZ@F=+JRZ#3+=g5+iGm-wvBl7^D-Cgx?zmVo4sP@V- zmkQAJ`om<&YeA3;+EVib!Ba34EU|WhXG-Jn3($M2y-P6$w2%pCd$u^QEj2dUhr${A z$qVkVLJluE!Gs!CW;kJtFUz^@+jNT5UZubww2nzYu;r zGu8`YcOjM;3ySDk!a_a}`Wv#eaBJHPDKldOoK#JnRDlxJCvLsMRk^OAAOfgpa+FJQa4^;Hyz3fp~29S^hy z3Sk&;(!cekN*IHNfDl7Uh}^I+#NF7#I8$zTWhetJD!A=cr(nr(AWs9e+g*|Tz;I-D zIR>keA0#h%laZ!NQ5ge5jF8s|c@3rGjwDBQ_tDx6T~QYeQK*=bL0G2Jm>fmqrJ zXL;k?jh&6L@`8Izr7TO%u;R)d9jd@Se+^|80d<*FradDq#kac1wyaDx5|g9qf2O@> zxWa@1nYcVw?Q6Ro({m2FcawF0p7YZE16}Y&RGI?O*AQR45r?j6rYbyNf3M6mILOeI z0mIuG29+ik^@TaXq7D))eTko?ubf!=x)MMYf@taMF0=H79>YmMF2h+sU+%7bW{fZ0 zk1Am}qCetiiS}?eT(v~|2$tyj@bM*<=mvt$65Y^liEd@=dli;l3-PCd)Eb{T7#6v_!7fORc-^UgkF^OJgm~c2O|gcZc&*<=4FW?Doc!<=qxcH zZ;XN%2!tzjVX3 zJ=W0D4>~x>UB9R-fEA6MWa;N#-xTW&t*$Z-E6$m$T%ns+A5<8uylHq{OEi&N`qqP@ zqh$ho_XTM!iX@o06u>c4O(5jPLNW-sL&&0b4YH^eGK<a9rV&M z5L~s-OoP4ldq9R-J)r_Xr+r{3Hx4QdzmVLvOfLpO)`r*tgZ(V(zz~aC4r56HU;yw_ zH*jc>%r}e;F)!_N)!xCbFRz7P&m1lXoqy%E*c&VsPw!cvdttcv@_J@sgSIbWigD+r zxhO6~?gd4|j4v0u34-`5%nJI#VD1t8#vB^vLL}%*+wd7-u1fz;nWHHVi8@_=XtbMKQP>)C8s)EFmCNDgkJgDTV^6zPQ{FUnb4{Ci&4G&>@ES zlJ@b%F7aiCxDYQ;BzP#rIv|hXRd_!4Ddb?E^IkUgk!o+wHP5;&Is*a| z#rt*kWisP$_)NQavs@#j|7g9Qf=X0xu8RIOW0(^CF&y2Hl zgioiUI7=AP0=u5)7Tz!^&u5O3?N5XX?ez-r-2Mzzpbb+2u&rfYpVpgLL*AI2kG(%6 zJ#x-?x2vnl&4;NVzStOlC5QOV@6DWKppIv!rU-4G>SY;vUEd5P^uJeU?SYa;Ez<^+UHN55G(U-Rxkf zo1Hg2G1L_!b2j<}$;?8|VV|k7=-TArmvt0cd)~rW1T?B@SzX|Y5pWPx>Apa)WKqe- zUNuVE1Oz!V>-W@+?NJ4$U4PeQcZF)N{xs;;L!iw_1JAapzOV;(=W*uQ2>L1H;g@w! z70k6u7K!yggATk_TK(B?#a>l!70>88r~{I%pPl$T~G z=MGx|C=3Ld!}bcCC)HciUUHN$Q?=|gWJ!+l`Yd@RH{0mNanZDAjm#rTf6+DN=#rD@ z?{iP?1o-2JDw&T~dJu~=oM>hN%<$S!28#_r#XbL=myJFOQ9?g&Mvu@@xF!CHaBw_i zvcx|H3$gAKn6sApjUNAV^%N>je_UgZhDO768hDQ{T$=$SS#l9`sELr0y0J_su1Y&a zHsjNb>lR$iw82G1qwovh3M|DiEGf$BFkPr} zFTjfPwls0$+@4xJHQ=C!2~PaA4CPb8O3?7a#J%dA;>JlqU@Mrx5HR28)%jSa;If=V z|86>@v2Eim>@Yk5*p*tPA-)tdeqEhW-2cc9zM=x*9n~=7w;qzh^QBeme=eL=>78ID zT)lWMft4ue`et1JiUpuyY-Ot2#Mh&+Hie#Ki&C)!^o@0-&5KzX{b4U$GkOUreU`iv z6ZdAjG`zI;j05DR7qhf`gh=B$>8GxA8?psT*1IF{j$WkL$nTjJc{-C zKAAC!f^zrF7&i;}eU=y{;Pv1GZV`BE4lg(*Re#tw{5ZB*u%LfM8t3baWuR4=11h0- zOH75p%B=FvjIrm~oAl`}l?Aza7A#zCaUrJnWcwe1X`7ILqQt$uP^H_dn#6VQQz{#0Urwtf5tw_SEE+hNt_`%~Bn#4?8@ngSZ~+d06}Il2^>t5{+sva954dA?%+rJ>Ni5 zA{}~usJcet>ia0X`#BKMA@!#t5Hm6^A#NzQ%^|MtNwGr`a$F+DXq2ompaqKU_CrIA{e_d)z1tV(FmaDVmGS)a_AFl%z~oCzOK{q&>Y)X5W5X3Pq1InyI&Nl@dQy+Peu zCQQ+$Oqwz0)8ORk6Fv%VIoCr-=o~z2@@(xVldH*dY(eklbPi4n2%b27!tB{mVRKuC zbpcXA(7gNZ$j+VcyGzdcphh`+gWGi&I%VqYVE9+f=tFG^iZEF_)4>yx2M-%K&_l?% z89ZjsgdXdQ_RQ>Y+v7K~i3CMN1cwBN#7#(<{7!I0SXhrv;Srs}y9S4Kdnc^xJ6$7k z3kaF!;+-yhE*JzO$dDmq3R%MP+(=ilR!*vNFV`UhUC8a+kb1;}5D(hPlk_1c=nPNN zfc!?&J;@-FOfLf1sFh1xoO!&U5u3e;i(8hTQpa5Eq7l7lTNRl~w$L0E&?L(wnhDS2 z;v!!I&26C3P%9>SITGt);&w>91BtI`A1^56XKL~yJvx93Cz#tpA=8M&Y4S6P(_J7Q zDxu~{Kr(@rd65Qn-+QJnlrx|`_3|bin%8FltfSObHcyloCPa-``P4yn^C|WACQayk zZ{pqjD1#luGbQ3*oy037;$z;Vv2unJe*Y*$spl`BDP2)bg+rP2M&Mk9OdBD?2*_TR4Fd|X~^o12-`zHoQj*!s`Smo>LQ3gJrmb*21<#+1=jOSa5+@74L$Bl+UlC1 zBw6Z{VI|R;JU59n9Y_^Mb(wX&U`#ACTswdF{9SVK{M{u-Huxmuxkyw=NM-#>$U6q0 zAb|rA49^e0o}e+R%Z-VzO^XkU<7}p6OG;mJFh~z`_I1oUPWW|=De-iI zJ@uGqx)0)nHyNr6CE@J+hjTucc^EbYr62KF7m8 z2h|1Za7jFD1s;eS`?(vFJa|QJLPf5LUXa8pQfW$LNZvV#u@)4>J@2Fx`v_u=L10wN zp$6{oh;k89>*eKLNzgG_W1oOF|0?C^1`#BY3$t5fsTH6ks=TkIG=E65)ytbNMeAa| zIZ~wRagDJy0zd_{g4F@$#R7uua@mP=1f)GeN1YH3vvvT>0sYm14jgFy0^;w`hmDAT zgRU^3M|DAJ()FEDL@;8g<$qE1&@=fH`dCQA(sv&-dTvEj&)Bh3k@OO^OlDP849 z{AH`zvp&uDBW|*}JW{6(r->`2fBTVe;!QtjOd8aQ<>)ip8h_$jCyvK1^H@BO?dLHy zkA25tbVFlc{S^=Yj^T-%Y9Oad%4rzB z(&*1pSA>=93lv^jv6>@!dc(h=9r^4~JAEuqe^Ekz^Cumf#3LWGy8vwkT#!MejI~qf zeOl>H0vdSof;8q{G7Yw06%028T{V=n=u}};D_l`+AB%BukXil00TfpQ6~@#mQ(}d< zu7svFA^Ebe?$Ve5(zofJyQalu;`?_^$4qRmbcq8U+95}`RC5X|31M3|u-r?~Tj9?0| zh~&T;28;(5y@{qRHg`Hhzz~_EImuWAP{%7k&GGrh`UCx|Dd|KMR24{?HWBY(t7W{X zgwsil5uUC%{RAOOI|LDboq$2}Fib43jE>fbk3d)C=ItDCbph&|H4!8^#Q-S}BiUaQ zL6U7X^Dq*Mh@+5{zvJREGoDl$TS2KTc_Kp|S7rekIZT!QKFP{>Tp77tl^##bWKA$> zRL=uMRq!cD{FSx~B29JvHJQFFk(fGo-eZ8olc>@!2#hC$jtMAG$69bE60fS5Eq zm^6@WE}()&uurTOAFG< z7fyH!J+m^NgCRICy7q*|9&wvSwICzat8X)TZ&uo3^1hU2o;s*p5ML$5UqSE5Z4r4! zDQ;!)=6TDc_|+16y#K@O`*L!?0esC1Ibim|Hazx?KY51$IQR54I0$Z z@Fp4Z7k%84G?oSZMU|~cgv@q}tKykkz=Uhri(7O`E7Eer4+@7Wz6&)%Rjd!K4XXGC z6m0h`jW`VQ$U}lMGai68pb~!vU^D~MVDTm2No+EhgfdWBMuS2uhU8|qXh|#5Mdp2r z`nQHgDZ5E~;q&ZGI<_?l&>g>t4bS|Fw~fvko>UPH(;E=!3(sV!Ut8PWrTOggSmANBWcnE=& zX2Kr;qCy}tAyF-Uk->8=*gS2@P?>7kqsmaCS~j36i>9a z%qvlMYz-Xn4-!1@CM|6T!hdj+`nD(S`we-*yh4pRg8MT@;0M|W&X3c@nad#*&8$Vs z3*%xEVtETBrhna_JHhLeg~9l~?Gg_Qb!(ZKhJ{*JkiNjOy3S^7Qn4S*E|x=C2WOPA@bFsRE9mubCl zaF7j`X>*zC){`N(%$TO4=r;mYu((l4aGg+TMX?{2f z_P=>v8(~!Y8WS6e7tU*28{t$Q)&pK*%6aPDk<|D7=)5WUiE8Nq^wzP)piqC%W)Z|! zcI*#2xFhio`1ucPEjwFB_=>LQ*@A$X@h|?MpG1I`X#b!aJCYW%+;jBT2;$f9yK@G$ zmm$#yo1N$L5)J3*%?J`An|O};cOtFE_BscWD`AfTZm&oM7hHl2_EcP$V8id`QBOz9 zZ^C$%+5?mVA@n0wAY@c~WEM*x`V#Xm(QiAEz_8IgKP>Kf%M8G{qrcF{a)bVQ2-|o4I7kJMNzrcI$*=c9bSx?vKIpb;GbBj;E-E+^+^Pcfb%L;S}$=`KNf#4LS9%p1T5_S)=EU^Qg1u z_F=qs&uu~I?Vek8j`!SWJioKKCt%#s8Q60{=z=>sqr*Auxln5FO!_ta8Au)7=OFn0 zEFIegdTY*E-do=1D6AOT%9dWFce{{|fqTyadsuR3sUKG_R$FmXzVD27V8nI}N*r7Vg=9H!wH<#f&!S!0n0NA}l z0CoD!Y1*V4X%c=5v_@{;z!Pw|pJsqG=U~$q(cN`O^Yv-^Q8)6DszFV##c6u88wnms zPUFP(sAjufM4z$tq?V76QGEwS>KzB$qEjpo7r+U~^72;Jy_(lnA!|DtFbk4j#pP)_OA&tWp1BE=&C8a@LTglEe;XPr;N!tty zNk=I=PH4ojg*5pc(#~(u2`-0wEjd0qLASmG6LH)Ldh#9ejx6ysb?Ze!8jUP8sBak1 zEQ9_R8x!xC7T*xxE2J^KNNi$EA;6}^XT+X7a6t^ifI%%967QP@n7eTdi^jzJro|V; zD@RPpf2MRc3$ogHKEs>XQ}5eT#k{}&;I@6~DSEdT%+kY-Q1?jEOSkNZRMr9>xFF8L zfI(eiNWAy2viy;!*2kzWF(%$S1l~jX5l#vFb5386`GtRqTMje7(6qQjyn8q$gy(U3 z9^fUmKa!xSn|D?c?5mUXbR-FAGV3t(v9o__7{;TZDN&@2EVGDqj3UitlZxmNct$1^ zF?p+?Q_Q2eK}5*0C0&Cq_gaI3sv?eJ$)nHXSu;9 zJN7=fH7`Mz#NBj2Z|KH*FzOXfjd+qE>MRm(WF6(zYk`rUz*lEd6^(iFZ?f&hZoX)(PTlBEub0TrPeP8C$qk}7zUlx zV5TGVeYgr6I~xgL=18kf8qf1!tDP4$=5f4*2UMdW1lrS_$nl6HbbDXY#m5)Zu|p?u zTz-U>^@Yjc=3&|>28Pkd-)TY&X)&bp?~cZCfe>$;R|i-K8s`y)3>gn!8rGG)wC}~w z!aKb{eyt@lwb~V=F*858C8wK4!@mk7t6LrFc-r9*51;W;)ejpL;7InND^nW zJV&MU7);kV$va~dS7qmmWf^x~rd@)AuV|@mEvm!>miLI1*NqcHx>VIJ`7}R{wAP(Q z#fAm#5Qk!O*FmPxo%wyd-N&iFi(|8ixuqTqjX0}o7>AFxV-scegKAyDh(fMFpoH7lhFsiGV z`R;KLh_lo_Vfny3(A)?Y8dYL*MDg?h$iPb0KS*8Fq*VtSYAdVYLxO5B zJ%S)z-H)`Q3)MvF+XvZ!lL9MA*xYCB5lTDsBO&3ve~*g`86P=5#Vt$y3dUyvd!(pP zBD8%~VgxUm$SEK#-~S zv8k{L&_7wgfcjZ#|B$LowZCnEBjH1yfKl88O*lYz^dp11oo3@xU8OH9%Tm|39>eNe z4Y&poH=l`%GphYUstjsBR-pBBfvwuI&d{*_ut+oK(f<8OZ`sX5G_yYpvCp76{gedA zcV>Wm)(OtIbvOoVa8hGAaE_Q>AfOY)TCp$>+5u~;O8=G>Np5|{QeZ^IZ75VFl4yIy z81yDWu)IaGQH%^upAie@SbPn#<{XM(WGbN-ql1|Y^C}ql4KJc4$DZt~E}|8OULqta z_fwbmNV_3NF(y@@9Vgh0P;~`DIl2r{M+G`?Y$jq-1v+v_yN~MLgWbHR1L>akz#C~g zh~9jU_;)Wj5f}G{X{w`}t$qZqm}$faGaDx6a0s_z;rd3kPgK5Lm7x%5=s?&dZE%1N z9!TDmoyenK4+Pg{OCJ4wAn|J%@g}sXYT2bXp`NN`x88)hsFvM*6B@2s_TWvZT(!)d zZ40UB>w)B*o~v@%K!&mO49C(CsGyHkfbV)%s~{%%n4d%O+v=kz&$HCeVOY0kj&d>m zWDtpwx#ZGagGjT8zr4-QfUs>%!j6n^d`+lHmik%bYpt(1)`u<`L|V|+gGuuaEnQI? zT~+Cc0+b6Lw6{~oWH2U~_uLwru}bW{m!=FRA>DfKWqrZ6eWaxJ2#Hl*cyB@M?^7+Y zD*bc8ln7>Z5j``Qbn5aU??qQ?PV<{T?=6!G&`nZTX6}VAY zZ@Efu63ilS`rWGrr;nM8&*&%(320mj-G!Zl?3QpUmVAh2L$YfwCR3sz?Ym{EnZx-r z5Lq*2;xSM26X5JqlXC}_^<4)WsCE?f`hc|kpeyXy*0YW#;tWra&1{8?dsWpUsnWlM z28Gp<%>hEEruafzfLM9zOMEN(F7G02=8tlhe*hPQl&Aj(;@Nyd;YRcZx@ib$8`OF? zATZ3(>%jhPgmJUfqo;P!`$I^yZ09Z-nm{6=*9|oeHom`E^VtV&h8W*pFyu*s?Ub#9 zJymH>^~rm3ksmA<{|2s-MlzTnL@IY;ex)(d)3n%KT=x@o9SR=iv7Iz@DDfNg3#5WJ zOH9}#Cl|j4u;zRw7e5CC<|drYz#Bof+G-l`+Yp(!6VGY0y{2!+t(x@Ba&uSch=#w? zPQyschL3*1sh-yW5AscmABsua>9k?QzfsHWV4C3$0Gb6MKd+a7XZTOH(Qk&qKK`R^ z^Z*bw+p*0_1m3cJ~FD?pv`Z?=HN-&QR@R(gN)oxAB-Y?p1m37 z$2ucoJFP#ObeA>$g$^7|y4LT!9mI!&T{D#oc=PRa^=J~>e&{wxfO}-k0EbnM7>99o z-7I7qcb8J`vTJb-wow~o=v}$Bc7_KSXBkd!t(D;*M5X<2N1>l@qr=9)x#sPkArHMi zhJ?}FF=UGD%dNE8STea;_K(O5Z>znq)dRg`63t`aB#>>?kMzf}Bq*fEk9Z+XJN|9T zZcfUEKhpbSVK2#*xwCH@83>ngi@sSiXn4(xCP+`$;WR zfN3GKv9Z=j&@Wr4dmvSks)~9=A{z5r#~>D!t5^rcR29c93TPbIZzHBbuV?fYMEXT@R)J>gMo{X@dx@r5($-Qf1tV~60Pg= zJ#?B3OodNg)Ww9ni{tqmX@Xu=u-jhP@L}IWaW;YVvL|LB;G#WdYGL1uiddDU1_#;B z2p#|;ag31=#UGDZZ#?+@=QO zV(9g1QT3Qr5_JM*s1|hy6O{|8uI3eZQCVH@)j!hn{b)otgDbj-H6PZMK+UKRrdwNp?$=!H^W@WTZVOD zg*X%>fqNQ~EUb{pn+&C_#l7?D)R1J)7DK7oA;<`zVV6ZwssRwmQagp}1yOct1DCkK zL_oRJHi39`o5BlJDsR9N-kP*p0ycY;HAb`0iV+?pj%!sL+3e%NixfVj^_dIIrh8>l#uG?o3afx1ls zeCGxlItlPEHqZf+0H3{qPDOn12AYj{*arIZB+@F-eFMk=RpuDL#$O_j} zzsaO&)DP<=TCac88Zgaj0cWQo$mi_K7i`-Kr;90o*P4MwaG-hyQgfhs2I~4PT|I^LZtspPxvm)1FQm!l={Eq{ zQ_G$6)oTRUg}L|t2SF?gbP2D*a?@~mEvhp%2`YIC8%cbm^8_Qsr7F>@xIb4rfZ zuy5#usc<1C_8a>3R1(yxVlAZOI#P+ZsL?OG??61vY&BFRURg_TO(i}23n8UuV>r$u zzg|njrokEOmuqRiX{1f?v+uw!0~>4Y3o|7+S*~ezysp+6udBTfTd$=nrjd{?I~`P& zaQ@?m+Z@(eo>}VaFtEh~`EhY@8^o$oS#NlnQ>3wS_G|jjG}1QU#Mi6^ufZG(#duox zd)gHEJmzUN($J5|^yVkAjS=$W9Gx4_>>kDoQS~*oe*y=RPrjl7pThHxujsRnNslhw zAs^iN@w6_(MKsC;S4y>v)B1W$HYX=`=jDYs^(#7lI&c{H6Qf3usT%;(YNi z4-|@j@xU>0CkEhd36Wf$W5&c2rp1Ng-Y@8b>13sB0HwN5NT(0}2hHrB1)CZr^#mpC zR-imGCRL!)YO9+Uf1bO)ChRCobW@^+TF=$3EumD`6Ki-~cdTJ`^;x+FvKiFHeCz9l z_{kdj?x$p~re$606S(yZ?SEc$+{6sQ!>t#h?MukQPL2J(M76t?rM?!D9~rG>&0p#P z7ah2`;EXbHb3LqEsP_!mgxT;VFJ1p7E4_U(vVzj#NP|0)cle{EKOXiJifvXxx@qw- zF=!=SK7$16&aW`2VZFgx!$o2r;bDDV$2<&5gFCe>B@9yFRt&rljt%1DVf~{HIPT2b zSBTeEvodc0f}2Zt#8bqfhX~0z^c#oJ;paOR3bE-51Km9fZj7+IDKEq~+0uDMx!7aH z>;OqcGi<1$IEw@at>Q`dYipV` z7E-=oW5Im{C%Q*}oe8tT-sPgFjHPkQQ>B|u&$rGR;EB94BKHf#yVP z7h=*d&QxEeyHbhoI}>qK8Pw;p)K}j+xqcz`<7sezt412TUj0J!TS?cY!0h&B1Wc|r^VS?bH^u?^r*Cq{#3 zvhQ&q5CL4D4CHZ7M|=>ES7k%GJ@u4%Fpn!7=^7q?f$6BPF;tOCR1J<|9FCcwvCTs` z$?k00E)`shPqS(NRJin(m`xX_!m)DQZ2D6wT-=gD7HFeO=9p@|Y>aHoHxIG~4&)8& z%CHbd#P=uR#2D0(?*b}aVcm!QV5tE$=g>)nveZ{#o8$v{Ig>F3K1ltQNrxpRaFFd> zD#T?-Z|=)6X3rJk%o=Q&Nmq#D5CX4PB5cDs_G6ic^32S%E5yz<88YLp5Q8L!VDOZ# z?Rj3MiJqGS*SbBVG)#)%NiUZ}Vf?l_qFp#T;B(M%8*J%;^1Uyo(6POyWZ((H?85t3l^)I8!Lb1~8@^T4gXkwxtwT;uIoOeewh zyMu$n;RtQXqFv{MyXu-vljeg;_sF7)=EI$-0u$XlpY)VnHqcx1VX=O}Kx+LnR2Y-7JOpqn>`Z0B%-X(3_GkrBoZdZ_n~Y?H9Z|lvdB0 z25+pMiVH|r#iLAES1+Y47LpddyXc+ArH}cE^Wytrke;2EKH&$>0C?&hr~jGir_z{_D=EeJR|JfSV3b zLCJu=_?%WQ#Jd+p8oY?~kq!NvPFO?+$=ZKTcP=6y$gX5im&I_>9-BdDEheL7uhZ$7 z#iXHVCEn3k!&$+9_pXX)h|^)fmmjYKw7 zBV(ib&uVJ|N0G~DK^j<-NCs>BT#H+zHaXw8gAl{g0xJiED$U)O9Q-~q$J1{w&LOr7;~ z=@Kw0E%em9gtXV414V^e->TIj%$Kebi!jZgzE;!B+yd-vGjoDrwav^r#JDfxFf+y) zkYr|7>JZCP-}(y~m6kSSp(n<>CdFe-a;PYn`bcocnJqHJPU_bf&U-Q!cJysZ&_0 zPE2$rvy*1IIF}_$cWXLeDzCTWoF9#1Nx*@yak@xBhU%(ApLRFs=wQSiUy3+)%z_>+p@#m!J z#P-Oa?E;-~T#<6+MV>E)jUY$+J%#}R)sU$xL0JK>={CH9G=)QmV@L=)D2*NWXmS_Q zs?T9Nt#=x2l?hJ7(1mnDCO8rAFQm&eNsEX^m;nxD9G8*Yc>IOqg3e1AGm!q;aeHcF zD!rXajy1Jw0mmJYb39NeKH!04;z2F77@&?Zsq}$?1T>nb{g3UDrCJ)CMH=c}LN0e$ zl^PO@op-WMC5VUSYs61eAZceCc;6eA0LH{()8ac~um9rZjyzyo!^Tdg`eHS)=YJ7j zN3NObOGfoQW1`punI2C;_ajeW=G?L7{5gf5%Yrw*zTt^>0kzwaxEPr*FXt@hgKRzn zO6K#_q#VkMlU|X@RG+IRk3n+0A77KaC713zSb3N`VN;1F8^I{IO`%JSq`qqIyqeCD z3*BslO9S66q(w&3sl~auwYxGO<8YDP*_Xf0rHz-91+t*Ibj@-yOE!7|^)QjZkEUkN zHGFBfXIR2M-Lku7cQDO0;B&6w?Pqhq7zH@VYic^lzX19F|6jVo1gDqn=dcl=lg|OQ zHL3&ftS&&>i-iM>CoUSXUMkzv$3qZ!l}N)dRVq{lk3(=YGo%vr&HN1LZ)%1Cv|uz? zVANX$f}w)hpvN0$aTm1oZZ>J{e-@Zj@2ysg1BHaFApK?ips*DrUbZ47_kSx$Gt$5X z`X442ykmo}tDxv*v#D(*X%^@<8>#>kl=(SG@Ol?IZrtMadK-tH$>3~%vrp+Lr zMYHVS5ruKkrs{TvCA7G57X57%Stj$CMc?^?WXPU=Mh|~MmdXOPx#}F!ljv5@fKqU- zftgqQ93!}y4GRl#K1N_`hs|;fnNpK>45xj8zv3Vc=Cm(3Eh3SK>{Mr};a#97*q?Y~ zsWpOG>ZcfA0`W#O&?>PTj$jtVI+*N?z4??8<4Kt4`3in&;~sPpHq0HK0D6Nr5I z!Ppz8?v#E?kAF#GWj}sOJ=Z`-ef}x!xCV}UvVly&lz8hWsKk%qEdigL8u^>Nc-J?$!W-E8^G##MBbDhhq;B>nCCBIfnP~&HW|J$T2#M zl7DoUKbG1Ob?pR39J=;9Mr!HWPc>=Raayixt2k{9UDF}5b3kofn}%QwT^s#zEnOSP zlbLoUJqPVN3KC-vbmj?fYgYh=o!X^zlJRU6(^zp%?JC8%Q@L(otT#Kms-;~;h&!}v zKg;6KuAebhtzA(c)45-Rc9l=#+I3|b*RH>SjBD4csc&i5O-Z}rnbu<6{$wOvyH2n$ z*RF#s%(ZJb3v=z-!opm;*0M0yu51>r)~=x_#9P`G&9PeA70R(%+U3WwTG}P&SS{@; zo65?lrCm2TM&;kYOLgI&nvVt0+ixI;VM zW27%6EserhwRW6IrvH3LdN$8NI3$fvGTG zYl@+5`JD6_BjH*znT5I5jACJ~HG^1~YfWDk=33L0g}K(WW#MYAc{KUoT63LawX~*) zW3{wq565b0&3ca2(i$VjYH7_Jj-l4Hq}l6e(#XI4WW0W$fGLw5EW56j z=FO}L^n=ZCXJE_(`pIU}QRX*+ez%!49W-h@2!{8~qcvjp@z`~5;ALzjzGvY?fnp_q z?C!AyHpgr>I47zAXAw>_svvuL5_S8YH0^OU$-#!XVp5K)NfI08jY(i3f;{);Bs%tc z5*^$QIkVMGi8%_!+Zy18r_vQ>*hLmIljwo(;n4b05`FePX*Tr+FsS_tQzsCyH2}%r z*C0Lf9-rbCF=QeuiHVD^f`OMKW`He$g^#uYMDqRsLiAGJdeqmh`_9Hp@ZbRclOvbc&puJXrH`ui5rsP6g+usG z*^i_JNu{lRgpG;>7qRa+_(cggG4@x&^$&k*Ul)*Bd^8q2QH4{9c$bB}So2(FVQ=Pr zorG`*IxJHZ#N++I)A;#(qFg1YAX$Y%|Klrvev4{RGGOBP&H%% zd*RRJh#oAgVn3QtH3s>4nqgB(e8R$TbX}_kZDf!cSbB=L#yDH2K3p8Z+oFv3Ph&vX z0lapsfNu~0d6B>k7#n$<)eZ|^#8WhP_71b3QM}OG{XD#aqqZr79g5PjtXWRCW zU{ILqUYbwDDPvgkhJkR{yr@H>J1>w)i0^imk7fcf0nm#UG0xr}*g6^naK25jlhfHl zbjmKljs`x!LH>e9VpnSFeFx(&%5BYgV$o}&{S|1Dx7a{Y{JYiVx4brtm42Ew4)oO*>xpg z;IG(2x;vWW%1Fp&PkjO-ypuQ(v#=L{I3i9!dcbU9tXy2pzcwaTm=-?~>kXwFe z;Oa~eG|ShzSod@iXHLld z@>h71H{|DCq6vP1`*TBJ)J0(9oJ zyT#@9<)%-zStEDzjU636U<^CIBVp9ou%Do{)zJMURjTp3rU?Ll4kw}|2G5KM(geYE4uTy z++KUgA%cO5--s8H73WgVz2s59+h$d8zLKb#=O^Ev0k86T32?7Z5VEgi=VzaTRw>RF zD?Uoz=qWEKmLGs$fwq&vDLdh3MyKqCFS7tYHf=w5f2*0kp9@C&u$g|G3wPrFG1HZ~ zWEK7(sPu;hn~86;qjv3_4KiV?ONub+zih5tKfIvsY0 zgm@ouWQCtxh2LM^>YaPrOtyRPJw;yBji~-9(P`RGW(KFsfL|(or}mGPPMk1(`s7J~ z2g9$EPM@3m>@w*^T=AzvyVEXLN$bW#CZ}j;eF`MWvu1n}JiBue|CQ5@9=W5hl06DK zrkJ!C+$OT#?2yPhDZ%ioATHK+=OR7e(f(XyU3i3^i&VlR;#`8bHT<=?%5Eq`HOfAh z8MsrP_NEHbTAa(y-+h5*aE)!c`-Y>d{LGUdT8(*ds zw@GK$-_Mxe{7k#tAQqRV9w#Kc%}u*!>fH#5{kv#cB)|gt)S0=c?>Vp=w3kh!sVrc5Wamh)YhmqPUw& zrHgNbVrNsuXGFK#Ll6YRjXh&W3&NPusip6X9WvT*?q2RoOqf@Kz>E-6mS7QtyfV^z z6XY`=j!&C3@qlR;6clzh!s6#x@q31_&w#!W3yn8;uYs>LL*P32LiV3pBL65e!2&l@ z)f>id+}vH^D;NTEfWzQj1fLTR6ctZaeVmXF>4UD*;8Q3QAoUKW1fi<8-ELpLaR%h( zc^q`bZ}?x)K}EFCSRqKS0~OL`ev0B&?(JQoA{51A+`~JxiU6JOsCT)xhD6+{xZm_i zzL1N7oIc49Qf*kuA5v|h$VT^=DCE>9h1PL})p3Q(TzA}iwKs+>1r3aus@#`$&?DQm z6u(T0@uq-0Q=%g8Ss#nWU9f1PebviP6u;pS<-e=|81l+I;(oIY;PxxldnAazXBQv# z=(NBzQh*`l z;(F{9(}(J~vb=w)Ok*Mptd~r~Vhp3C^n;0_AXxfE2$n?B#FD5WmPA(qs8WzDi7L^O z=q{KtS_&2g!T!yArpkO|Op$h@0SuNrOA||ihsyBKlHe~`5*oo@0I?(l3OY+dklm8d z*sk71^2&+cCGP;qeGdAAp-rP*cXz_#r%`YNhTfcEj+Z6TQ!rGuO#%HhqCiaJpdHua z%6eo<>Xl`2zvW3JD&@K*(Ti9#B*daofDv8cPYHi+LXjyW76s>`pXn8zpg`Vp-^{zF zp`A^dFvH=PU-DjrSu{)g8g%3aYYtq+{2KWk|VgA-mcBmj77%3V>kG9)gx?I zM-=G?6GQ>42VE_0lVB{SfH-|W0x1nkiID0CDN8@s2unYuXzAys(D!pumyEg{S7zzw z0a}kynZ|fp6e4$c*UU$zVZM6?KpFKe>;ye}bnc6x0O&IB7^>nc&Q1Z=utll-u_38Pz3;HpNxKrSy*?tg8 zIlV`@?up^_(+m1Zfibm)h0!X~702h(s2bv!LKrFt(!m#YdtOB}3%StI2U9A+ zEd}UrYe5Y}1r~%&Keqx*7-hHt5j^j9Yez)Dc+f9;Bg(~iQGCKLM7LfAAxe{A7qeZds)x^-?RA~Kp;>IbKe6o+TkQlwugva{F(nSpSj!+ zI3T3~Pm3S>x9;{K8%ka7Tavm~8B$xr!0WJn8(@aH(Fc=acL1j)X{^GK)ZL_2^?v!4GKBI%QUV}c9gH>r12_QhPaY-*y?^-Ox0x`K$ z0uIa|GXQQR-Oizcs=`r+c9#h`dvK(yPb z$LIpBi-)Tk6|W4K?)@=03r>F0h+@ycsiaHs%)mCfbVCYgc+POx8z?#8BKLMwr{7VR zlo<{iQYwv*H=O7Bl_D z(7P!!kOx1kZ{Wnn7Y4lru&_Em6Q--)0?ec8f+j%BT~zs=uUwf3l|g<<4iHx!C=PGj zV_HV{TEn4xc{g2lRI7I_@dCTt&0Tc8(QHA;Xq#8jg|Abxg!Q<7D8&!!&RV;@s9uWg z6AZ!m7cx#lGfJO%;bH^bN!SJr8>ldfhV#W|m7QU+u@KSif>7+?7O68FGMx902P5Az zJh-jiRhIkPSjcQd=QNxLjSLU&d=W3P3rKYm0*KjJWi;Q#|r7#=L&9 zkOQ9d3+Zt>^ERkq6rtwwO5gIoRqo|n@*dO-$%q9Vz{fF-^?Nw#Uyss^-b_-R3MfhK z?oh&vE5;qV+Peo`zXxXKw+>tLz6ASrfoV`(@LRPVonSWYPJ!uC=V2<_}B!Hl}3uqs~_>sb(OSx!W;3P_p>vTLr9NY?$wdr@#bDuBCQ5Sp%dZ+gmW~uX=vD9n+ z>Vi+PEnrSq(dk+WwotBX-Y>qnF9gB2E(Yh%1isv!iODawpciId26ryhtF%AMyb9apwY(ET#Z|}o47|uso0E8G+br-cO zzSs0^6?)l5aI)gG;HEC$!=B`$;BmUuPI2wbJ&bvgPCE_Leh`Lp9L#WDPh4|Bf_Tss zV=goYB1aK?uCIcin{$M0#BVbWE<<^)H4whj54s9f0|&iOj#%B}^bh*NvzHn<3F?yXqT( z#*`l4#fEr|pLoFLUF7_~;%y<5B4Ac#Q!|_Q557`#^4;PNq1|-IWBZOP<(T3_v8uo7 z`6U;qMhXX?Wcw@i2HaaU*jhCUy1s#+9 z4}83fz4JXbw@h8I6lAE~jlFTG?8f+y;k|fSWSkC#p^$)jA9ET*0xDg?SKJeJ4e1d^WBV|k#Eg- zb58FTv7J7QgpcC6ZF?4ksYby@X7WZu*P~4||V#%9($RVHNvStb$ zF5^gk;#h5xAS8}WPE8((<6jU43>`Vx-(4B$J4`V_7@w0gBy|$;nB^gk&-G<#_!yvq zk7QLqK+=#A$z;|$2+cxh@}|k-bCMJLO(LGj+dLHGb3HNR0w04TeTTM~l$tnc{9;WD zZPI|)oxaWI67PV)-jk9>qzbAbDWIf2dc01BIG?t-a(GP84jC|%Cnsx% z^c~BS?`Q|744s3@cyyW1zPfs-gvs+Kd-zVCGa39vAd_bS|A3(xSO^nXA`?G0pz7 zjO_%;p0V9~#>JMD6EfY!Z;UWT)_SY}vw$F!#JiH!3bL)_tUDR(LW)bGy@>}QD%#P9 zyiN|$4}3@<*+C0@$PhA(o(8aSv`ccbd9t9DqMjrt=a*%;n=4(kk`IkhlXuA`TC4`1 zX`;+C<#BRy{0rdu8+e9ND-wMiL{B7c0pe94KBKSuLM2b)<}%rvb~GkMb%MX4uwfYHdCc{In1Tw9*iUBE9`1I>nEK&<=jYj|9>L`0%tp z#4<>|LMQu?_E85J;1DuP7P7sLZ3VK0(!+kFspsrEbU3~1M`CoX9?H612i*b$(0HCK zpgFP{ZcjV_^MO4}QJV8ts@V-{9rsiQ3pI+^>)O)sGM?zbOIMQA(vE+nmUah<2qjtr zrPN){gfKR_BL%wIpL8cW`nNx6)F}K;UWE#*p*81&4pm=ir9RZH5lJDp=#WNaF!_?M zhOYtI+j$ipM$O#>gXXS1>n@s%F>4;=RVZ2U#WK3ifZZg2L?@b9lwos3?S`v z7i=JI8>wSEBt5uq&>R{(IIhf~vDjQB;jwh@5yb8%rFYNq2DN&OUEm6}ctZ0e>@MjD zu&DF56Y1n5z2-=v=1BZlb-@M#<;xyPKl1YDP|WMvVpbr`t+@an$VOCwUd;rRVgWAkrpg2awTSLXm7tt2LZIdF|vi za{A=8+ymH}4RY~nS{g(mM8z$7F^GgDpS1$J)|jR+_EQ-rc@)Q8(3;XNfr96y7C>Su z*T_ie8d*jm^s}mz%DIKKS7Q>Q`&d?B>;v$=1u|_AWQ-a`Z-p?od7(xLy{ayKOQv-M zn$5dZBWEMAT#}q=1ev;#&>TP|G_Cf&43??^!N%UMLtacg%c1ji5DtqcfGU8o!hsGR zZ2koD!|o&}>os;z4Qv}wsIhyAFt!+JAdCuy%^$Gn8VA;mc4|UeyytsIRv@lSYra^k zmF%}=0L1!0rze2uwOAek%;3S;-8Hs(z+9*SQQKWkSHgbrKr;g7t(6SG2OiXr7R_k| zcj(%tBv^d+4&8&_UGLC8o02$DyhHB?lK>hPOx(m9w^_zLnU^^vXH$4~tDM#F>@qpq zpJxp`OMgH?BW2oPP8%j?hw^MEmJJaDIjkDN;b*ie7((RhA;gVbVCey)Ib|P=D|u)X zYN}(e?+zE9TCw3{Io<6hcn=>s4e1j&{hu53>k!f*q#MdHs|2tRNI?PdBC}kWjou9* zq5gIlQ)oeRFHwsYy?2X-hLVmguUeCnp@8OzQKNK4H#u1kR2#EuO=;EA@*8w^C@B*S z*J0=byIeglyKdY{wPbdxmb_YmP)ekxZI&D!blU{5F9GdvAGr1HCSsi!fG7= zu+m&bwB~3IXgT1bHMiuz>kL5uXw88j1W-g9o>wx4Ss0vTO6aF_uw-I}{`U^fH2Kty*A6gfonx{4 zeG#SMktA4mAG|?f9)-kbH3N5oOd zTQ_0+FL_X7Yzeh8@<@iW8B9w)imk<`D zsWc>#gy}q;rAjwssScrM86XQK>Vh)@6AG!r0;=MQv1tcms;XfCOmfnC2HfKS`fm{f z?t*SrHSqzNZ3>s%tBJR%3nB&4?7~zNd)%ZaB1t!q+@z`~(%$vd4N#Tdk0gQOCpYNu zDAHCm-k=>@kr3~hNHVQ`QIjgIxxXdOU@0m?zBg@6IMi)rmIfc^yN&C7<mrsM>we_a>#tBp@_4o48ZBy0LdCh)=nu_Fq`2o2J%Qh!U7`<~la>J=f{XYRE_n=7 zz)8uq2lS`rDs2}{#%l7eGL0_P*b+-Wm7~ow=p6;*SIBvZt1QAkPYmDw(}rwShcIOsYg11iEXvN%~gO%9f<5=u=5w zwj`az^H;d*?Y#m*xL4h{LdUcsEyj#iI$Uo6v&X9xStHInkL2EM%-)bDXwD_y(UZT zIED-gu`Yo4aTEQh(qJPnA;tm2flFE`{SsXm15?!3ke&&J!RejZVu7s?NbONB1h0nF zyt>iVA^-9M!NWCR)~GqEojXRT+Eev zgO7>eV{1T~%GS=fC>Sx}pE-}#es&%BaHGuo1tV#*b|rY#AHYW;s! zrsM)_*)Gs?ZAoOO?l9;S@vfPT9Rf>afydCvY=I8=YZ)#9H*E*iEWb=gv?FcPzIwnG zj#_gkzQFnIJlX(PLv?GOT^z#3nKN-(hQ@6`taO1aGz{u;>?@s?sngHX3++gIvDbO( z(VhfrBcKqhZeHLz)~I>Grs=Whp5_1n);ZO12C0==+ylvMCYL$7AqT9Y>zqB22Y`Kl z(Tw(_RoLTmj9!gX^67K9=7vRCHJflN&QWuF(sESMU9^RtSy;rX!QNSfkTWoY0k9Nw zXtoID)-A@_PQj^d{(sTXPSCb%=jfnLuzWsvj%Ig&aP;{(`gsS^sntd(Ew50`qq%9H zp8|)#^~)pF55rL5S$d%pi4qr`rL~<%|4^;r%dS&)Qf+H3p;>TL+eA&GE1oRm9f{Mvk(MSd6q8iNP9zJ@e^kSdq+ zl@6YyAzetcxc(&V+l928F#jYp$_w`GUUh2N|9}GaER|e;70>!$ZMf8`#C)N~gKNkX zIEs)_B3@$#@q3ChwwmR@@FL z0@V7R9S0(@ZP>H_oZ>xu_!RG1uVcJt9~}L6&t5*td)9oE_iWM8fAwq-c(7B?y76pX z&priTc%^5rBlK#|9zV%@_D3Yzv+8={E6h9k343-1tl{gZ@14Y+of~uuxE!78=)cg@FvPa{yht$8q|`Ya}Et zlo8f(0tN(62FPIwEpQH(mkw>t9;08sM&4FWbq1##qaoc%qY;)4dwbwk=sdlvk6-7!>>57JM2k{05hztf+4l91pXN3_xu z3z&SH3k1e({(8+bQ`*&3Y4s6$zb6S0^N&!sUa-QAIRb4d)ZBvrVbAgar;!>Tp?!Oi zCgQE%>G)oxY3$FxgW2O?Ck0(9FHOFX5Jc(|+>Q{s2q9F|@IHRW0n0D2aeNi&}N^{~# zQd-Wh0GqOpN%MH(lr$3)290D$yJZ$2dgD-(jA^$_*{7tSUrp(MW^^_SVne*P0`U-g z)-8LMRC?nNz91+&N~3y1FfOj3n%<adLXPuWr|I-v;>mqab3>qEp$r) zd0+G?r%n5k=Dn?DU;@*=b5Et+kW!fTU3@D2$WxV1rLQq%SaSENVQtmZI{$;JgDhI< z*Zp*UUlQ78YFRM`b-3%Lc?46u9oCe0pGt$v;FMIad2AN&h!>HbWpqDWuk&sW>xZYN zwGW=AN?U&ATCe<-KJ7~ugj@%IfEG7;2J6#C=1N$p$yWNkf|}qOXWQ+_0P!HFp0t*i zx$zV?j#~3XZdQE-J&{O)#90+oN+ezUM<5q=;xtZAte_o|U=W8?&{0V+SXS+$E0Rd_ z5wrI>?9mre+#av-6xgFZrX2RL@2Yxg-*xw?c`_F%?S-PwMlu}GO5OKTWisj1X8+#* zWu))+zG@`8ml;XS*-PgqlQw>fQ7BHZFz&(bXMdqTCBp-f)L%dmYb0T3T{C(8ivUxy z$2BuJFoOZGS};%Nz<30#A~E{|CYS2>YN>9omTJLD9TCjYb*0{t{9Y|4yjtvDIaanx zFjv4C*sj}8rF8%(qF)CGchr3ZS)22TIG~pRDQ)47t%C(Qm~?qBaRKS( z@!WiykqTA#;VR!T%yHN#%@b6dWl0(RUPB^-<{>Mbf*LhGt_$VrwPp0GhP3KFdw+7W zR}N@l)YP)sHfujH7i#=t%RqRzxiRh}YNg4D;;}ri!K5~PKkeI(wA92P3=4dDp^2m* zxqNhllTgC>YF%-*zPt}-#70;l9xNW;NB`50G!0yYJn-tpjhfQP7~+U;B75+g`e&KZ$5|crRAyZ&N$U?q)!vLQQaV ztzHvs8%S3|Yv{B7B%zxpmsgutQB|mEWVN6ztOnc^NJow*CmS_QqH7JBCb;itWc^rR zd#s(u>C6EzzMuR|mkc0%#E^1o89-wCegN7w@gl&!Z3(hZs>@qPV$w-cGS&l+#|p{? zGb~`3i->z^>_9jo@PT2cv}XmFKa&Z89Pl!)mH`C^e9UWP;Nj1#h_89A3|vLPQKfl3 z81P~#Tj0PNAi5U45V6ap*v2TAUozKnbd@!Tz-1n-G;25WVRIa$r?E5)AphQF zuyUg_hQQI~sJ(RA5HdjY*h~K!0&9kwKhv5aq)Ce|FWZHw^Z$I=&PSbJ`LdmhI{(JY zc5&+bdoSB5)cGDYcy8lIdk!T%dz>`05eTmT2wi_9^oYMzgimj)Rgk9mn;%2vTN|Mw zj|(-AA)K{k>%Xh?KSN2Pm}I8+hmxpHfBTsq0b^Td#tw{esxuT)sCg9sA~Qfr^QYxQ zNpt%4Fw)Gul`B*V=Pzk=tdk-g_+9kP2d1_d3 zfKB5S>b&KGSprGrzV(vS1@D3Ou&RDSKOas)o3`7{wD(4Vd7O`t%jq#7i%-q;_Hfd* z;}1Zx7K+kgAM*o{7~mu^vpp*?$Wa)Y`#RN*ATg=0iP*Ojh&0;=bTV6^pjqv#3gxQY zae&Za_~;c|SE@O~&wiVO*KqTy3*Ht=4v&BfCSIP{Iktdya3OFltxP2`5pV4T1O^RG z+}M4iFmIOo(qkuWJ(47dcX!a~BS|OS1)~J+XGjZn;G=DoF%2J@<5ofm zJ2WIr1wx_5R}Mdl)~KRF8Um<1ZegNAq!$z5WlZxiWvir%-_xW~q{Z9HI@BSS$2Em? zdppYYm*ujsrjX78=p4Zm(yxF(G{X1=YXPiiXFU%rj}TeEogN=Wmicbkiia5m8x`iR z&|M?9(f3D_7X8|9!}!Y^RSj1OOxbs(FSo*MYDk0OtbpmHA?-~know5SOE6_uOR-z& zU!&p3z5Q1DVl)Ykv~8&qfTv{yd9G|xFU}KK7+Okaj3&*3F*?2VOS*WI|W65|@O@ACqc8aB&>9jYB(E^sqv&;+fTLt0q#3R0S?;>X))&6ji#wvl9Qw1o@B-~c1bIB3yqmT+V$!6 zN`ba@1w0!TsQxZFSq`L*N`Ku#izmPX$cP`H654bkiKUMxkaxt>-_c1E$y-rJHe=;@ zd+LeJ8%>HDl`wD`r08aPV>8tLmg=zFa2 zN*ZZKOVh}>xDez7bHL0NTjrsuF=+hFO=Qd1zXe+KTr}1y8M^%~)l4E|#Kf)it4SoN z_58Fq$L|>*G+}7k(6p}Xb7)%ngt>AG(bp#COguJ`UYbOrb%`htR>kJUvbZ=7RGWik zAd&+w%%L)%=D;&p@%GX@Q|IRiQsTE@6%1<$V2O+0F#R6`J%KOb4s!(N)5j15SQvUD zT>wz2=3x|uwms{K^xHRd`DEBR@BD`DolFvRi@t_l7NM8@OM9PAE&X&7kF~#lhd~q8 zILsAheht;x1eP9*1xP%}ywBXCH)Qpi+CmMiZ|#hsZN0=!P7>#%M0Rlo7~$J15)06U zQ;16Eh4KLd&6&{ZO)Ot4hgLX8!0tb>sZQ0_PJ+W5s9KIiWmUhz0`;mELDr#Ue!Z;l z(_Z!MKDC*ur@}+Px3~s%8jZqyLv`BKiwJO1=Ob_}rTL6(xiBsVc2~S*-k6UqlO@4D zI9b&z8$s2m_$b+`x)YEGU8S>|ATn~xunw%2J^=}EsX~^(46|{g;Wq0-zfyN6P40hd zxLv2nr@(`@Wd-z*;Wq}Ex#vTcJtoPkcmb0L)JtRDB);9gVP1%5aE+lL`rVCKY9o!CM#4nZMyj0#&(kV5&=04<)~|E}{c;+t zbH3a_OA*i9K(8UL-9S}u!G^rk22?r@+_c6^^>49_Hqex}fc@@zIvv=>6YHt|EvRPu zdipKmOV`sQh|gS4Z@ooYhHKU{`_y!SVeo1T+pMP@(n-tSBJx;?3!2gQ-*&pTP8I>Q zS4A9LM^~gn^_$nxZRz-=bW_RsbmAw9kJi&W?~u=ioct0B*LC|7cC>^&{0-m@g4L%S zs1H{89H8WhRh%BXpgz&$1oL3`G-y3p1g0hl%Ax}DAlAFkn5gBRj; zPd*C;uEBwT&BNi5!Nwqu5nnKZnQfeErHyNRnQOjqtn`Z4(66S$rI*|_^z3vJ(XuB> z$DN}WUI@m8VQUBCVP>1FS}AA^4SkPvj}w97Y#iACG50_F1=H|JUIo0otTiu_;nQEx zg7--4$WC9uIuYh?YXZbvSmU|o*zsmsXS|vAM0)EBdh|UK-R16DnX4L}zcj%E4eM;5 zLd^vT5z^0P$;ogb#OkBAUhpwz$nw3vpe<&Qm{1i|4+cID(Hg4pvF`SD$lg+V??1;pepUebTFI$CY3TQ+Amo@I-|a#uJC6yTw3)>m)>8 z3LY}19X4fGNRNtX+nJv;Zrytn z$&Uq|Nm)g6L*)+EmIlc7?D4tmB>k{zS9o%c6}c4AeX~jA(7%`0l@2e;Olar~?7_nm zX|IE)T6(d3UVRPMPVgSv`$+^zT<#q#%w?{< zk&c{8A|sBYe;PEm8a7S#^Bu+9&p$1u+vbA5KQb}1h^I_w;mBrPc;R!nc5~D<2rxME z!hM4jwT#APz}3Y`%b*hUgVC6P(O`d_Z;TwH;R{oid_4&o8+-k8!)fWHDWf&Sm3rG; z{saU=NrW7|-`ND1tqtB(sb~BzG8#3vcoo3gjd!XWFvHGOa^P}bS1o1mO$W^Oi%RLQ zrK>VYK-&XIg_R~mZLBwdi~0{o&mja8Il4^TC-n79(ljOrYljerBv`>RZ(^D!i%fGc z6=L^R(A-QC6}}#ah(U9rQ1e&)#pjlIH{^*_u!5Fl!d`Cl3VJaU%->@LeU9IuD`-#_ z$qqVS#2R`Ghlg2%r_WC$OA+0Y1-F1!AkF+c5C(8U4g!Umv$*&g$f5Tc5A4~@gE%k& z0SxAYd48}XKZNJwF>lX0Vjjx#$qu@f=euAYoh&h0nA6DY2a-o{iVITUp$#6o%TU#F z`p!HE7T+(YOXk59v^C4=&+|xI-GJp_5xwSI1B=KZDgkK*%^7oIy~B+GOliKfk6AaI zTQ`YeaOQ!%01J1tcw@x4N4dfV4ZV!=ir=eIJ_#yB!D1f{}a4dX-?%B zJGN9xzc8#X$Jq3%lzu==u8AGBD5WnDg5|Bu$c{RcQUNPGk{4zZu~Lee?JSYa#Y$KyWGTvw(y(wHleX!BNgt92AZf$PFXSSOCk&`hd3eLKPd?lsfZG7jBzb=8YM}Aia6ch$DV>x}UKfk?bX_(X zB2L%Sd)Z{T*jP^!b?|6<@yB$#j*Js~d`!J_NawzakC_P@Of(^YDX~-P#j6-(x0l-O zc+Oa7+c$D)ZVm|w?wbn@f`gJex@_o}T)G|TI=@%x0o?7M=dek@IovN=0=2_kir(RZ zdhv5&hQI?Ave7gZNwB6y1>_lE7((WTGe9rIm@!XEdd-zW%@wN2C4N2c6!5kJ@XCx( zE1l#tI1qQDwdOYoHx$qnxiC8v6wn`XNqkTN@PdYa*3S;L((Hm&i(ztzM^gRdP%E`X zpipzEZgQxVnlPTa$)Q$qLjcDCn;dGTr{End&nAaj=^xD7v(E6z0bVk3(AnfrD_y}n zn-f~G8K73$g$O=(xqu(%ZPBpcgpC5233nuO@@e^Em=~tz)2EAJUVwuioEI)PXuJFx zkP>MI&3Wf}A&k}6a9(g{Si^bYQXX#yc9%Ra9Cm`_dEvMYu|mz||1mGDLDDPpf}UXw z=YvGTky1)+b<3xinUkqzbr-D}Pg<$0mGlSFx5@I{F0*#}-u!&bprF-CbGCuVu3 zc)1vu`7JYgF z5Q{y1XKKlqmT^b)sPjyf| zqp~%xLh@tfr*Z0EbyN>7{UHEKb2_J%)=^ooR7ig?>N||8lfJAY!?^&eR>H`R>nBL% z?RGq4(J{Jw^JK6S9af82eiEb0w^iCX(d8#HuOq!s69nVXH_i*fk$feqwT{N=A^fde zOo!@;Mm&&B?=6GLd`&jpt0!S^PS0i`0w(igjtfG`2;n;daHirgRV>FuO%3=Z;La0& zPoOCs^|>J<96mI4TsC>Ki1s$XS=pjo`j!Ef0mX~xIs+^NmMx;c8%Xm`qhVA*jCy94 zZKL7&CyrYz-FW_m<1W#Lc{H++9180*56a=;f|@5Pq;@=UNUF)Au108M?mXJgNJ1N% zv;N0PLwOdRWQ57B8vEYB|p3pqOpI$<{E=oW;oLSbpd=C+gXAGimNp(ny?^Nmnf;t)t&TPAqzH zw;(>X!nG=}L&-7|ibgYRi5Yy(< zKTKqf`1wLQU>OO2yN#)bezg8ueIomNy7cMNyT%@R{O+ND_4^uNNWtK>%6VP;feGRN zzkl@DGI)YG{X^#RLy|rOKZR#v_{=P{{%G+5ywN>)9-i#rBZp{wInRvPP;@7J2!SJ& zA@PWq9|0|N9-XqBM78}95xJm_e;Bq5#g zOl3SMbYT`HMWC?v z0eEo*U${UGI%d)~pTK@vlL7TY95FwJih5w?Wu3gk8T8#xNVvEqgBm^|iLI9c8CNh4 z84EGr;4~JttJ3kg^x-EYUmP%(&MziQ#7=W5SxFX)6SGPRR+1h>cX}4of^h-@q-4Pi z9`VAmUfPWrI16DHwHWfPGw*87`vhOumrR`Z3Fk#*0V3NpdJVkX@&K)kSANnFEYv*2 zd@kfi&*};Q9)RH6CQ^SS*X4S0W_)lX`8o)Om0Q_EHSuFFs(> znQLJF7SFTyXfS^s^GrPEj?_^_O)Z4W{#^Kf5k`9;&t_HvE{m|-YRtW?a|yBSEUKa; zNxb<19YUdJEFaL^ui$0Tqrj(R4*1VZblCfan)`4RiSJ$39Oavz&T~-}tfGRkSXtW4 z(zjUpdzQAb^g5Ql&C)Ab`VLF$S^6$ZFJ$R^g&He$|BQI)5>bgl%`G%_5;OqatOLhv zh$YKdFvo5qmLg+Hj@>~_BV!L{GI@6q>nCHEIffU)&HZKUFvsZ1&&WTzp!a2CqI0=p z#^GGmGa%Ezxo#oiaKuZPffFI-TqiiMlXLAuWZS@o&h;IFPR{lDj8*{Dxs#ETnLAB_ zUl}p~3L0Y%%$dR6X*_4BbEiQ(U*}G}c)re^+G4)Woxla6Bz-03}zHE^df9BbfCNgQk7P8~Vcz@0)k zMw8aSi(a#4mdsg0ek8hC@5oj~zj_lh4!;_WnFfB9?9BTb=jDFYhVwf4RTD&B^(z+y zo&4(I+dcr)`PGfL=?`n+ouwmhGdCLe-?tr9bgpkP2anWoh+v*#-r*00jP;4^hYK-R z?+@PZ(3W4pO6=6zbjnu{U3R?9-C;Mdad$YK{)#(%Cc8rf7>&EbHpar;VG~PpcleB@ zxjQUnY3>d=EX~~^gQdAUyu;Gc0Jv(0S4UfZ{pn8j5gg!4vF@3dTk@=7I1Nc@{?_!JYfHf zU#!@$V#A@YX!}hhR(vs)PTE8o2TxDONAF7L*+LC0K3rGI5%9OEv}h9?e6OBLzuyEe zK8=}5FK&Wq;j<~A7~X|W&`McTu1>_E(dJSUl!W5hT1n=0acHHLu1=<3d`%J} z-$e*+xxlkgb8i@6e@w>PR#3UQJLC>drZ2ySr?HKu(9YkGsCPqvyW#Hxxg%l=$TSh*Saei1BOr0pob5ROL z!7kF(iG><9cr=PFod_1-HyoMh(5)Qs!&rv>^abXb^mP+y;CHYlo;8vFy@fPR*5RxA znnu9UK;3slvpbaQ54z|zzWAFjQanqm*)Iabvb2vGj(4Q!iFCzxBtX|n1a=VOBl&`A zaM4I(xGww7ME{ZeLL{mjo*fC&fHwPdF6NQwyX0y&?8$(h|ke+Of$B% zC?7{3ZzXX$`#7i{f79!LkXP}n?&X7dqu41ByqRuDt2Uo>!511|NZ*ahnhrOs>Rw{_ z0}I30t$T@~f&&k5MqMYz-vfZb++>e_&0!5s4M{*)Nbz^*Sw|+5%z9A ziU@mnGvS4_#RZrnrW~iy{~^(>mVR$-{+Bj&_z3BP74h(c$I|i@<3@Bpk*OZ{#`v+5 zmEl1V?*NOIe()dCCK6HwH*#K7&QYhA+kD~IT#k-UFTdt%^G+|9e6`YNboYNqANXCq zXa6CkV)Qop-ya}5flP zvkBYj^BrV$X#ef-%HF;z`);9Xf0f<3U5Izd3;`&;^v!Mb$DJf8;`w%IaJ?9Dht$VO zjK>b@_Y>(C`25+I&#jN1!H?NZ>fC9P?@su!d*VUg`w8Y!?aq=fej@t`CMN76zC_H~ zMQ4_fdo!1os3Xg~h`L!>`Ym;d8h$hvZng=+vUAJImYsnAKaI*|QuRJTsI|jy(Za8C z3JHSn@avxi_~~jh0`?O!4!6YP@` zdc#cMS@>?!DC&egbKW{p*zA&_h^|&B;w~(^pdB-Ox(l>_S(&L%l$ri_H<=OW_=!IG z8-L2Tb)%9gd&pOQCA0PrBiVI?Jn<}Pa}GA=uJD_Uonq-bf00%t-~B~)C@F9ZrQ<6} z^Y)G6z2~aq-7`Gl#RnJb(_^VpY1|8Qt=&+8|K}mgPAn_iog?fQ6x9#6N>TJkC3!8l z==+V6p|w>TrwZl=H#bgW>2$$-=zALWHyAhh7#;FAnGC-z^uynzh05p8Js*ma>Q8zB zhyhRk*z-)3?*Fkza*=HCDM~l~pkY@@XV-;C&4;$qQCCS6joL$^V|NQ>=A47l#y_OW zj?&mOQlG=pFNdW=U8SI&((!Q;G8{4smD1urr0?Ti9&JjY@xflwwJyhRR!P4dIVv7U zb95vwR>h$ba-BR7-AjH|3DpA0NI>4+Ug49mjZ)9FDG|pJvC<9_JW1>@hbBuTPWf{7 zlrJNg5HCVMwi1nx?}t+&UPu+cZu{Zpw6TnmExK5r?Z=8tO>v9((weo?`sr@z>yftm>60bz2_^bxfs4HFo))epySBmAke@q>p9No365xv5Fts^14>i SDm!uYWZm8|w!2Ur^8W$r*){zD -- GitLab