From 8a04643047887934be90690e6a1254b403b17fc9 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Thu, 10 Nov 2022 15:53:13 -0600 Subject: [PATCH] got pcxtest.exe to compile and work --- 16/modex16/16render.c | 436 +++++++++++++++++++++++++++++++++++++ 16/modex16/16render.h | 46 ++++ 16/modex16/modex16.h | 3 + bcexmm.dsk | Bin 2009 -> 2009 bytes bcexmm.exe | Bin 167887 -> 168613 bytes bcexmm.prj | Bin 9832 -> 9832 bytes data/maryai.pcx | Bin 0 -> 86759 bytes makefile | 2 +- src/lib/16_tdef.h | 3 + src/lib/16_vl.c | 486 +++++++++++++++++++++++++++++++++++++++++- src/lib/16_vl.h | 15 +- src/pcxtest.c | 7 +- src/pcxtest2.c | 5 +- src/scroll.c | 2 +- 14 files changed, 994 insertions(+), 11 deletions(-) create mode 100755 16/modex16/16render.c create mode 100755 16/modex16/16render.h create mode 100755 data/maryai.pcx diff --git a/16/modex16/16render.c b/16/modex16/16render.c new file mode 100755 index 00000000..6d78f253 --- /dev/null +++ b/16/modex16/16render.c @@ -0,0 +1,436 @@ +/* Project 16 Source Code~ + * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover + * + * This file is part of Project 16. + * + * Project 16 is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Project 16 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see , or + * write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA. + * + */ +/* + * Render data code~ + */ + +#include "16/modex16/16render.h" + +//TODO! ADD CLIPPING!! +//memory management needs to be added +//void +//modexDrawBmpRegion (page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp) +void modexDrawPBufRegion (page_t *page, int x, int y, int rx, int ry, int rw, int rh, planar_buf_t *p, boolean sprite) +{ + word plane; + int i; + const int px=x+page[0].dx; + const int py=y+page[0].dy; + const int prw = rw/4; + int prh; + + //fine tuning + rx+=1; + ry+=1; + + //^^; + #define PEEE rx-prw + #define PE (p->pwidth) + if(rhheight) prh = (PE*(ry-4)); + else if(rh==p->height) prh = (PE*(ry)); + y=py; + x=px; + //printf("%d,%d p(%d,%d) r(%d,%d) rwh(%d,%d)\n", x, y, px, py, rx, ry, rw, rh); + for(plane=0; plane < 4; plane++) { + i=PEEE+prh; + modexSelectPlane(PLANE(plane-1)); + for(; y < py+rh; y++) { + _fmemcpy(page->data + (((page->width/4) * (y)) + ((x) / 4)), &(p->plane[plane][i]), prw); + i+=PE; + } + x=px; + y=py; + } +} + + +/*temp*/ +void +modexDrawPBuf(page_t *page, int x, int y, planar_buf_t *p, boolean sprite) +{ + modexDrawPBufRegion (page, x, x, 0, 0, p->width, p->height, p, sprite); + /* + sword plane; + int i; +// byte near *buff; + const int px=x+page[0].dx; + const int py=y+page[0].dy; + x=px; + y=py; +// buff = _nmalloc(p->pwidth+1); + // TODO Make this fast. It's SLOOOOOOW +// for(plane=0; plane < 4; plane++) { +// i=0; +// modexSelectPlane(PLANE(plane+x)); +// for(px = plane; px < p->width; px+=4) { +// offset=px; +// for(py=0; pyheight/2; py++) { +// //SELECT_ALL_PLANES(); +// if(!sprite || p->plane[offset]) +// page->data = &(p->plane[offset][i++]); +// offset+=p->width; +// offset++; +// } +// } +// } + for(plane=0; plane < 4; plane++) { + i=0; + modexSelectPlane(PLANE(plane-1)); + for(; y < py+p->height; y++) { + //for(px=0; px < p->width; px++) { + //printf("%02X ", (int) p->plane[plane][i++]); +// _fmemcpy(buff, &(p->plane[plane][i+=p->pwidth]), p->pwidth); +// printf("buff %u==%s\n", y, *buff); +// _fmemcpy(page->data + (((page->width/4) * (y+page[0].dy)) + ((x+page[0].dx) / 4)), buff, p->pwidth); + _fmemcpy(page->data + (((page->width/4) * y) + (x / 4)), &(p->plane[plane][i+=p->pwidth]), p->pwidth); + //} + } +//getch(); + x=px; + y=py; + } +// _nfree(buff);*/ +} + +void +oldDrawBmp(byte far* page, int x, int y, bitmap_t *bmp, byte sprite) +{ + byte plane; + word px, py; + word offset; + + /* TODO Make this fast. It's SLOOOOOOW */ + for(plane=0; plane < 4; plane++) { + modexSelectPlane(PLANE(plane+x)); + for(px = plane; px < bmp->width; px+=4) { + offset=px; + for(py=0; pyheight; py++) { + if(!sprite || bmp->data[offset]) + page[PAGE_OFFSET(x+px, y+py)] = bmp->data[offset]; + offset+=bmp->width; + } + } + } +} + +//* normal versions *// +void +modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp) { + /* draw the region (the entire freakin bitmap) */ + modexDrawBmpRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); +} + +void +modexDrawBmpRegion(page_t *page, int x, int y, + int rx, int ry, int rw, int rh, bitmap_t *bmp) { + word poffset = (word)page->data + y*(page->width/4) + x/4; + byte *data = bmp->data;//+bmp->offset; + word bmpOffset = (word) data + ry * bmp->width + rx; + word width = rw; + word height = rh; + byte plane = 1 << ((byte) x & 0x03); + word scanCount = width/4 + (width%4 ? 1 :0); + word nextPageRow = page->width/4 - scanCount; + word nextBmpRow = (word) bmp->width - width; + word rowCounter=0; + byte planeCounter = 4; + + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + + MOV DX, SC_INDEX ; point at the map mask register + MOV AL, SC_MAPMASK ; + OUT DX, AL ; + + PLANE_LOOP: + MOV DX, SC_DATA ; select the current plane + MOV AL, plane ; + OUT DX, AL ; + + ;-- begin plane painting + MOV AX, height ; start the row counter + MOV rowCounter, AX ; + MOV DI, poffset ; go to the first pixel + MOV SI, bmpOffset ; go to the bmp pixel + ROW_LOOP: + MOV CX, width ; count the columns + SCAN_LOOP: + MOVSB ; copy the pixel + SUB CX, 3 ; we skip the next 3 + ADD SI, 3 ; skip the bmp pixels + LOOP SCAN_LOOP ; finish the scan + + MOV AX, nextPageRow + ADD DI, AX ; go to the next row on screen + MOV AX, nextBmpRow + ADD SI, AX ; go to the next row on bmp + + DEC rowCounter + JNZ ROW_LOOP ; do all the rows + ;-- end plane painting + MOV AL, plane ; advance to the next plane + SHL AL, 1 ; + AND AL, 0x0f ; mask the plane properly + MOV plane, AL ; store the plane + + INC bmpOffset ; start bmp at the right spot + + DEC planeCounter + JNZ PLANE_LOOP ; do all 4 planes + } +} + +void +modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp) { + /* draw the whole sprite */ + modexDrawSpriteRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); +} + +void +modexDrawSpriteRegion(page_t *page, int x, int y, + int rx, int ry, int rw, int rh, bitmap_t *bmp) { + word poffset = (word)page->data + y*(page->width/4) + x/4; + byte *data = bmp->data;//+bmp->offset; + word bmpOffset = (word) data + ry * bmp->width + rx; + word width = rw; + word height = rh; + byte plane = 1 << ((byte) x & 0x03); + word scanCount = width/4 + (width%4 ? 1 :0); + word nextPageRow = page->width/4 - scanCount; + word nextBmpRow = (word) bmp->width - width; + word rowCounter=0; + byte planeCounter = 4; + + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + + MOV DX, SC_INDEX ; point at the map mask register + MOV AL, SC_MAPMASK ; + OUT DX, AL ; + + PLANE_LOOP: + MOV DX, SC_DATA ; select the current plane + MOV AL, plane ; + OUT DX, AL ; + + ;-- begin plane painting + MOV AX, height ; start the row counter + MOV rowCounter, AX ; + MOV DI, poffset ; go to the first pixel + MOV SI, bmpOffset ; go to the bmp pixel + ROW_LOOP: + MOV CX, width ; count the columns + SCAN_LOOP: + LODSB + DEC SI + CMP AL, 0 + JNE DRAW_PIXEL ; draw non-zero pixels + + INC DI ; skip the transparent pixel + ADD SI, 1 + JMP NEXT_PIXEL + DRAW_PIXEL: + MOVSB ; copy the pixel + NEXT_PIXEL: + SUB CX, 3 ; we skip the next 3 + ADD SI, 3 ; skip the bmp pixels + LOOP SCAN_LOOP ; finish the scan + + MOV AX, nextPageRow + ADD DI, AX ; go to the next row on screen + MOV AX, nextBmpRow + ADD SI, AX ; go to the next row on bmp + + DEC rowCounter + JNZ ROW_LOOP ; do all the rows + ;-- end plane painting + + MOV AL, plane ; advance to the next plane + SHL AL, 1 ; + AND AL, 0x0f ; mask the plane properly + MOV plane, AL ; store the plane + + INC bmpOffset ; start bmp at the right spot + + DEC planeCounter + JNZ PLANE_LOOP ; do all 4 planes + } +} + +//* planar buffer versions *// +void +modexDrawBmpPBuf(page_t *page, int x, int y, planar_buf_t *bmp) { + /* draw the region (the entire freakin bitmap) */ + modexDrawBmpPBufRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); +} + +void +modexDrawBmpPBufRegion(page_t *page, int x, int y, + int rx, int ry, int rw, int rh, planar_buf_t *bmp) { + word poffset = (word) page->data + y*(page->width/4) + x/4; + byte *data = (byte *)bmp->plane[0]; + word bmpOffset = (word) data + ry * bmp->width + rx; + word width = rw; + word height = rh; + byte plane = 1 << ((byte) x & 0x03); + word scanCount = width/4 + (width%4 ? 1 :0); + word nextPageRow = page->width/4 - scanCount; + word nextBmpRow = (word) bmp->width - width; + word rowCounter=0; + byte planeCounter = 4; + + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + + MOV DX, SC_INDEX ; point at the map mask register + MOV AL, SC_MAPMASK ; + OUT DX, AL ; + + PLANE_LOOP: + MOV DX, SC_DATA ; select the current plane + MOV AL, plane ; + OUT DX, AL ; + + ;-- begin plane painting + MOV AX, height ; start the row counter + MOV rowCounter, AX ; + MOV DI, poffset ; go to the first pixel + MOV SI, bmpOffset ; go to the bmp pixel + ROW_LOOP: + MOV CX, width ; count the columns + SCAN_LOOP: + + + + + + + + + + MOVSB ; copy the pixel + + SUB CX, 3 ; we skip the next 3 + ADD SI, 3 ; skip the bmp pixels + LOOP SCAN_LOOP ; finish the scan + + MOV AX, nextPageRow + ADD DI, AX ; go to the next row on screen + MOV AX, nextBmpRow + ADD SI, AX ; go to the next row on bmp + + DEC rowCounter + JNZ ROW_LOOP ; do all the rows + ;-- end plane painting + + MOV AL, plane ; advance to the next plane + SHL AL, 1 ; + AND AL, 0x0f ; mask the plane properly + MOV plane, AL ; store the plane + + INC bmpOffset ; start bmp at the right spot + + DEC planeCounter + JNZ PLANE_LOOP ; do all 4 planes + } +} + +void +modexDrawSpritePBuf(page_t *page, int x, int y, planar_buf_t *bmp) { + /* draw the whole sprite */ + modexDrawSpritePBufRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); +} + +void +modexDrawSpritePBufRegion(page_t *page, int x, int y, + int rx, int ry, int rw, int rh, planar_buf_t *bmp) { + word poffset = (word)page->data + y*(page->width/4) + x/4; + byte *data = (byte *)bmp->plane[0]; + word bmpOffset = (word) data + ry * bmp->width + rx; + word width = rw; + word height = rh; + byte plane = 1 << ((byte) x & 0x03); + word scanCount = width/4 + (width%4 ? 1 :0); + word nextPageRow = page->width/4 - scanCount; + word nextBmpRow = (word) bmp->width - width; + word rowCounter=0; + byte planeCounter = 4; + + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + + MOV DX, SC_INDEX ; point at the map mask register + MOV AL, SC_MAPMASK ; + OUT DX, AL ; + + PLANE_LOOP: + MOV DX, SC_DATA ; select the current plane + MOV AL, plane ; + OUT DX, AL ; + + ;-- begin plane painting + MOV AX, height ; start the row counter + MOV rowCounter, AX ; + MOV DI, poffset ; go to the first pixel + MOV SI, bmpOffset ; go to the bmp pixel + ROW_LOOP: + MOV CX, width ; count the columns + SCAN_LOOP: + LODSB + DEC SI + CMP AL, 0 + JNE DRAW_PIXEL ; draw non-zero pixels + + INC DI ; skip the transparent pixel + ADD SI, 1 + JMP NEXT_PIXEL + DRAW_PIXEL: + MOVSB ; copy the pixel + NEXT_PIXEL: + SUB CX, 3 ; we skip the next 3 + ADD SI, 3 ; skip the bmp pixels + LOOP SCAN_LOOP ; finish the scan + + MOV AX, nextPageRow + ADD DI, AX ; go to the next row on screen + MOV AX, nextBmpRow + ADD SI, AX ; go to the next row on bmp + + DEC rowCounter + JNZ ROW_LOOP ; do all the rows + ;-- end plane painting + + MOV AL, plane ; advance to the next plane + SHL AL, 1 ; + AND AL, 0x0f ; mask the plane properly + MOV plane, AL ; store the plane + + INC bmpOffset ; start bmp at the right spot + + DEC planeCounter + JNZ PLANE_LOOP ; do all 4 planes + } +} diff --git a/16/modex16/16render.h b/16/modex16/16render.h new file mode 100755 index 00000000..269caf8f --- /dev/null +++ b/16/modex16/16render.h @@ -0,0 +1,46 @@ +/* Project 16 Source Code~ + * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover + * + * This file is part of Project 16. + * + * Project 16 is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Project 16 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see , or + * write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#ifndef __RENDER_H__ +#define __RENDER_H__ + +//#include "16/src/lib/omodex16.h" +//#include "16/modex16/modex16.h" +#include "src/lib/16_vl.h" + +#ifndef SC_MAPMASK +#define SC_MAPMASK 2 +#endif + +void modexDrawPBufRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, planar_buf_t *p, boolean sprite); +void modexDrawPBuf(page_t *page, int x, int y, planar_buf_t *p, boolean sprite); /*temp*/ +void oldDrawBmp(byte far* page, int x, int y, bitmap_t *bmp, byte sprite); +void modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp); +void modexDrawBmpRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp); +void modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp); +void modexDrawSpriteRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp); +void modexDrawBmpPBuf(page_t *page, int x, int y, planar_buf_t *bmp); /*pbuf version*/ +void modexDrawBmpPBufRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, planar_buf_t *bmp); +void modexDrawSpritePBuf(page_t *page, int x, int y, planar_buf_t *bmp); +void modexDrawSpritePBufRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, planar_buf_t *bmp); + +#endif diff --git a/16/modex16/modex16.h b/16/modex16/modex16.h index 5ce666df..ff4913f6 100755 --- a/16/modex16/modex16.h +++ b/16/modex16/modex16.h @@ -12,6 +12,8 @@ #define PLANE(x) (1<< (x&3)) #define SELECT_ALL_PLANES() outpw(0x03c4, 0xff02) +#ifndef PAGET +#define PAGET typedef struct { byte far* data; /* the data for the page */ word dx; /* col we are viewing on the virtual screen */ @@ -19,6 +21,7 @@ typedef struct { word width; /* virtual width of the page */ word height; /* virtual height of the page */ } page_t; +#endif /* -============================ Functions =============================- */ /* mode switching, page, and plane functions */ diff --git a/bcexmm.dsk b/bcexmm.dsk index 51df3d27b7fc937fbe40fe3fb36acdefdaa8f556..7d4ebdbeab45e02ed053960ba932845aac708308 100755 GIT binary patch delta 21 dcmcb~f0KX1PIjiEtjU2)5^V0=|Nk>E003GK2Xg=b delta 21 dcmcb~f0KX1PIjhg`zHr7NwB$b|Nqax003Xv2kQU; diff --git a/bcexmm.exe b/bcexmm.exe index d2eb4e5a61f1569f2d6b9f82c860450566e5366a..6be78ddc7bbca95e3a149df086c02c4d6621a99c 100755 GIT binary patch delta 50934 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 T_KsmiipM7o+LAt*JzeGhEV?T2 delta 50360 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 diff --git a/bcexmm.prj b/bcexmm.prj index 0d244058a87900e15d22937ac537a77ed1b8674d..30f77aff253e670f30965ce7bef2a64c21f5f10b 100755 GIT binary patch literal 9832 zcmeI2Yj7LY6@brLvL#y&J5R^2WRnO`Vj@41m^?@tc_llV>NV1uI6>6Gj$>ltD0Q4* zpcs?#8s3nZPTOHh2=p1CgwoEGmUjB1r9enKO&XGP2KZl?mQq?;Xt(E_D~Xk4NtW$Q zOb7k=_T01Q-gEESbMM}}wt8^5H!dr3csM@T-!~$6?AhBd*Mel5TP@+m)Cv*vt55#E!!jVuQtjZ1r z3xQ~-lX};R!iq!jJ-g(Uu0FXaFBjkVbxj&mc_ZgOaG-yvcW?i2E~lzH8pw5TD*C2C zx7@VDCpU#;$4s|9mHte%&PfeK1jju6y$1&daz_wGc1_jE#PuBBZg0>X@J@X9v!i_@ z6+%2r?8b9M&Lo79{b(_RBl~{|;VDgujP)Og9~|!MmzDU?{@hWFC^Hy8Y|1gy4bE)$ zCf(Zaa4qx=?T-(S$o@UO!`Bb*xqe@c%DzB&Mt9YYnQkygzc04>_Zq#UKmScD0&AhF z6u(J8HEwd^)d26{(fco`NgnB1+IqqPmjcP_RGl^AsbmG1vAUCeohSqFVd(}umM47$ zx4VO}FZxu~8$^%dNSUsiocDP!7v`|(N?3&BYO?`!qo3<^zHmHS74+hbs}ud|papJ2YL z={fJC48-yAwV3wxwiQs08IKLadT2mjb1?sI!P2+VW9Vt`L}zV1;;L_;2-$>VD#fpc z02@I@U-cNfX7p2MNQ39*9rfJ#+C6!ySjU^TD+0WU3Wj|)W!@kqL+1_CP*mlA8lIAb1!KNt$*T{X1bZ zygxkHWrg2fYwa|_t4K4m9BN0O>!@Ja!n_L%xllS`9Y;chP2{pj2Qf4BQPIyEF=Hm58pX~J{rL1xDSvEoMMBIf z5zEX-BwkNWXyZT#)7cXUF<^Zfh;-FI-0Waw2jWUzj#lwX#KqU47^{|Emp?~t1 zc7f0|TD7y+*31DUHd3_cxAG7~jAqY3L~iAJqWYC9d%4e^-g^7YP$c%MPH5slG|#dp znw`%2d0lL3i*y#@NChHwK-db|It4V^4!B%de}{{?{r-^R!b+5L6Bz`O7PMh&pX+o8OobqM=Ad&M{wW*JleB*jE4!HG+4~}~7>YfQ*#C&Vkl4v+8ttRf9HbvO z({9lLF6>rSj4;hp1H1pMzktOHDtpbYAQjH#gP8sz~prjXehUqpX z+(idSx@O)(wdxCaBNOQHg_qF~8smbIrBuD$^qexg$GfO(HNHNwmH2%iL#fXVyhS@= z-OyE!wjULf-UdQJ(S=-N zjH(`7g7UfO33mCpleDZ%v;g-6JAD4Uy+kMZd(newmiKw%e?m|nGbSc)FtXM7ac@GU zg5O8p!#6PgyAl8HhDYHs{CaUG+?CKAfhXW7yaRuRci{}Y1#iQXa2%e2XW^&t68sE) z4Znd`@E@yAC+tN#`(PAqhMlk%hLAWt_=qR|IR#7Dos^7oy|*upJwQFJAgKaR;#3Le eZc64srb@Uj2$|ley?r_}B_St1HVP~Hn*2XinP#5= literal 9832 zcmeI2Yj6|S6@brLe#q9tFTh|7Y(Pl_1o;6d1_z3~l8q*MjdlS;m73TX;|3$g*o1`E zacExCG*4zSX(!VV`Yw4uns%mX(@uZ1X%dol3Qd5{B)3Lud;lG`5J3pXa3ki-@eHF3G=5&34X(tXPM`aCU^t61>R)MdFBNqm@X3G&sfLw z7X-Xd_$xyCfTX`cF~B&$->L8q!aoWBqFVB)Vr0>uxP>oUnr6AY4hf z3M)g^)hMkd32rJv@zV(D2Eu0uJ%nDu9zq{sFQK2X4*`RO1B5u~ZYJpA z4wG~%;Wok%!sih10O9jg93$LL7$@98I7;{e0`4T~F2dbZyoYcv6~9Qhk8nTXA;QCi zM+nCV#Z`zBLMfq)U?!}Qya29tC5!=>$;Ty)gR(KUE7l&420S6J67z?Yz&5Y1O^qtC zfWJNF4Xb#WiI04B8#DTV4%@I-9q2o@!=owTU~Fr?R%Z5n6Q<|d7Jz1{1X|W(TP-Lw zH#GsQm2RI|(=)HVPFf19ayGL*uZ26W#kF}YTJu_L$ZN4NuSHv4i|g`QY|3k~Ij_a1 z@>*=c#J$`f&*e`~uVjXGO&i=43Lna?%^Pqg0d!pct|>T+T}mVZo&2cKb)3&oiqD?; z18%hfertxY&ZsX!z0LFKAMP8JCptc0{7#U__H0 z3KoKDr;~cug2Ku}@qs<^Dp#*uke5qu{HiXEX}pp196Z=J*t5THIGa<=qXx5mHywRr zuuE>-<(C`7vSYT}o=$(JTjz`pB7$SyzMj$k{_GKikv-FOGI>3Ruge$m1bvf#`^nM1 zmI@&rCidbvB5M-D$Pil0;>iA2LioBaMaTLM#z%*H`(!0PIFvn#QDqk6hfO(VyTRG* z-jrMW6|RN;!J+u@h#VN`8NP9N;Kl=4D*J07TX1l>G{l3)dU+eUY{{Lr25m*mZ zCHPJP?6}E^*8#kPNAEwPCV8Z5c6UdDE(Ma;={j4Dr;?Rm#_CR}L|>;%0sL6nhsW}y zuh33UD0aPH(|jTHD2|j9byM?R3pG&9rmNVO+Xm2uer_=M!trcX(2GyiVoCo=-PF7Y zs|7G0=CSC4Dje5WFn*_E__hE~?$oZYD;U(!3A&;S`!eVXaRtla3Xq`;>ol{kbCm!` z(9eVAAIA{Kpm;LJ#kxYAErX@7ge$CtY8+QPx;=*XY;R&*blj(S`8-}4+JqPi-PFA` zz+$Lp^Yu`JzFuhnxPW7FV7eIYO_1_18N-Bs)=k|Lz#>=(b-1kuxE5;B*Lh5ok1*f0 zi8=4548-yAwUG9WwiQs08IKLa2AGGwsxkj=!_rqL#?af|iO$^J;%aQ50J#juRDy2} z0owS$(txpRLO+X56Jn@&`~h^H`qYv_gPcmb7WXzGTd$}QN&vWoZY=j}hUpRnIy-)-M)Ut<5zcG32N?aQ{q zwp}*2tx0%oYsk9My25IJwUPM97oeyr$Aru*@Q;88dv>H1Oh?}W`T zbp1Nj3cpmXon`Pc(#$M}`k`k!Dp+BnSIVG*IbbfK6@5X3D@hJu1=44O{EHH0EHW1X;(BPrr3 z;y-r+V$1|%o@C1kkq?=nFxsbQMRK8ZLM!Ky2%E@dkq%;J7^7mGH)6(2Jv9oQADLO7 zIZHBQGg%~PI*3^%>~+c#LsBFjPfl>d?=fA3>D&o~NCx9jMIekfH#1n7fw+d3qcyx7 z>6{HZ4c8Ee#6F+_*74jh-ucVBK!>dQK-cQncu|@DN0d=FUJwZe_cp#+55` zxt}<_DXES2>7hvMRh`fXkK$c!;yFHd0+E@{#x<|d)Yf@Qi*Tf7cj|z!6?6&#C3;Gy zfKJ;1mn-9UxR@sp2rDkEL^(H^K`?1S8@AP)XQK0SC%hBqIvoPj^MlWA_)|8XC-*-4 zSV*kwVwPv_i^O6m_B>+$BlbdKC!_1MkJ71`HCXU}H z{Q>OYQDm;Ux-LTWadM~MhwTAMwX`Ra>Lq2`HjWbY zv9yLzi3>)CQuB4uebQ;Cn!L4W%DX63)5g=F#>WRL(|V10hDzG-CM}J*k!i1aeI1iD z!`;X>W4(SJWw!ac-4od6Q>oEx7WgBO;#1iqn-5PJK5GNvkmy3TF{+vumw{X^ zx2JLmmD=&R(LE+`Z_=G|PFv@t+XX$MkHbw=$V(e7QHNQo;8l@8J^| z|8B&eyWwGY1m9lV33nwl$KVM#4)4Gp;9WQeZ^7H}B%Fk&;A!|FyZ}FfpTjTUCH!O6 z*@V4l=KvgrTVXfshe0IHNIv3;Kc`>`yOWY}bKBD!#~z@bR*+PICvmETb2laPE-F>R YbwSAV?Cj|^m?;T4@v>1^(c9$z09(5%C0XRrFpx^(ql{YZXD*+}G=Q z)|#Q`oPUn8zU%jAeLnB^^Sqzu^I1RUsw@BQf4PGHX8hepSIp-B|LOn!?(V<)yZ`Bv zE<2&RaK)ty?_M}|wmMUtu8!UPUnWePP$qUJTvJc@`h;sHT+^9wQ<-qn9e2-~_{i_- zPIY?ZVs)XqSUl_eg@b3S3pEpkuqA%$ORQe%T)1@h)w72#ROjlm^||Vu-&^R>37v@( z4o;jkv7RvT+t=J=!DZqdk32MS)*at|=~p|kH^ICOUOTsgCq=1n|C zJ4Yw}uXmSORA|E853z9ftO@n+W=*{AjxzDvY%brP`0ZIg`F(Y)x@aw|O?9Er%If0C z1*=lC9^057ZkDZfPG0rDUg$IxvJ4UO`0DHx9WZ*=R-EJTbKoROEVa|?ESIw*(XQ%D zIaghJM6dv`o^V~@I5Kg<#91}1BChl z7s}tb?xm>NrBPbIg)UZ?64(-J)RoF`siqoK@f={X-Z}STuq@b#D94;{7;n&~DVORC zXQ=R-P;TXGO0xk6&tX~b&H{4&ADQ@PP@izqbrWY@GvSG+K>dk_?w&}cAE|}<9We$m z%jWv9uQjD59A*K6&yAkFbZ(Sd6=)te1rD=zG!}G0nl_$;C0l^8HdE8Ke~GzA+D6Wz zmelm(L2RS?;O>zL-v#N3fj9Fb_`%n2`ua`f>l1GJhl$ukeN&nB?Q-`+-+iQhw)zVO zQ_mWCNW`&{D-Mcxb)JIH{(k}U=UiYUtko*pny`Z_XwD@sEa1#9$+6RytiQx|ww-|x zp*y7COdOr?ZzlZ1gnzIqH{Volo^*4WRNq`~`u0r|Z^Dc2p-vNTnmFr`C(7?1dIFp7 zJoMA@P*h5$%6V(0*&c~zV_U#7dhrlf{DLbswE$9J)ndYQ(wnG1^|^HJzfdD<1!OsW zaQ6{mqHh1Do?x{m-8?dBN|`ieQfJCtOUli-^Q`jin=#0nzFlzghakJ2Rha$mrw{$4 zdRKn+3GGkUh?!P-0nfTP5|&UPf8=brIC{2o@zS}Ga~&b%&?{)m+0ist>h^XZ^~j48 z@Q<6me)BgvH&6QeGU?`;x=g95PPyxzpZxYG<^THK|M8P$_sqHn7bz3V-A_FMOr0kl z`W-H&$ze3Q>m|&L3WT%pI|3%77=CMZVS4T1qZclndm{lk9pGHT4v#(bg24PkfC5*4 zUm)w|fJSsir`%PhPARkh_t^_pmj_q>_Q7TPEcJOFfPVVa6F)6aJy9Oo8j{hNOLgA5 zF=1I@MJ$g}*GuPcFOieE)E8Yo+yA#(qbEC2Ut#cSb0)2s|Tm%KJ z@M4`|>+pnsC==?NBp&K9!ZKyjp(%HD(VDJBh1PV{i&mCJD;KR@RMu`=``~wOn)Oh5 zc7*oWqTg3%G{8^}bqD7Rb%A<;KVL4s=B2VtZQIa`nkpT#g%BVK(drcSORWo0E-V~r z&V?>4+>+u~mydFzDIk^eDy}DTxE_pQ^)wk4m5WO>{9P>U)|+nq#?7~OZoUdDuP2R6 zsqcceu2I^%a#2~?wYF<*O^X+lwGVE4@aCIlJyD*0;t*}!YD=M`AOO;s4C-?=^t`}C zTccj>@8#{beoWL8@!%I}a}B)Q4%0_zZn<#Sji+N*z!gCN-XoTsIU!&a#8IAfvBR7r zvZym*IC2ZmMMw-f=WvA6G#n!)NjWs(rrU3-Z~aDn^C%53cg?=5(Dp?uJBvn=(?1#~8BG?4deGnPkfe zc4+d8HrjJUgVJoWijWMBOXmxqiy;R9mK2=Ec>$8wOepkJ9b3jZu0C7N#1+o~z(D}G z=GJfAN(3+vASl?tU9+cjP3@XpFRE8|cL1P!ZTHB^UjARZaz(xN!Ft=Q#j`rk9zE&~Wqo&r3`dBmgu8E)GNazPTLajm69YSKWfl8?v zTk_N}`^(};eFiX^!UGDH^Gv;+Gg?SxpOBCy*E#b90()JVaK|;bcW%`S%A~s{)l=?5 zRu|Q?7j>=du2pWFJj396t zK#V+?kIm6}m{=Dm?SU#7fP%j`HY}r3#o5-;QfNqkm!cM?md$Opjx`7}evLz~y`sX0HR7J383V?YGXjdB(l?9Jtg5*|kV6 z=Ci!FU_ToMKxRYl=)mB>hC>6}z-OR$+dy^jpSLY}2w=3M0Oo&FhuUDP1w{+AqG-Qu zuR?lQk1C}@NHt>HT8GJvjv|u$Y9f{e4y@6DnuQUp ziDF!n@T(?qoimCtSJAQPC*1La&h59|e(P;BZktgi-K(XP*_}me=l6tL^=;^VY-C_V zJ@ELz;LgFFBLjnFpbXXngB?)XR@MK!?I(ir>{Io#H8D!xIu_||V=$@(rcWXYD4IK5l&f4kSNJGPkDk#X~wEhG|p`F3|Lv>D1P-FkGg#F z8uY1yF0W(A1~Lh>>|8TK0$JzG{ny;_t=oTa`wwQ+x6ios<{3BNwnPImc6arVm(?qm zcQy?44fGuXpn;tOJNZ34=rV9Uwyo6L9(?H8@|Wkeo`(SHcX$;{o5+L~(QObOD#HbV z3W<)2#j=%SYMbhu3Py8d9)bGurnSpJkj-edDiT`~C7}ZtZ6)jlh@=C@3E6hri?JS8 zN;|R^=C49VxgE=lb%s)OGDPT+>+ZO{{Gi-Ega2=vaqEo5w=KDM%3P8=LfhI!Yfln4!p z2?h{2jf8aC?$)~^IZeVNj+4W)*Z!%d#Ip6roG9;-y(ByhGt*1P496w5wYXb4TLPKb z6S&j{!o(!&h8%~n!XVt@YX|YQHT50X&JSjk+i&|pJ>#~U7f-55{CZ~hELuyBgAQ-N zv-%O8!J&Ha@tuG&xN~R_D`LL4>>S)XSoRL?ErU1sl@2PpQJ%`o_b=$Jm3n) zVgem4%9=M8R9!earX#^NZD9YHbGT%?Y@bfYvH>P-hZeA&<%T}fdt<#lUQ8Pc$}IFXa>wl*kQ$wF+u})q)6zvfi+Z}( zmfq60p|2l3@7KPDiY7L+b1(nb{9tK&n2%^~&+L72Z#}53{Y$AaHikF<@@!GSe)?1` zVllL7QV`~#Q)+S{V$tSY4|zk>a(m)qE61HJ@C3;;1JPE6HNohy6wQI7#e^x)i+~G) z92+90c(KppMJvo1Cxj)>%3sZtwJbm98m9u8oHyp^8R5X=W}ExZ{PD+V+Ye^kj}6|B z!gXdWUUKhUOYz|zGIN}`49#&fur&Ghvul}=?R!5BiK<{)YoP)r75~(wbR>T+nC=qP4rAl)M(Pph84K%^j6fM^+3GkSaS`YR%%AyGfDd(B@culVtfi|vA4K&j89pJp1 zfO@|^ecSzrV%jRA=wJsu9&)k%fr1zgb;3M{_U_pUiaYll+Pi0Ob%cL4)4{#fiM{0+ zfF;P1z&=qLI~^5NB1fdIDTa*nP@#58D6vdO1KipQeOf?NeOwytz9Zxu6GwN(WIupV z>NBWl=L#jAN^QCYj4L#DD14zCX8cg*a*!uz(f~26Hy)EUi(ilS+Rz5rw!%a&vXkoF zKmK@)*~$I4-ydFI7TW)fN_O*XM}_`J178z0ul7UsHj zG%uE;xj>NVdNzor0i;P6Py`6!?wuT!5dbF6xm1TMd!@Wuv3v;PoYU<0Z0nKM$2LmT z`WjggysW3?G3g0F8L{S_Kd$+?b{UR-aK_?EOTx#~#mVtX|Ii>f?kT%Q0Ixby0I@n= z9TCTb@X0XFC#%<5D}C~ry(4w`?X%^B=k2*aMYhbm>VR3uCy3gKOH`dJt=3*#nbY-l zAM3V{DcZ?;TYI+B+6YvEnoB0wnuuq*H|8#fe{(K)s4uRwPjuqkv(3$i%o)Z;zRZuj za{DXpUf&){NOW_3uWX5VtV~9xC_fB^bL`pr%pZUL$o;qfpxi&>{)4#vy~yZXRn$bN zueU^R0|hO+cJA4Ud4jS3MzBs`b`@kb*uvD&c9DQWw0fpfZ~IC4p#0^j8g&0FIP(*B zo8kOo3|`n~kxfL-mh<-K!3rE~ll5d@gpwvx47&{mJkvF&XeCQg4rQKC>kn?|!O@GQ zIEf7)g`?4zmcUE)R+BjA9BZM>qkaq2LXpqZwqx&*aA`K$8d)>u3C;ug=i z_pT+g2}z_yXeeEhLVzFIxeF*kv2&!xNcX$|bR$fxSFd5I)d_Y2W4)K;h}iVI8Wnx2 z1At6fwe0_Ek!hV_ufem!sfkHqr{_`a_)V0f$*yx>NaWLgFTCJ+Az~5X9GB6iIG4tn zn>(--ATq$q7A>0L=sa7?jGW#x05AuBjcU||qhT>3Ti7;3#$JnMm7pn~W9&W9cRBXQ zvWAWeq5b|tGj1zO?p->!Xpq`tJwOz%!EaRWZo$+3G{kno7T*v{rW0raP(Hc0)Xx}^ zey>T6&`%C)#IhjT0qaaQsZ+EqT6(c#h-&mz!UIFGrPU3dvf+AIscmVzjdhYhakJg} zsz`{p8sO2C8z_chx}-r;sy0t>f?0xPqttnJcsOUKM#daJNSn{H!w=lgwcG7^wPZ1e z_TZKCD7*TUI^h2pt?obLelY*XGNZF(5;j}bGU7{yI?y*rV(K)yr+O(|A3H?=syBf9 z4c*?!wc-{GIA)zAsks_6f zMYA&7_AGJ$sbYU?tRbIqT!PV%z!uNWDX)=6m@W_JfT{6Nn>@#fr73sr_`y_;{cE-Ik7T;Tz z^vvy|%Z?8qB7;LDw7Zbxkv&BbNfsnW27(26sd0xAQ#sOk12Tf9mtf~LU8kIQ2Ir_r z)PDQB>fQQ-`Y$HHMOMx^QbeuN^aHKNWm9GdlNt~$jaD{C=CTeGPCvFUaB*umdkn>~ zuXUQsj%7diP-$ZszYTggN0SAzCrmu%UNhVYPS_v$poofalol2eSz;?g z+EinCrw^gszgqM2$TIHh06eIpJ7wwWr7L@M0x)M#r0lKt?5yzuU{C9>UP5{__pxbg z9k^itu-#X`HX5EXYEp+D;S8A|SDjI{{fVj*cdjF=Gy4eBvWiXtC6q{lhQ*z(fQk&M zF~Ko)HALC0Q1UoRfN_(6war}e24HFe%HG`nrYu97`UBLNu|;War4|}*Ow@xdacxOg zRdgl+Pdam+ZV5FW$z&uzZ=zOlw1$r4+;{&B|J_>_FCqCTOMAL{de?S(W0aEwc_%6I z)1ZFjY5!^10d`W*0pLRca(T_|82lSG_Fa8~!Gm^P(`VjB0FCb5vvlh|0An1EEHC?Y zVigiZ3)n{9fO)eVJ-u)NkEH$7JIpM(p{*eoX=EHP6Am>P#Uh@tKITH~Pr30pB`cX@ zw2Rtc+H7@z-B=JYz*rF7UQo+yh_iG!@wMFG7~D1P)815LZpl%rV1}!h;c+E-@sAVLGL8Ts3r3XhP8r6Ck#p57W0ml%|`O<8-6$>nI1$cbvS zEiq=Dtyzw!rjH~BVic1la~_z$TL?w+71%K3qohR0iTp^LrzU}V6LZu4gV8u2D<-pw znrI1(+(*#hdUDeAl321uUYq_Gx5UY2ezoSuGk$R2{RJDZfxRrLLA_w&-tZ}d!+Q&z zl|4@@E7cqPD=)nOq!{yS1z1t@*EI6#6HNQVPN+%s;gi*e!H5!bJXm;*F{03OV{D|| z1!IrrTf)|(PVFGjxe_-4=nH^Vv_mwQJl)_arUt}H2@v4^1lv=~n9L;*LYQA%3>(3v# zZ*kGO{keB>xp(QkAYI2W+u#mH*c_p#j(7GvT?mz6tza;Hh>?F7It{3xEYhE_-mKva zxz{aW{-NqfjhRkFRT50%=zqlOw;Duw>W2GvJ{89!G&!D27&VPZKr*G3_jtr1f^CtB$?+YO3oZKge9*C;FJTM{Tmio!AM^C_QH6pyqVREK*~V%e0`#0vIW zR_qzCiRb7yQEJYkluW*0Gisq4gliP4zF& zmxq4(5dHgXxp$cpeJwORnI3@rMD1-!-0!g^oYB}BiXJG2l9V<9HCjaMpzPqQK};@k zJ^4z6BO0{K)Ux9-F{%43H{*8lB9ih%gl~*Zt+zNI zV-4j>A8Pl$5zM_o0I|1lf_?%SC>}$v?BKK9+%`bx6LVS1tZ6U=6WUkHP!mm5E|6+s zULch%^jB?ZVnz%o8UquR%!RV&89u|YVy!-%Ee>PLG{4@aWGQ&5Q{Syq#uB%~L#D-n ze(IF_xh{U2++^&EW7%&00H@T?t3}+4JHYS!e9f)*tr@+qj{K*rUb`99>cd$WVNJ~< z^D#W&D^HGS`JhPv2!tE83g6H_@QsKSEPog}*6xur_H%rzXGi4l;A?cys!WusgVhH( zOGIrf)CZKuM!$&GS{}#{xkWdWESQNsZ1L!1gk@XVL`iXLZ8^u%WG%BPe?1nAM2$5{ zU_H^#affq}p`LZL!A?L}ar>(l>W}b*H@d_gmDV*&b(u0#OD#QX1M6HRz3kW{qd37D zv?^lr+TNbhN5mK=XC<6OQ!d?S(xIhE{<;y|97%j@! z2>DZ?PcZ01GS#uC9wKuhfT&f}Qp-piOCQmzUf$f8jXpQkAP&^l-Igx47-e@&v z7$?O-%;ITcZ9b!g*Uo?JJh?+!MTmwsH-6Im&tW7fEHLQnr?-7=z zFKPW}BI~2vKN6+On)<#qL6+MEnai#ceGM&i__<)SQDT|C7~Q)rpP+aaE_FGHs_OC`%@;*m_gBZ%w`U$BWl2yI1L1OSho6 zZ(H9E2OIW~s~Rg~YQpeAGzQqeXdp&!a03Z=za^jrznx3O<;#uxm`0rr zgH=b-(XN@0p1|MVd;q3NT$2^rgTN*i(HWAJ3=4Wvwlla0gi>f4+ok2Ki)WzZnX;uo zWu5Uk|0vtxke0*NkFY7dP;1&cV~y}H zyLTB*P*yJ`0ovTVwy*GnN4+;j;{$w0J)1tlIG9oZ@C-lX{C(CwuB738w!R;J5qc!} z;{?&0?fsj{xE+d>t?r5FZk?VqF1hp21&3ato= zY)s${`mBX7gyo3`#|FaDO<*hCVU>_{I1(QR_L&%j9?kSuG^tl;N0h`>RkF5h>wS@c z6AZ<*&UCW=1e*J1Av25DVBrj67Lv@hn;pp?*ii;Y;>HnUXsmU* z!>lp*SO(XR8`BSrg8{MqqSgKu=g5FQ0c(P)AUoVfZu1cjN~G)uoGeF!n`mm4opP&7 zgoP%$3ZkME&GM)W70vOv6|;+T!hKlM@KdHU0#ZgE0esDtfUF4x#$RYL`U0;vqS+f$ z_6~wZ$$biPo9G;*NU@J~U`XJh6cjv;-zLQG@9fi+wJ^*K^Q4a^vm zKZ@J05d|cON!1T3>eLva4-(jWdE#j!iQCY`aSoXUMWOq^Jf4*6Q~F5ic&fBlNMQ6A zO2Py3ITnt_0~`)*AEod}>yrv4@YaUkAakr-wvE$~u|uzLild_xONx#FYu@B(JWExg z7H8JXf|$i?eza`KvYsU{v%05uGozt9hT(>o5V};KLX(KTrlkU^*YFD=cnDiQgB0?m z@>%@_w7BK1_&db)*w9B1ob^`Jldo8XCQbMrsHOu*MpL zO)SerI)%n9&bcO+wq86!fdiLdSnWg2;|P|)NB%@A&QbrH#}C+=F3J`d(rMyRLbf&z zHx>tQI7(?bi>?Bt$xu3AT7*{{=ZHOV#dI2Zv!=Sux$4+`%g`}~nGmyk(X!QraNXOt zgS*|_Q8^xWSdL)Z_SHa)r4$(u``4=>e>LcLe%4K5`bYIJf079c}hBV}nu_R4Q02i=CXd&3U&m>qfY<8nt zfTaEeq|vXE5&>dM(9;AIN1iCNp(maJ2_0ig+Y4yTU&m#uufb4`ro-KYP)V<4U{OI$ zzerlC4dbz~*Lmm|N1ZNfW-WeXF)o9o5ylBIz1w=D7g5Nd$UTpgQ`}uQmOG>xP-ag} zN6~QOJcY z8tJln6%C_tHYi9+-4oInvgHV9iRMOzr9Nc$T2sH$m_LhTp*0O#A-^Bea&(g9?!8Xr+*)8@gBtJ9i$TXyfEqck~WoXzkoTP`e zmb8kHzhig@{pq80sfTft0LiC4rMGcWS&CiAk}ZQd2(p3Z;cRF=|k9nO+v zTGK|MSZcYCt2ft8CpH4+QZf}eW_9}a^gHfbvsjLnE~z8>Z!5je3>y4(n(DYNBSDXQ z%ZEh_z9Zz)k+ei)sU_s|@&)sx=Pl_9_lbGX#JaS_?^~gLA9s={*0=~RGjgK(5~_5V z02YunuP|WfQ}H7&#uQE(6|d4R0rK{xmh~DZaotOdd1X3jX=XP4G5Yd zUAKF#8=Wr89x2Q2tL>cNMGTH`pRRX@8CrF8Pj$5B0jzK!c&gstGlazlO^}73biRb9 zFH2HI@Q0vw%NK0@(ql*pAQPp7z?L$-s+MTAO`kIOWB_``{?9*}pd8EdzhIZDiPo0Xq?5*;zhrR^r&!wp3^!bQ%r8lK->0dEP zR^wNnv-Ez1DhV@dAQeXd-_oa;Y9|Q$$Ob7>0G`lEKuZgAfYr-F$XL$3uKVc&!_GKu z?9DaH^GJ`^-X$l3RCpBEbFbIXyR_*9S3_aDUKL}G8HD0Ktb;Ko-U%~hWxb;0D5Kc} zvFy{EqEAM-VKgd75@JFZ*E6tkEV;r~b2sjG;7)Nzs%I_E)Z534F7+^R={TwNFe%(? z^{M{7qc{>SfQ!IOC|vElo#3Xt1sCp#y)83@qK|`7_IZB!cmysCM)DDv^jq+8@CvL8 zK%-(-&T0oFYyn)}noD8h2pRyy4g}{h(h+MWZ8S}(Yr&7R^%DWJ*$%==!MN25DQk{> zu?MeeyhAw*Z?WSU)NoW%5zuA{lp7wRH#S+dSK$hd5wzYw3DKe`Gl)2cr+91ARBhRs znx4(lWlI_Da9gR&#(^}iZju;;gFQ7?+ zDuGOVvOsb&7R89Yz#>mkmefdqw(PuxhIL^}5EJkwF>BHRyEgHjU_(eoo$=Tbgx~>9 zA|@dj#q^DMb|e!O_h+j-)|}Z)+AYw*M5hKy7Bd{cqX|pzjWNh=Jow8P^HX z@1vJ^%qSBa(GtJ;ATQM0R*0o@2d;FPmNlKCQKw{uF_lys&kdgVP5$D{K-;q|FEuH7 zN({wYGmia#)5~d6H?9p6@i6h&6U%OiXKPLQ(-kZSeqh}UB(*8aW_!G~1}_{PVTE(@ zxMU8Fw%)g9*_x4Xn$5o7!VqyULp8g0lCBN!!gYcpxgol&uTC8_uMV%#a{^`aHf_J@ z*4Uvzt>6P?JFdFvU95kOpULGoD{ZXNZ-__bt%G)N%+@}-f~pElPOYAeIY&UvzSOWF zB*@8iz7`M^ayG=c7cvDue@%bsB$W-P7>Wi41Gy`bT}@)_iOQGYos>cstziisOs zgm;$X3U|2 z(vV&jme0|d9gGElOrM0BeW_&<6h{Lv0frAZg@y^aT^r{f?+|{3lpL(rH~`yoqBQ4b z5!RpyWbAK4N&1Yxr#p-Qlvt`hD9e^SvbaN7DNExP%C;TwF<6kVokPRB!b5iHB;|N@ z>W3TfljCSu=orfmUbd;OOXB+;2*-#Rqh+5#-+R#ae)$}NbQ5yxk0K%X95$gW0@LSp zI!ZVRMI0yGLk<+_DhC5>n}wANGEg-Wmam_-9~K7CEt%X*gL4naSWNMMsY+UA0=^Y=1y6LO2u9hX0(W7(-DIm z`3%M4Ir6QKtcjkAj})%n#$8+lYJgW7dGBuT5Kp*~U=<%HIX<%=!zIa5sA|pGag#7- z0S97zC2sGsMz^yg5l%p_1AU&+rlWtTY-*MSv@xAri_Gi<(St#lgg<-(*aKjp9h->I zP+?S$Z5-3N!22g5Kjpk5odG!D$LZl38646bgu(tzm~5DEnE&Nr0vB+E1*i1k1wy%M z=43DbGBBeIArBInC#4=4V6*N%?V`~lm)WK+MVJUT3YB7;N1p!u;$^e&3C1dyGA7o& zt#`2Q!zYG@A*J56r$pR1K3p9cn$rgda?*x(8Ol+VX3n~g?z|@}JYO5E^do1HSw-B? z3GBb%62u!63wN+LGEQ&X&wmR>GN#f1jbG{Kdtzbqp;7W-CKX(`*NKlsF@p(r!i}B& zD1ffLIM5vcgEV>v3`OpL7$tnSm~-P>78-G4AI=f3!#2;ftj7E?{OCM2!lc=25#vWW z`jt|YzO1y#N;n$x(+(T2Vc2-d(q-HQ<8e5K!+HmH?Bofb;lkU#L=0X7WMr&*wQuGI zc(8AOe9zI>3Qlm;K}(^3zaNwSY{cOFMMtnROn*t5OSgj|6@s(p9yGC4bpTM*=urso zg+r!MY2ccAn*G=ooj^?USgbt}utkBet!8pNll}VGBU&EgTr|f*09%{;w?*E-wPO;L4vN&!I{^lPcwr^Ca&BHPZJrx&U@X3J%$Q?YwkC{y=`!HuHu?bL z@>shM@eJ?c#a}X|UDa_Q-qk&?FM8t`c|2T|9do*T+)Uv)#8hR3&p*T?5cy#< zm}$Q65*yR(lZ{-4$>0P|!CXFQc_x{EBl+x=4S9h9tv&D;arL9Urv+{!ao)iU$Y9x= z>DjQ%71)MM=2cQxv~-pt&9I9h2abOb0K6@N*wC%(sWEUO@ZMox6W%pEL|VjKuGQh; z?sWJEHv9Ual3_ zm6UYKNL!8Vo}J$UAx}E9b;)?wyTpiZU+IM*9(CyW(9f>n>M*Zb^c4s)7LY1c$A|Xt zD=$6-6fe6x%`FrOVTw641zBt$*|yF@)F)KLwfg^|%}f zld+qA1)ot&9&AOR4G%8)8${;Nq0SL}HG5^pbtchcnc$%K#n$-Eplbk^rN*HsRfA87 zQiPPG+(HOw-3c?nl`_1?M@e-g`+-VWI$&_)xD@BKa+RSxZ$9*VW{d9% zC}><8AzQqpW`Kktl9j&mRd^(&FznkQlS0af7Q=hGw;*G$b&e0!M{4OwPN1oIr20^^ zC0K$fd2)II-nwf8eV`vKz(fQPWX*JpXEuAj=2pKv$1wgpFQC zI9Xt?U=eb{M^) z8Tbl55o^ww?9%zG_2eFJ&;%2l=Qbr(G0WQMcYj?I`O{JpsJf?{uXXYLpuNK*d-n|C zED^4E&fBh>`7U%i%kg+#+V_;k{`s;&r|}p$fi1n~_3oK@R$#1m*kec9;3inmTgH;( z_hK)SMh^yG@huzEsE??&!bC%)#LDN$;fWBgh%vH5e@hlF+M$rFrpXQXtN~G+EeM)# zKn75(H|DSLI|u{#eh+N?PL+TM3Gr-}U0Sh#wpeZ+MHYh+bg=#d0W9q`>mwHuicYCcr(r_Ah}a&vEx=!)7=;7)#aaN5n4;eV_#6wF0Sa6RYrxbj39;Y@P1tU8WbDm{ zR#Pyr=5ci2Us~DQ%~#%dzw0AE z33_zlj+W#7Lu}?bI-Z$srZ+la(b)eBzB#GIJH669Z&e+7RboGwo@i_z4n|vRZ!8_Z z^Et)LXD@@=m>M<=aCC8l0zTu}^fbb-;}DDpd>d15PhgMjRg@ajZ?r(H()2SJn6Ju~ zNO_KPu~pigyB-;?dy~iJyAF{=H9d_y&SPc9K#{>h)Wtq-B(ZF%>2hjTCF_}W z}a^0E_N%G}qTL|z`oIroTQO0V*$*cYC|8OvtT(N49J8*ZDg z+%T|%J50Cj!)$J@uI=I55#2ts2oO!=CP?hU7x0G7 z<;~6WhG7G=j_!bsAqJzK-c$Putnt~`&fs$fcAHA5}2cwxK}? zLrk*gN2-JYlPWO>YF#S92X;T;Exf>&gG9opJO;(W3#eh*62npLve#m47p1koASHgk zZOZ1er2Z5P@%D7=8Sx79PVCKzqz?HwF8fMN)UN7w^zd((#0(uF7;loN5cx|ZdOI!oMlY@I>WkAd|)i2gl}sLozZ611{=`Gx^L(&b}q z{3Aad9HMvDH?(0+nOpbV&~4YPZxi<*c6W9aU{6Ee_4Lp#du$cma%qT4g5u|F^{{0Wpi$ROD&BU~^;rQbNiiv1uTpqVYEs-?^1tvsawB;w; z?Owl}1bW%-Om@Z}7pP(wd#u-`EQ_RghBde4#5`H@I#Dj$@>o%}1xlD(EG4%@yWlAI zig*q-9jljhmUNcR?yU7o(hQsO36vf5i20)HQ0eR5P`Wm6uU@X+sZRE6>g?Omx1%2F z>>BzFcD`%$>778$HKiHiK7~!@Btas zZy>*X4li1HGk|9%8eJ|L7Eo)*WYaP^0>=67 z!3P%cp^lY&$Dohz5buDM(zkPHWB-P(&Cu~?d7JpUkU`Pmz59mt)kC|7aDdt)M=#Yxi#e9`O4MU1z!nhkw=s=x=VG zGqi7rC!feyO-_0A(}f1_SIHnvaEz<*Iz3;!HKY7%D3FRv)o4zd`WWB=aT`~|KVV`PY~}J^zarf?u(u5K&*`eF>c#5q@+mg{ z^1Qx%JD%CMgAQ2#(C%GB1-N(fJM=WB{&fG-dpf&zclU%tyxg?`h>y^NqsQAo8_=Wu zcDzU*Lz-grm2NIyGkoSrdtVVC8QV!))1ond6~QT<^HI*akfbyG^^mAL&Vp7QXav z{X(yg3CLoUCq+MC%;%Rghu4eLD~=^&_cLf?18?d~9N!Ks1O-VMds4e3uc-lbO?&sc zv5lI!9KeU_85mqYy<`fH^WVeA^7&gU;E&1kN#>fTlKKaRe%7bPRMpGi|7rC$nY=x$ z13SureLIGsg2c!Ff8$Tt%}@U>Mk99Znd3=slYlNP`y?X7#vCW0Pe!d@TvZvv`RtJ12j{#=r*^m{eiIM(U6$go z=DjpZ;|2KqI}Po)L&ISlpL%UMp*?{u<;FZxB3ck=bA(aCYp|}y#2#7DVsg!29oW3Zpk7|&5qWWwp4>dory&0X}j^oxDNJNg(N z3PN`OW@tB}^qZ&qiOt-C9-0pyZ&sg{H>;Ps`p8d@?#ciFAFotLO@<;Az>HGFqv@G> z;t=iaODcI8F_IDiHn)ZOH=&pB&QU+Qhw#M0~J*OJ4?j~WBw)%++~ z&JyJ|)oGKQL^>D^XR{=nPWxzw>o853J6-*C>)+o+&O=04gcB?%E0?b*1A+O5NBie@ zZQhR-z0)D%DR0kR^~{cEssqm$h*x!nvGQHJ$@~!_e@Sn4@skmu2Jf!EeM7@LcGW&3 ze)u3-L}Yjkt0xFBmT)B0N1W|fHJ%#TWfOAQ2DCuH6q$}D4usRY!q=$#%ZA4nPVK2) zd`=6m-zjewhIBS}l>^U|15j|ZdlQ0!sn=LJ`6pqZs6=xZf z7p{OK)AA&vfhv>szp?g%7yKhDP{H}aE>N6r$s~$)7y`^zV^j{eklgbt)#}HXDR8#q z|GDkhl)JvOwD5PZ7A;t`Vm>y`U#NNPaS$($4{Uh6|Iy{sx;B@W3r1eQXa>1`?j|&a zk;Vh0oSRqG!{j=ooXAQ)c0W8cy{gKaH8G*Qxwdz>uYY(5VZqE(-ucDYc~sJ`+zjp= zKu>)55tx_&&HM6HPxxZ!pn>1)#>^-7DCg!4{24p#%VV`E0b@xpIM=z>9gxx3fQ>np z+SoV(qJ>j3`^e$h6GJuFHg(Zzv&=ZY!x4bU`4E=ZNjMv8rk9lKIp;I0SX&rGY-iYJ z>6CxF^uYzQ7Xb5o#CrvQFX6FA0eax^4W)nioUUm-o40Q!?R%N8G7uWe_VRMiTx=SI zFzg*&`^fEw8OqtsU`}VapE1pD_4{oeWA{pb#l8=8?HKB2_?ZD`;AYgB&$FB58%fD4 zcV;&Vv}s9WqTDSB2@eU>L(_0+YlCdAr*HcFP~Z)M?K^X=NrE-Fn<gZ2npmu$G)OtGDM*XNgg zhaA6Nu%gUgF@O1r5&t67hR2!e`O}te?!mS<^HH}K%jT`fz{{Jf7dOvcTh*fn$TpAe z-8VW+y0W_-?yGn0UOv0L2nD7yC+QnFz1`C_)W4|=?K7!~7fd9APpe?^=Jqj&=F11v zFgmY|(OXHN=FU2mZ}JsgAtcy2rmOj9!#v8Q&}{(B+-u=S zd*VA;QEogS7az(dmtjvjN;r>^*wWjG>bf8Y9U<@uc^JYt+|y!oG zS@7WM1!V>Qmd{^-4{Ug>v!OgXfBM2{lY3Tgo7*$DzKg#vR#xK;)ywPVRtL6K2YBT9 zz~*_3xB0$t`K-G&V>caad)^ap&l?g*aXsI&5ey2qPY z1X#XmUUPTtUoxE$bI53-trd>Qie;ts+QDrArco^GGgxGjqv*ymTe03oU4$vMESHj; zh}xDVfN9+Ub(S6!`rrdX&ylG~0d(BkiVrl#nVv%lTrKXq1i7jngoO{-pjgwa96)A` z-|z(HpV|iY*wRm{WBeJe6%Q_0@o>Q#%JN4advpVwlt+8Z)P>8h zej|LHTe{$`f4la<1rL^oS1bf>ur3>xZ+LWmxpDpv%k`xTsIRTBy7{WFUsZo&(rruE z&FvXIP}XtBO1K%|=l5`5@9^&K$#dt;?Yd?5ywY{c4bvvCn$z7U+;AZu7(74Raq-jr zd~rTHv^rbe(VCawntmXkS1U>#Vc zS-S4NoVUyIMh&4ljXnM>$HBaX&T)x!oa1$UleP^9)-JJc$8(&^tD()>IcX^u%;quq z3tR7caQ1>HAO5G#!;j8i{^;`Z*oH@!Pc1i2UpVLbTc%w5wQIj}?Nv*@UapzIziSG} zm$^M72e!=J4D2OtTQNd;bjKVzPhCJhuWRzWX_GX6++6 zWqyJD#78#Z;@DkF7u@*ZlOqp5`tbaRvHcbEr`|ZNOfS=>Tz{1sv!oom>6+`ld)>FL zyZWo;8(00i0{&P(@_*t5&41sj?p0;-EpzKzCf{&N*A2H^Ke_9MuTAb6+GxP-a1(xL zUw%JvkAM4z7oB_!*7hZ$7>8ZbxLHRH!`N-3%i^M(tPNZa1-ddB-k$c`*!YmOJU5n=zWTizp%F&%H3%(p$$PTdew2sZ2c`B?q+({GqIf7%MpOH^29->%RJp?f@>D<1>TVD3KA$=j6%R7YZ{u&HAZVdxA(9E493PE&NP zHJS8nj97DYdx8=EpX#0f1gL^Y7!2~7?_!6p=W7_6s)5w#a5&W)2ZCVF@p>o;SBaPc z;FcnkITEcKwnXBb?l(6JRml)~@~*Y3Z~RVK@NnnJ$IFdV%e7PIFT8W=^r>IF{@$ML z&uuN&@OLl2_1){PF5mm^_pZCDZ2iZ7kM#oX<^sAkyJ)8>`3cuJ@Il`1t4>BJ1m!8-;iX&*IC z{7hGr7m#2nW1{JL7@!!rhofzkD1i}6+(9+S9qMvmcy#|4Y@hq@=l+Pi#L{7=y+Z?_&vz`y zAm8%2gBn!__Jlr6-Db4DdX}oD0k?D*Hf>z?RwBz}O{jvL0N7AB{BW3=LroWi#**qM6h z#_Q)#FH`4Fn=@}+*}ipq_3q8rT=&)M%GKA!|KI%9S0_0lxustBBkvAYTk2o0+YJ1| z{$+KbKH9VHM^*LQZOgd!Nd3*Lzg52ZJ)o~|nLD|QWCmf`G~}~y+`u{v<|oP*^kM%w zhi1SVdyipAYh{M6(12PvKx5)|alkqd4L#*po!*wx;#Bl7K)0oGhp6ZbF{qNJ+9K#t zvCOsnbTMVhq_?D+)KR&x3k7-^Ya@k}$-Jfs3dsulqQ{!pj)wJwP=awMaK2*e?6nK( zsSD=&|I~6lqCKsv=Ye$$6VN;T+Ouf z{CZtE!1q9o@{7)_+wxpF^Q-^xt?%dm!2Q*m**kZ0*PQkJ8@t#0(q35kuDv@4IN<~@ zS)AI5iGSI=Nx_%p6IyRXWuBE_HtLD4XfhhPK2QIUr7%1I*MNjB;At8k&_d97vY{5J z?=5s=`Jv@-b6YjKTvKA5tF({vg_bl|wG1=@xMMCYk+8(|Kr6Ds##nNwCZB8JK%S*o z4fOw1=HK~fSupj+`3vWF^=#U*?nm37MJv#ECrW{H^bm?_=iWoBWpVU;PcdhTBuyC(rC&kJLZ_ z4>Ru>?%T=J$9#fiuNu=nf_%oiITyb^1U|4C;Ey~4$fGbcA>O|;_C`N zuA3~RuG=|vK&xC@{osNdr%qq6V*330(L3iahkbI`D`}tpf z@4LVF?$uj)h2%o@PI<2E_htz8U&BFJw*~u0^0((%+rRbwZ+`zjd>@$~`R3K%@D>*1 z$lK@5oLBIIVR}$~0}K>={Legr{Bha2$4DCkl++cBjr~eJ%ehWVYz>n(*!C79d2~JS z^|#@|c&hbB+%>Lhv4NMEW%lA1h`<5_k(BsY7yVGn@~XiPS4&>Ee~O$pYt^SAr67Mrb#is@f&%RG7m}YdCbMeux_XP)VfIXC*If6#UzF#6 zd3F4CmHL;@-_OQN+!Uvyg#trO*}vu2fWQCO`%(K}Z>kP#fif;|vV8v+-~R=&6Q+Ol zH?}iWa||v2YxT~m$&% z#QTFbn6xh8O<57-)ZTzPAQVW4rT{4(_!F|WV;ioLPz41%Xm6fArtZE`*QPYek0Y3A z@cs>0_vOHtB_d`V;ZoMpHz!1h!o1#kDISWe#T#M z?%v$lvYoph?{G~lp?Y~!nOvsLT;IRbH!FO5^0hr1hpN|iK2Ch_byTt+ z-kUbL&)|R=H|`vL5m9w`#J0)@20!+N=Ehv(jC2&8#3;#Gu|!#6$Qe`JV@csa(PoZ} zGS4DPSb+VyU_{iL5i^B8gpe|cwNVdhXic&{nfLs+LpWo+#1-Y~BI&1AeqM1JYol$2 z%gt-&m#Jm`g2(&o4ZIOiZP{F7^>Fj9_59T@>*wL;U75j<-~GAt1Tn4TCFgh%L&zih zxBq%OtYD-+hr{Q8Nu>Bg`Nf~U|JCQX_+NSY;lQS^-71**Wx|s}}}% zW%W1_8?ACI^YX+92tx%TMI|YXI33CpM%}oFKni*Qu6dfGq;jx_b5w2VOz`sPOsw24 zpgA?mK*i$=eiKC(I3}s==PD5cSays#1}o!=xDD4c_m_}7s!gCHBZ%|WSe%J7QiUM` zI>KQh3hIt0S3VYGEZ@K$jpP|FT{SOjvFGQ#2* z!(83H`nvF){KKJl|5X2hZ>pn0K9%*+Cdeo=ADCArca=HI%bc#stGapW`7OrzBZjA6 zBo`C}D>C84nhe?M5aGCh*tjkld6Qh>Ph_08%kkE49LrFRoN!j|V>wE9YrD<8Z8`GN z$Y4`md;&dhh?(!gRwHDwKkOoSiL>ym;F@1UTwd8L!5Xc!T`8TJ6XurWj9)~1tmO*0 z2mpP~S>Cp2e%JDqi>A--?dSR0-j(&1&i-=pxpES!M#=}Zl#vZX4?V9dip)h1@l*Jr z7?+bes$#LY<{$Zaw{z(V-0%<8nJdDHKEfs*m^t!5H)DI9uDM;Mdl%27e+*-v>p^~% zBP!=0F{MQF0@R?cNoCxcVCIr$4=5a$L?|hq8_8%$jU-5kzwT|IjPnvSf1?Dp3Dtk+ zO1^hwq|ueaahPYPN4MfE`p<1mEk9#XTq|0^(OiA}W`TBZ8#T}|w>p0XJS>{Nd_(v0 zuE%+aWyi`b`?pk8Cwz$8kEUhDnGx7vUgYB)Q#%;|;UM9BhtSoMBPmx@BO{Fn{%Jo# z%`+)m$^#p5pn0o0n^tvis#kSwV9e>IAVDG+y*8ELUsN!BCww$$2!MPUN4xWN5~2#f zK-+>BY8Cn&nv-`1Q>BOmj0NHoG`{r`OCYIf1~u9{lfs>L&XI9+lBm|{W9bEYa8S`e z9rRK!&x}t>kg9NAldycMc}4)%Ou=h24?!%NHg$gQ%7GpG`i8nUZ#hK#pi}W;hbYo9 zg&LbQ{-(q35(JKd?r4(^Yw)NOLBHrMGJsNXoASVxeT+a=n>LnJ8#k>go64%vwWD?@UyN7z%*RzGEicpu^vrJNZ8|T8-yiBt@8t<={G_u7(!=w zC!~`CTplF;=4P1Bm6Q7_Rv8S&$%$KGL2%|z9+7fl*;;j2KOIz|&OPZx*$V3;+&S4U z;XAi><@}ZN=ggnl#SQljWyfG&52il4|2gol_tz&6jp5GW2IsSOJU~^OWGMztl83V} zHZnqwg}pqXI11+Uvkz=~plsSvZ(28RQ`yn8>FM2k`olQ=mXDxB7TdHV!=NZSH92DV zHbIoOfrP0DOMwlTGano95MxcTeX=T2tUN|`@_Y@JCoz%}e{*?!$RkFTDA#*4hKc5S z@MZ~-Mp+Ups8ZufBeIq!?zm}ly%zm;9#NK~T5dkYzAmnvzo^Wg)0xi=cfJNV)XSr@ zW&d*{$UgtD`e2}jg(9vY?`_x5B0e)zh{Yjc~qD{qhqJ4bUf-V#H54hHSSPD&Si>k;QrE_G|lk0tBq7VFD# zjy*-~$01jN#7QTyCw_YE$ox6e%bW$9xAk@J*wnM-h5e%^kH;gOheB22Xi-1gDiC$} z6h-2J&-(3=H?ieQ+-PJ1*O#K+3ooy-;_kZKVcGN5CO6jp= zn?PdBv}qkoW@jvL3q(>7VyjuEIB48X)J#drV=XI#us9_au_yMM5b%gsjCI62Mq=y~ z-$rZ&M~poOE-63VKzGXPhK|R1d2O!|HRc;ADU5DmidJG*@%OzG@ndV}FJCmBAwDpl zznMqbx_dYEAo6vJ{YhqF^!3S?9B|@ELroshX|o%80O%*qP`@)0kD~*Ag_$4N#Dj4) zlT`48de5q%vYR(dKjs5wr{LgX^;e7mW9RIsUXwIaQK4+~JPp3xab&Z@_3^ z4|9Z$1dF3N!sR$RhWu0`^(+lG9%FWZ$)m_*ny)6ZmLnW-TmYS=Kuy#x>u~wtQg+!A z=rs0Rj+PvB8Nda;0sr8lm1X|)Ia8#;0~^;PHLuqH%4&>0 zkkwd-)=d>#i&SS4ECttn;R)HG?8yjp9OH2TX7k(LnrZFZ{g>ZK4A3|`!gUC`%j!;k z9E+sBdE9F3#nO0d(W|ApsZ(CDB{{@CYMFswnB5j|V-^D61X;2nTEi5XWq82ZZ9L^U zb^g>jVn1`?oQ2b_ziTTGG^;5*L$2r?1$trE>H&5OzusG{1wQmf^Vj&ZbEV*uU8drM z`Kvnnc6avipwOF}He%~q`O)Vn?UrrnW$80X zB(};vmXWf!3TFkGnP^gq?|8*PPZD6Ml*H8~+M_Xw$Ox==l#z1{MWIi#ZKsRguD`Nhl0>prxHx4KO z%#FBh+!cFx;q4dVZfKDqcT!A; zUk%Xhq8*5{rs-!(S_D%Q+E8HV2t^3xNMjAWWyK)im6&h<3_ByNiWJZP(|rf)=EF(u z^ZF6}`AyE`0w;*t65lB`KU=`o2xD2d$mWQ}pYnNlTXLEN6SP;BokQL07tZWnxN7p( zMiXSmKlhKE+goo{ijm?4`fctVqRgI|q*te2XBE0Tc zpLxzHg2BHMdyN8rg}+ph0K0)A3^_pc@%an_@lu7+7Rd69c3A*&#D*pdGDoDjN07KI zsmZZWM=|4;Ou67kaP2{n-UI;}bT~?zC~*xs&eqNQ^HR@1nGkcu23RRkKN=%&ZW?}U z5gIaW>T=%m9NIXte%@7^N5wV34fQa87vI3m1d=IonZPvAjjX2WLN(Z$NWL98O{F~_ z1H@KOBK3oKaO5N1V|rsi5&s14GN0GvIk zE=sX>odagMRi6eflcE3%a42z%l<*SP9L#6?n4ll@$?^6<2~`2$eXk;)H{m$05^2`o zTC^jR*{RawyiyuOoGJABK`2PmW1(fAvi0C1-k~T{Hw^Kq)tx^p>ldz{`IXf$P`~&b z?+TsV|Drj~+l&CDflGwu>=;>?HHBc>p(ObZDaWhy9vHbKz`p_kZ|*Ay%72coZ0E~O z7&*|VoWG}{WImrJ*$j2l%0QX6F!xt2VD9!Nu!XPd*P*iF?8GsF0$9m{NXZ?MBJm48 zWFq&vHOmWzC=*@b=+KtT>>VfeFKdSKkXq^j4YP)1&bEF|lx4~1aVQ51lJ86o=wmoi ztcz&=&4d%ohlJ@<2X^8GeAjto{SEhmp9Dm9^CBvPqGuFMXzOSb2{^xwrO+k-@KBA?zp4vTr`%s&YVOLr= zHmB8@;pK1Iqjs0}F184SXL6)Ao_yxs?zh1xb zhAAbYE80({8P*+|6aiFiPcouMB@r><6rY;fNDO@Xf>FFRUA@g6M<{?3GW|mk@mU86 zsyFV&CHP!D8yZGpIE|R!j55fJUY&lP5-e_MWs$6f1-31e0Vnan`(=PhB$5LVahtlO zM_|(;BQttRnLi;QusR^Lt;&qdLrMKqN&2K=bG*LEu`)LIs}H@$Ve z!F?CZ^LZAr@WCTJfv*vgfUlqYwe9Bl67XCnqJyJ4#$E;)KsJW+Qh_y;Irpn5)4doO!fU*^sD$q^VA$Q7vbhPlWYO#BwC=(UNyj0 zgbEO!*hg!@2y7j0Oti!%ts9)_L?l8Em!jy+zPP3C9=47p_;vGKXo&>>xcH{xXbHiT z*8#z{6OvzlhC#N6bz~+WZD*_CDM>vXK;f=9N7P&;AZrpDZsP zBoM!|-@a@ry7`L&6ZS32Y3J>n107NLRK)3K<;a4^od4SORngpE!QNlzGxVR)yX9{H zVDadXLBQc-vHw?eNRmDq-LGq+5* zjN{zn{?Pi-3q0U3rYWGQ8s#8@?1l&FC6>iGsdCixpz##!9m5}`W~_zkpz;^#AT5|W zeZ`(#ejJVFy|jBHAm4IrXH46}k{w^ylym&RSeg(gyh19(?K}j_1$f0-SpG;ID}2D`rG36yvaj%ENyI$r}#!ZY@f%Ya8w(74ipk#xXo z1tc;+j?%1!Dc}zC)#TIIS!yXtljeB#@jI5r*Ud;ye45i-Q{l4rda(()JQ9ZS=618) z1U*b8MT}#^0XyeMxGR2HYs@qGEXnKz4k0|YXQyAPE3aa0ht~gQW=cz#dp^&Au8eB+ zs5_Ppx^keWh;gx zyn&(TKz?KHpl6Fk*^ZFB&~{oOhH?_=Te}n{NE_owF?RB-l=|H6GFvReXH4b9^Mac+ zdymMZ$iSG#ht#)S+A73ep4ykHbsLUN$ORXk zpp&kV=Z8vp6^?Gm@oJPG#Kf>EOF>Fz51N$v8r1NcCPozFoYb#uThe9Ak4-HrrcR&# zWb^K)WbwIEl&nnt3Xhca`dY4(-Z z`&m_3G7|F#d{}vXoTf21GD4r?2$^a!SH5Iudo*WTmb{sHBuW`EMygT#OGPOyV23dzYo;_CTFwUE?hGWv-mwc^%pM5XblsROub_Cwe~OR*M0eh~Xb= zP%>M<{fdtYj2YPkl^63(CD0`_IJZbenq>eXaJmWSBzQ>$QG-2^g0crf{N?O%MT$7V zBYo)%;Sdh?ucC2#P6-Gx@a!5sFE8Bw2Nh^;mMGLa?Lu9G&L=DWsfV%||pA zOn+=APx2T32z3$sKd;|dCf|93_72?Idq-ObbRuv@3;@mCXw0a+rHcxg5oNZ-#im?2 z`A(qxuz>i;hu%@VEJ$QNdbxFT3m`N|xC8RE7@A065PYgG1c2cYG$#QUgqYB=)F1b{ z93Vy0gM@%P)rm~Bm&U!8$vZ|XP~i9!?RrVWQ0Z$`W)&2QY9aCGc=8Za32F z%5*7Y2GM~LhB+G+wq7~yhUG;9{u~nX34iUKj&Yhih1(5ttn<}~5_XXx!5F4!hQ$ND zU3ma%B~`n{%4kR{6U@UN<5q}pV);^nedF#x#IbktGtfH)2r zzXb4+rUH7Ty_6Y(#?_=DN{wZgvVKwtB@v>mcVjx*x@V*pQv;5kT~mmE!ET$rmr)>WzU1R1mKaw6aGp+&aUe& z`W>_K! zQ~%?QffvK}0g?uXA7E(>_%=0S0L^!~wNar+h&W5Sn8wzH)ARL_<`JwUGk!zj#$te; z;IJx#qJ&$$!HLo%7H9@+iJG-FP^dT}$n;849%jK&*81WI+c?7g84-L|=~EtiU}$dY zgS8{+%nM&aE*dvx;5J7-S2@++ti3S>O+_at2jMv6#(2*NR4MnUAOZ;y`% zv7SALcdGN-ue_n$Ic+Ba!L;Wy)CUd&=EG2~PdI4jFy5EPsBPR8h$KRTf``P+ zEg1zxSPk$uBcLtSBx5~L%41TLZM_B@=*8Zq#O56LiZ5m96mZC|?>gZWEICZw@Np3r z;W+qAW;5`Ja@NQzh8Mi#flzbt)0!pUUHY=G{+S6Ce7^ zZzj*I@4WVF<6*imifXDvY>05}ZDI!NPTFRJJ6_$)jMCgVNRJjZI3F&^hNn> zgun5LBV;mkm_P2Ka`^`*$vvsE&-oIWfh#;X0)qygkvYVcifddfhsy*gtSk7r+!&yc z(@Yd<{GI_v#Q14*biir=p{h-YU`~+mCNQoMcfnL9i3oS{3az3^d(_fWDJ5#nQ4!AK zNzX`wXqEGeTmNYV3FzZH`9eU1-uBCagyD@qUG6M1ue|;%*LL)PR(%{mqO)cf+VP3F zyVz!(x&)}Z9khuIApW+nOu4cHKw_3u8D7zOBu%3;*!eZ1fk^oOU)u?{^N zfXzb@TAR@fOH=ho-QC}Sjm6>d5hlX((|!{GmqUdp!7{Z<2S0iKSpcaU)~J;OaXjf3 z>JyeuEGFUiH;#<(66c4NOJ!U?Lx4diExru{l$=-KS4uLlStfOjD? z@@neCkL`qx{Pgv!q~@=dQ`H+A_WVrCFV|20%54~Xqeq7f&%BNlPdXLXI?n ze++RnVx=4z5BNg;T%ti)ICDA|vPyY5EY+ufMz8TRQ-)O`(*pavCjqffluogob1A%uuwT$z!O0d*?7)EJCzC z#|Xr?xuZ4S_Z0=5Cm9n(`MFH|)t*dGLEgKT%||*s(y}r84D_z$)wv3PEk|T?;v9}j z+c0dYn3{cRP|H9%!!ddVQx`n`WZ@;oCK1X`0Yt2?KKvn)G!rMNZvgz0wX(!b%;)wW z1blH<_}jb5ao0YCNCv>1$D!}Na`GtWhrt&EFxnpp&&N4b{lah~L^{J;bSu&R;=vV9>quF;-Qd2&pVvt`;D%ONVFM9Z7bK-*PN3|hpsy7vB=(lM_3@z{^=OvXKA zQla);mcZU504oAnpDxeG1KRF@m^xtv*fy5mh-UNhha7Nrc8{}17HQCm#~#l>F#hrV zH+KCD)bE^0?s8>){SDWDWwACN`H+G4xddMD$w=RJY$Bq9I)hOzy|Shww{T{e1Dg&! z#9wW$ft@Ijndav_4fp@IbvEEtROh}g&_eY1P)WeY2SYAYND1@BhBDgWhwWWbZwDX7-v{|M$QC@4Mc$X6Ac}e>8siJLX83b1=WFEQ#UIr@|D4 z4`Pz)r5XuA>Y&=NR>%nx?Ws^mqAqM@744~ISwp&%V6VMdHieKKlRfo2;b(4vN0P8N zYGe1;R+(0A#@1fm2i7Of*i^^&WB3^eYxTdi*4nGpK^Nr-d--9GM=ogcqFbu>qBpt; zp8CPWJAr;c%fF@GERKx!Q^W8}f@DX`Ps}MFS`>uX))#u_b7fWOo zfG!3g{{y~}SkI$?GeTp*CzC)ErTI(h9Wfu)Tds{qvZyvfT{y#bzOxML3^{aM3ho#S z{S4x^%s%cQ?Nh&`426}S(06}URQf|u{+N<7V>BoYrNMtYzIz0Y<5r>sKW2vM&T>Cf zT{b5>v(0#79)=}7nngU2eT6+wj7oh#B4RwqKd2|IWa6JENL2s2>VKr3Etc39er|ZU zBn-dkv*%xBpgaD8U%g~$y=jl=&y=i4#e7By1b$$$ zibp>GgN<7K=f{OP*c!qf$?1F*fvVnYF@B4g-~^J6fnmaS_opDGt^7{NY1vRTENK~5 zHukjg_$6hzMHm52e|Q$oYJQ5@+r4#C7Uifc`B%58BX8EH%mi`9=yhaS*EL2F0eBMy zi0f=wzcegHY4-AXCv&gQ1`P|GY=QO9T@e>fOCvMkv*$05>F|QFzX(1R=Idn2df|LOAYwldgjXN96iDn|nC#d|H?(e0Z=q^q} z=xLWkpgi{ctA6pgh|GW5cnrSupSWXcS_5MrrG9x)xZul|#N>viN=1~sf7+y+ynTkw z;r*Xv$jsOzVlMAVQjIJJ&$d=fs2+&=E}W{AL_jGDfLW{qP~J1FH3(06lK<_55ENA7(4gUs~$KG%+{4kltUfXByJ&u zr^Ju$z2I}dbY*YQ)c6XA+EO zdfkYJ60Guv9yftNGUuf=Y%vZdyiUxdaNf2!@NST#jhxgJS>VGACgS!O zYjegfUz9FM${14w5G9i1SeHO10AfN`IU6?upwo}!0e{>m4>uXsZs+;PVEshQs5@vs zyQ{F6xNzF%dWU~DoIiH?*eMU3PDpM3k*UU_w8@1ul0uK7QmQ39p)7}Q$) z45Z24cJyvAr(U~v>r(F42C;>4UqEt(D=~REYgHlL(0KUN$guvWDPNqj=Ftbv2=2!< zIhGvo+zXbk2^ScNr(QDkiUp#vhL-eF(idk4iQiWIjR?DTIE|kMXihARv5%onG?s=I4`l*Ao%iM_~I9XJ336>rEHn!wpI`IcFL*=C2=WduQSM;qxCacXJ~6LP=9Ux4RklF8+h2a2#r%b z(=BiKn^H&}z#6G00X%HV^0{H`niG$v(!V&)sGt&&^gf~XYpFj!aOsq2dAJ~!b}X0* zqWCD_NKHvtv7R^0s%gx2V*hRGdk@?1DUW<=AQ(AnCHxFEC4*=yO@=*~yDTO2^W zJ)+3upFZgXB?=(Mi(e&4U;pgWX=62|DaKA%oCrtXcd=QP^1hR`8EsSCA}P~ZadtKm z)yHi+UlTf=uOjWgrcSS4ssMX8k0Lz9ZCLDShT);q)7`~|MAu>Xv@{@paoE^@3UjB7 zof|#y=mYYK*4H8G;9fhA&b@TX@^3F+BW6oF3I+3OIQ?7@uaEN%dsAn@4QFqis-55E6n;}1??VfF!$i#CW$_es5t`0H1r3G^d%7?4mLTuu z%Ayj)Z0U%4Eq-$m>rcXG`%HS2VzQ2A($A-kt~gQBZTTB(TeLZy0c+(-d~d8GY37?a z%{#49I-+mTQv2Q;wvJzWOGSg+WTc^PgoJ_DUEoe=4ZFke%aLvPeN{Af?3D1po?mct z$Ojab2z@l=muoJan_kYfCt^2$X!aE#uVguD4d%>?vd_1%0m>4;%ebzRC?~~ow*L;x zc+iItV!v2RboYoa)6t=7qPkVX;E;sa%?UA(z%_%I@ESm>ZekKAv`dVcf%PuQCgSIA z`P$V}80dVZc-YQXs&X`iBI2SM(@bZa%%tXvxvMsdcmmZu@%Dr33=_21p_iFMD zFCN?3aunq@Ihhs@*NqB48+7yDvCF3fFkb`U{EPJA(R+It=1BeOx`3jr3GkiJ`jWuy zb8akN5D87qB+w*3A^)b7JoTrew^f;_oMe?^Y|CaL?%a8kK+2*K!&?-$bOrU43sRjk zuE+)5*NJ3KdNl_y0U^Cyey{}f6{WSeaMa#T&P2eI2SH;oBqkZivjJ*%sf*CRiuwH8qcOlI>&{+6n}<9|BGwSh1VQP7g;w?$1mu4d}`x%9@M_!_S|+ zA{1RVZ0wYH?v%MPI6r!Tm;UaJ9$ji8M6SH~qL4JT5^nK|hcHivmzfWjxq0K93+q5h3-g22O4OqaQYr4QExYv}+?@wP|3g_{`U zDDattB%tVZ7oyr~IQf7U4NH#`&)QGE`p>iuVWg*h#QN zOuG}w^-8~5svf(pl+spDnQ${rf)s$K-!5r0ijyL7Xq1=ozPn|kFap))-M6Z;edJ4= zrIFKM5ghK=yvwQINCpIwmOZvhq}#7NcKB^32I&&T;`R$Sqsnr?RfZeiOH=ddo4@Cv zvL>mEOd{GC0T}?;6jHfa>w9jA7_Gwzw8kthp)>phN$(r2N`Vdp7O4cTei{bzd%AFl|BUqW!>p1~WX( zQ$Epe^P{nng0EJgHQi<+naO>prs(~RlX>Tt@_32^1e2YzxMQ%(S79Q-$V(84?FI(A zi60ZISqoGugRL2b5a_D5e(%5TgI7HM^gKL5bF~OdduuM9AI(i~rK=p3hEd?O_Q)hI z;kbKHX}Q5G(s+ATXsC7ax2Nw$Zg{jwLpy(=y}LcMw0Bn(mZCPH@c8iaCw#tl!o+_V zdx}V9?A)=(gfMYQSU&fQW3P>ttvK)vdCS7p3mVXoUxVRq$f_zRw^#br?WI+_enKmd z07-b>4$pH(c3C~4hzjST& zgL?t7C2ntsx}hvRn`tA`+?V?N36~9=!ph>y~Z&A~&4~ zQ;Qcg&?TY=ie7X>(&r=&CL2k>w~IUQS{eYTr6tzm!96}NvJz;RZe(%|oF{d%q^i@` zLMvPAtuLW1sAlk{&Kg$`sa0e9RGT+yi!4Gt*`G3Go&Q(5{XU~MVFf(Zv$WY zQ@V~|?w2yXN$IGDy&YG|XDDs-a0R!x9?`~;m zX+PQ$nRY8o84-!d6GnZ0*yqD#6NZf?OqolE=c=IpYv*1S&$UQp4GEQ5MJv|r*z=9a z(0W=Z-rXKdzhxMc4JiC(MCW~1aj4Ri_uq!6Q4-m}E+jS^7`w5D&euj1?3`5x5HJRL zO{iglrj*&OKt0(5oY+@2wwHouahvaI51&$OjzIV)cC#JK308D}8rjY6mXatpCG>@n z?oDKA^8-2u-Nj6n;0TVY&dkn^;~LVY+saoFuCUMPyYCuLp1V5T(6YB3xVw*55TP(z zu8@akjEIL{bp8a8o_JY2;UC8K&K(QF;Jtj=^0~|Bo?O0W%GmSAg7Se>`kPay5v7C$ z+jlVnL@?d0G#98sf1+*kkNXL<_nWgsUnC)>(*j%%bu;&3cK}JQXc9wJ2k+!qxMgdE zymdYJ<}B2^D~FJEmLtyz(#Rtsp2@Aa_w`UiD0_HfAqt4gHWnUgetKd%Z!c`aHXd%e zzxBOoYaE?YIhxK^;h)&7ch0h}6+6>q^AGO5f9r^_^cE-%&)Zvw57Fzw;!?>BDs$0@ z&z?VV!sjPWD2jmoAMlK`=3bSayDSal$ClH_S$@I!6LzfI6L#$RVg%}oig#@f<`n@K zylr%WPX&s&!lMg3Hk9YI_}q}!?U|5o^Nc!G&<7+MuqUsm666r90ud;@Nkc{_H8ck( zBc}_lgKm2o92xK|W#V@j6TE_uU+Us*6K~6HJAi(SOqrSE={)>5GOUberq>yB4n}S} zdplqDWtstD$ZL1sH4kSPs&8qi0OhzLbXOEc#f8x{!5a@hf7ry!dM8BmcZLD)RkOm_ z*g3rnuNW<#GVHQ-VMlt;MN=me{7qZ5{dR6upZX0KcBq$#Yb4gwrxtFnCaeo*xP2{nM#5DRE$-6Mx&F4QT@QgSS9O4`UGPf- zGhv3Y42OxiV9aDHmgU%-&Hkxy!$i+Gq=47mpff7dj9JIj1My0YR5%z?F1W(UFzcIA zl0H~SzMsy`nO=o0XI7V1-S!Xx zAfVHk|4;5qU{Q(aoQ&vM(=(-$0aTepM3QRwH@d|JoxqjOW~wYWGR^>-~L z+T$5rdxdOF%m<|OP=-$%G5n(87mWxPg<(ORlu$IWw`j%eXvMOy?!qX0@Z9BL#qwyy z#uf3#9bw}-_`K)GIKgX&PaQt_>P1thUB7!flF`jI!zZO2rWzu#UcX*_W9fF?099Xp zL(uV`eL;t@nI5}N(;!vWNtLuf%t5wFv(8$uTp`s{fUT-)S(O(|A1V|vP&^2+Fk9bk zowao1YNn@Re3nLIWQ>q`QI_*s0k+P?O==96Z;)=7>S&wJ&CXab>jfRGpMFB1pI(1g zG@hr@=?@*L=&l%1xU{%p+6bcS;lcDHjG8!V;)GEXjupi#maSW{Zr0#9`?6WbR%{F_ z1oOHb8zZ8PkWRh4?xM+;OrARV>Zv>&d{=a4|Iu(V7SgA{``6oxt4eoS$DG*;gda~k z#yXoba@3qBXXomx`e<481e@^J$Ms!x)j4~eeXA%%jSXqXL~DeYZ>OE>_k1@6_Dg`6 zdX{J~3Xz~H3&^JmKP!>XM1fs-GCD^4PkMdAU22fY=Bd-A^LyvjX$B*~$ zNCn-m|K$Uh4i~bMr(RQiJL147+R65Y_)IqdbED*43ra&3nhelLH0bi+7kH|K2FN;d zl^=41sb{9?3uz%J+!Z!Cv&Bd8R2l6)G|cN+mrh&Q8~rr?$x5;wdzy#i(>co;n_Om* zh02rU*wGSpCTee6?078M@#N_^p4yLUV4+)53x$qMZ$c)*_-QYMiC0hy%V9nRQTLpamEV7p|(AP4AI!?Q$mPw)^gnO?VD))={;GW1Pb--|WC zV?!JY3A}eTiec%ft zqN!o>P1V;okcRDUILUi^@r|K$m+mLy-E~3yJ0K=wl0Je z_Rj%f4AysdkGk!Ov5j)Q4agK)quVMNpnL;XcX6;iv)#%x?yCehpUO~sP-Nlds*T93 z(xc2eG(OV)(g{;zeX@r%1oM)g4&!?vwFefEdBn8zi18!Bg`>cC!sjnTi6_odmQJn@ zMqk!H8W@8xQY`6^BD)@QOLjrbt=6Lh>%Ka9_|=!Mt-hV8j#0|c5YrQkNq?`7ZbUUs zfVzP#z@O&!nRG&Y=uqJsl>ubHb@;s^2(|&`{1C%TNL2j+<2Bs7<4E*xY?1tXYHXTTGSeV{-AoZn@ zVB}acVtG<17)wRS*d=IMMu@Z0xr?y8v&G-(bZIY86yB0wA)2}Jz?>LTuG(9@sHu>0 zv=XUS_#(||=yiHx(Q|p&TlKU&0y2$_-~I zj#orLMDL1Q*6u~F$M=r7@cdD+m<_sk!&ybMW*3bjSmrOR*fv{(sAaqP#QB>|5 zebFT!s+NhhDr!X6J|0i7&4kh5Fa-e$eOlEO8#vH{Sl=Yk(gzuhcQq61ooFhAsfmDg zqxCpPdWhrWrMHB& z;g(~_h=@$^EG|zRH31!&T{L@HV7!aZ6|+~Yo6vtyB+v(=DgDN#6-oEGNI}j&cP34r zIB;F4Ub~$k;a%GqMriMj+mG&A5J75&)shQvk!(&yFwhx{l>~4eanjZSx1d3=1CjAc zjA0*vVqgQJ@t#lC*cNN$>?hU(T@s$S=9qLV05PT-%lVC$Y^tFSrKy$-tMxjrAJMrk zL;89%9eW5$huGR1YfLk2y?Cu4NZ_BIcSAHDut6H>9&urWW`p&_k)RyG?NJk=i4&I1 z)?d-YS+ms-U$SieP`7J?D!HaMdqX?ifn4s5#a{##a~-AA`uZmK)o zzIst~BX_>jys9T2k#B?>f?B68~vqAeZ$UITK!)3E~4DKHb;sBqs2b>=^E{D%zwEBiG zyNe94`oq-ACl72|zjf_)9wN+?p2&u5_OD)WV_3ai!^KSM=4q5li<(NqU^R5RUd-6+ z;0XE*{9>Y(9d=bf)$*zv{{*URb~&@sGS_Gl9J!!mSnU_9l3bz;hnzvI@i)v1NGC$zU$`9yB-N?UrVZRSHrG`-JxO8 zg4K&wZx6fMbyeDv52qqM&)HO4d{p8?Zp3-aRWrJWzM-8UE$*>h_0^I-WdTp{S&GwY zE5qhs!_@X^%E7UCs52B4QC@*nYmuqRwMZ_eufnL6>{+Ui~~-hOphz39g6yLYue zc=X{1)lW>u63^xA#9N)W1U$n(p_pL6`8vkJP;1p*z1HeXC;J(i8En+fJv#SaXg{;g zr)68$-zBmQ;_4{TCNe!o{nGSJpVBC^p^hfJr4F`+W%)&+D!e7oAm2;(9L(vo!{uoF zqW<5q1 z>%=d<9Hp5L0_L0U8y#lO*_}G^&?D7rtCebj*wq-@ZGvKlpI_{XVQ>lT?k< z)D?tjb)e4K+o#>H(s`ZS@hG#!>LpCYZqo(ZB73L>`xfeM%fuJ<>2{H&Oc{imtR?*h zcUi+)7(+Y0k2KsZ?DI%;Ug&R1$fy#L%ap3CZ^=nM)d-1tFv$t8&x-<>5Ad&gsR;sfIYP=OfsHMb`eK~ zzm+HKE&ZqVmKj@A$--H@*D*4|x3?UAop7HmZV?@^uT+&!={jSc#-ih32c{^!7vW>B z1Mx}Yh5gd_Lg79r^zSzi`VR(r{$rPP{3anG=<9QKD*YYy85m`q5c`Mq8;i$O!o&h^ z;z1N$kMlbAvdA9}+_!1Q%oznUW-i{Z8=M_|I8jGr=U=8 z=Q=34k_&%&@YnutvVkaC00SSCr%<>rE%1&(8Z&k9drBs$IWn)`e7Mik*F+0XbGB%LJ+T$llRmM-67cLwVT?nKD`VS1^ zbidDo>&c14et>D=NFW?J5c-MJ*#l2xpNGrrx6bl?%w6I6BI?W}h(_uA!htLE#?2U) zKO=w6*6Q64;uGWxiER-&{@ey<}f*HB;1xioHKsO_yC8)JhTJp7%(Uj*228sfOz8UND_i_ zBjCp4+4Nop_Zz654ME9}W7z}y(T&vD062e!XD>RDqmLt8X!No;{GGfoBR|ZH$4v@L z!o01~Eo-aktX{J?T+fuB$Ow#7gL5C^U<N`GfeLH@Xcd}MmYxanbLNm#NaEV%*57f07b*H=Gye>DQlojT6R zvz#R7uhgIAOsp1;ScYYeolCRhAfERHXG!Bf$9f@^VH=Eg-0jmcCCB^*4TuQc9KTH3 z#Ku~HtRnF-{t8!KI+C%UBe{j0(OTzALSIWh?&ZOx-v2NrpdsULSTbg4I4^q;|5@h^ z4CjHn!9M^`2)zNGzN8pF8&_F0`wm9A`VAO3fE-CyoE=7o>k^uNOh3eha7Nr=`jqC|w1h$};?mC4m zb`e3HifqsLEHz$5hZaf7Y>9AKL$^^}69d4&Qv#?(-6!lW04mRVkq)AW>n5WVfQ8V2 z*k=ekviksxt+S&nJGxXm={wr@>*N5JES+@Tm?7Civcr(<^RkCTsBr&*u@qz=kd6e~ zFC`KZ7p=Q5_40kv>#XdYkUctkbWSunHy%B3a2PPS-zKMZY`~%=;QL1O@_nPnO&=HX z3l^3)b@qhL(9zS`!Dk15wM!O%EiAri@%`1ehx-G>=1N_tYC{Gt4A4YtOaS!h7;BsG z6^X2WLG8_BB{^l`XuWR7#p$b3_zt?l-hS(noy;NQ0g+C3XsV$&mBGuJ3ZL#Ce4X~A z6uV1+jw?oZY@P9lMs4$rT5st;zA=0-Y01(XCY{$mI|A?k=KKvBl0B5qK?Ac4b1^wa zM7~7K@uk@tze8|+0J0+|S%b54M(2dlxubJIJv$532lgAtaHbx91G7K;Os_KAvI5HT z2A0Z?rq5WoxijwR?CnWC)!8G^L(`Ty^S*Y?;%lzI|MsosEJ?X)Y)rf~e9h0BEE`I~ z+F~fxnl<8*HEG9(+6x0=5#Vl| zz44CwG_-gCmx!!nWe3AI%!x+l=Z?>YRfOc947kpYa(WanI*J?EzHKG=T!oGT%BJbEaqJ+R-sO8O}V{4k^1v1tAB zt@+azuBrv>vwB56;f3&20QJ-ho$*sWolP}MCM}t{9#sj|>+iO%@D+}U&pg+O zM8Y$ILmh=P1eL(r-sg}soNS0z0_~EUL0_~MqP&Be2{)zEjp5||#V?ZXz4nqNu{_&k z+sq4pY4*fAY|(inO@L)T8~3d&_mSRiB*K0w(S=4L6VA&DiUhNBa)CEH#vbvIkQ4FB zrWFjr8neH1$DVM<&q?p06uj=k7)n@W@q^LpcOB;Hq?5d!OC4W32gS+bKN^kZq)yYv z$;2?R65%i3JWd8lo$X3vj2`TuMxd9Q#gr#>)|SkPw#-|(QEIYh3w=K^W{MPA#qL^ay%z{ zU>MYY;NaQc7v+D>bDlrG567wqB`bUI=s9~2f3I~{%dT*E|JE&6j=pkEm@#^c=s);6-|j%KEjSt2i2 zswWst;pmospsR;4xwWr*#+)}a;2MK~?I&O*D{)TlkTfDaIt&>Nz62pz0|#7uB{KfT z&r@%FXYc@AB5xND9JBp;az+5%8Mh)ZS%dX#c?$rg=r)uCi%;J? zA0-FYp43ZSsTW{!>Lu9B$170z^%$5tQ|L==$;`Ms5EyO^cRP)(22yXME;N*e*eluM z3NAvc+bu#0cW#_zzsO*1y%8gtui#}h2bmJ&YWZ7Oj%=2^j0F0^M(w{BE2LH!3~C-Tp`Y9<}H?^%$36TAC#3dYV^oJ zd@^9*;4xdT=Y}^eRbYR(egEP8)nU$+bGF=i=RK*{?+m#^vQZBMop&@Oee?X9j?OM| zIiMT*kA(N@sTbncLH_mVh3F|9Yg5V0@-4NYycXQIZn@j?RGE<-J`Ey)DkJFgQ}Ll~ zRs5mtYR4YE^u;W|Wq=#ewUmifGGOcToUEH8b+VHil)h-2erNmhDd%hsf@Q(4Xx_I9 zUfY_O(;I+d7eP-`V1P~M_gX5>%|fiRhzf@cLP7cuK)A6&Bmq zr{NFjVfk6f_u1%$-dAD>-x)oHba&J)DT&H!%cI&YwOj7IoAWbt^{&B0MU566p37ai zJwU_gEy4>O>!?yUHF!hWC~nAzw6c<;gh2e4D{DmCa{^--ES2vsuukxmtoW2T_bF-u z7U-DGC0HEa-ZN3T>H0l6SwVask~Ju2P)@)*_J{OfO`r|F{O9EkiE<-4i1Q1={4gWR z=NH*y?yBCpX!VV&7lqYK?ki=2aq7j^mhQtXtw(X3A@$5pwkt#RH^DwLZ*<;yqp$l; zxOLmYRZU$HFbi)Zd?bN+CA^+`<+w<1o)h3hPe<)cpbxd>X(3NdaFIqbkGGMF1d*)Ud!lQ|&CiYVXG8__S8d+e*x7ijtEVe4XwEgm z*M`+Ctu3t$p{13_RJFG35>XZGy~yjgnuEjrLk_d@45MKh4>&e6f83C9$VBMEJH7;- ziEET!j9xi~Rzuw+*y~C48ga|;k!46mXKiO(YoJ2aOq4CqAgiF0mjg_r@_WbR`2{D{ z7A=j&L=b$>klB7?K-n4rD&Y7Oc%Kq!kG|Pv4?WC0wNm2JXDS_EF}71&CAe$wEU;*6 zq-76eL)87g6k-S(fm9Go!(#e1#2~q&dm(MELmuz!Y&7Dg&cJ(%Qao^bF)RWz?0mZ@~zZ6b3)$C^4dnDY?nZP39TR;5$55Q z2&p&)eF;axQ%87D^>ze_bXllvs*O6EVDddSOia8XxggdM;!a#@XEilfY1dH*V{fJ) zVq5><6A&`OZ1`tvAUXFT%l|6VcC%<~Aw-dE(3ORGt^iYepe=TiBnWBmBW3WGQ`8z# z3u*v5A6y|%g1rYy1A10E2a=2IS^WoO<&Ksz&&Vw>#KWqvd1qH++||=-L~ooqX7rda zXM8c&*@Tu|RTT}b-BlI44!4HGQH!|#A}oJ0yx*OAhD9C_7XFxu^JdP+Y(##cCxCRP zg&{A*ubd$SNk5h9?dfPPSrV1ime+u=FwTgD@G@t^dBf=hXRXa})tsb7hwhY=DiXhi z2DXsP0%veR286BHY)G+>p(x2XC(G{ktaS0zc+WQi2w4kcozYqrs<2k&X*=&K-vSV8 zX_k3K=Cmcwllu$C>_K?Loa`K69}u!~a!2NabX*XlCZVyXv8$u4>kv2rb`P2`1FT1f zIbmAyTI8g(DivCwH}B|6tAym4&_XZr#ctH)KT~fXWzBOiUXRy7skh8n)k#^M;`j?a zX%Hv)d*yKp{?xITo*YyZlIpE3DUWMvYigTol~_SnQ0vH|K&QAA8_F2mN=_T$MRhHC z;}*4~-A+Og+Fk-W0bTHDG)?>aI+pt8tPydrpLd-MOnuX@_0o)6%&%W!XaH6-5!mmM zBB6PaG%=v_(GNnq6Ob7R8PNaYD7Ro_RB$scFYH7)z!-eny4o5I-_SLG%#6|ToWg07 zD_W~sRs(BsmB4K&bBT z#`Ec{=eyP!^98BBSaVLnQ4&VdDA6Fd;L%IM#0t5^X**H^x)e;UNab3Z06LgAv4Hip z)EnDS5P}XEuD2|`8O8e#3ebC7!8Rg}RXZDZHnw#L{hmWTZHGczx@!xgH*-eMoHLmV zO+y9b?lz7qz^+O?)1t@zhSZA?VTZJVwJaRp+K9boy#A+7yDQm#>nzPSecSLIeJR%1FSj*nXESY{a!+3l&Lt6bJ3y5n}k)@~a=E>kRAdEU9l zd}U4+`6nWiA=afqzF~X3D%#oDB{ew&)4SS$Jap}A+t;>v+)U68b0$rW3aeU*TS5hj zQc>E{S}I{lojM#^Q_m1-hwjvy;aPdn|Ktg$Z#`D4UZnRSld#$;t{BDW?eCdr1z8VI z9W>V|wuAn`B_++ZadT5>4oxxY(v(DlQV&JjMmGQe?nLD6CKCxHiP`{|U>EUB%JrF0 z)nPQ^+8T!u)0k03b%ASX6gLAU_+Xom0~cJ|OzXlozYQ&_)q4-!MT0_S__ z-VnVE$htT{c$_EyU5AbUZ_gp{Z3}2jM`-KVIeo^QyfAalVkD-pqP3#5qP3VPy=tmd zK6SjI0-Xu1-K`-0EVpMlC4s@C0<~^r`S;ZOcXb43zdDbe4Hx2y6^|tyO4pI!A-uLSB}5Cl%*I@+eVv z2u_Ty{t+p{FaVyTI6n%Fp({dcdfH+_80ijw`#Q=3ET1`M@wBM0l`y@vWdTCpO0Qmi zwiNG5q~0EW3-)K|Gyy&j(>Yb!fwDi9>BlQ=l6vX{s4Fg)%%_~=7QyJPnK9+&j`YEf z<_?ICxOaj1Hg!4wNYe&J1{A3{OBu;9uSfMPQdfARSdpqiK|z8XIOUDXS_?EXiPj1v zfy}c-GOA8faHSS-I)~ zn~6tssI4a)+84kTOyT&>>0-6SBNVoV3I#5ZIj7TR-Ov;h^BJ^8XhHk9K^i@E(1Vmz@4?V}pKv`?&68tW3d23hd6Z=&#r3}5=ie;k>z z3|}jQ#$qLA$`g%gSXf-v)Y`aU&~a(AIy#XuBLlJqEPB%B*e zbAKh!MKx7h)prHazLvjZy&J)G+o)+{$sXdFW=lErTo$`2hSWlaQ($DqQ&_2ItyuXA z17%KA4vxW5t;6%qkA{lUC#4Z&q2vw8pBSI(Q0A!ZNH|1S2fPmviHp-+Z8bB;g_%pz zg{Any*5cBZ!m6-n+F|0sXIkl5R?*vO=nl^Ym>gbAy)AWMEQ}$_1YgIx4_P5?vi!nH zkTq`zx(A!fHVEHT@3DgtirS{$Pjoh+pQy?OADQ5fH5L#Gt#ewe`huvuA2@)3#DYCM zbWSu_C?XM_S+zYOt;!eX`USCxMIG{Z7WuGVIO=MK*ObTMkz#cZ$4nCk2E8o=Ruo>SJJZ zR+1_YC%lZWu#|xTtu+jfCHQ$vq0S;=i))LL7z3JGr@bTH$tc2|%zhTzY_`1RPc5I9 z;3xT|v09wr0wGkXGuuH2M8VO}uHX&|gXtqqr^Ht#eB-`=((D1s4rUPUpITS};a4lLrHE@V@2X}8fascQLN3-?pt z5yk@eIZ=48;$I|I-MyDc^GgKI5{o57mH>noK0#m;f~O94)Rcv0V{k88K*ZJ&HEGTi z**#*lRa@@F$7OnPz=R;+*O~pn{0Nrz)X_1tdrJJGZanl0%r^vKGe(I@?9z|aJIu15>920&` zopDF3ymR@syO~a6H1u#42pt{*Fsi1?TS%69H)su1o?`$6=af|`XsuCewIJ4f6)jhN z1cy+HA-DviZb6dSTeOyrcqEab=ob^cKXqLvr)rU{*8$*G1ZgR!`5M?NFmU z)*--)+x7usSNY6&VQ)oYXH}^&_rJ->m1FsM&Fy5+U zzC@rGI$Ox)A;J*|9m<-qKu2$4f@2+>QBzR7aE}58G*3u6ffcA~w2E4pRfM4|;7Z}` z+UX};jNTSl^&tsLwl<-*(molqg;~a$LR4jIooFn(sYJ7;y}KJ#{!L33oY}sP_aA7C zA8jKYadGa*IF}K@g888!Ux??4`KYd?egfXE4bea`#C`nSK3>Rg*`%q}qU* z7nvW@K8h?lkl-e!UY8r|z0W2t3oF%M6IHb=e@37IQ!_{jbK48N3={k0H~It}Y^Bi6 zersq7d0A6~v0}M!w!W~~%(4X^!rs1F8`3uqqP3*sIP?ENhvKbmFq>H!nwTMK#{ivY zo^B{W4^s9ah}r?A24v@SPg~c%BXpIIv@NNAn2S71TT6>uBXn4(#w3<^m7+9N;jo^{ z$V@zL{_&&>jOGg*BaNnrSd^Bikoe&f#|E$MJ*Y2HlLldyV0LJ#Nq01Nrki%wmMemg zt_W2oCacCNJxosFob`qcIn`ZaF6|N0sy!(*W3BVh@&Erwwf3Z&@G+kmZJ_igumo%E zsBBRS@=K%Re7e4xY5{iB4ZYkbPr?un$lb4rg2kn4N#y<&TKgfXd79>5Vr^jaAHHz%jeuv4}-Ny7_3*9Cbw*m_Wo zuB@i1zOJeHU}%P_9nDQOO-eSv)ks`r+TEQt5e$gvcPhQWwU%~ahKsaM45O-SJJ*Z_ zsS{hY1tRMcWaL>uyK!U~0f>nNyB;qfx{8n%W~foHhrZiy6r>4Oe$W0+-%Ly`QBV&< z^9Oo~!$j4BUP%IT1`6_rW({Bl`k;c%^f5p@7F(5QI7VW}{@d!eJRDASx7-#=D;8A* z5mhOL<1JM@zVWTpv7=QjccD0MrQZ-s1+C%;d&wp&UX!2!J2)>lnZgFLJ2cJa6#Z|#Ae`T4TB(yM97BFmgn0XgGg2g}p z7;P0i39D_3wthmHPuT2Twy4vg->Y?~O*p)QnC0Zfj5@aJ_c9%-#TmY_ij)pLIfgul zHXyd<4@Cue`FzP6G=ONG}-&aEIRe2tnGK%kLt3tGc49wPDeA zBsgLQ%=YSsHNN!l_Xu=*!8`SPo7tkULt{&(2uk-#4a~{$cBE%tb12zRQx|ILn>u1( zZVEL`$U#SQ8aKyKAJEz)BkChmAgl0&WYCy(QdqsKzJ{#lCD~Irs>b@{buQr`B-k5F zL|yeGNCpv4NLyL2y**;F-z96@CX}b|w$6Q-V=H_$MdytfFt}Izon8>(*62{=O+^N-Op z{(I`#y{N+P({C`V#Z&^R^*GKu6gCS(2}#_X5xGwm$}$L&%_s7tY+?bAk-QA%7^-wM5%(nY zlYWN{5T#xsiB6X|m_7H5)1;cwEmoX+4tynmU`0AiY2iuL7GW&>_YO3g=vVy|g~86HAyg<>+bv zHU}W})}4$>pa{ocF5%ep`O^{KyeMB20rZzkoKPoN+Y~LR4?@5oIQO;T#m(Whp%jf} zTedzJJ-M4XT5qMI-Pbdt<#&%U_%C3i#~5>aiMg|xIYTzn5XPSMaN!(t9a!~0{J-bm zk><)!vT{RB^M=YA1frh7|4_rYMN>1bu9@iYy|7JI^qib?ZeyENhLz^&br19RyKC+T#||& zdH8-b0(fs)Os3&f_+5DZv98B`7N==}kNbFf5*fBQLfRmdJsvw4ju7vbOqUFAD65QX zD(llyhtOODc@c_G6UrBES;$P?)6~Lbm|)A5K^WjkEs|%qimg$3Hta;KK&)Zk6rm`3kZWK%1zouaCM%mmUpnN+ z1^6`yMBY%S+)r^t{;GIq-A+J6fYFJz`p{M{J_oRFYcj0CH)`8C^ZwN1|Azc-oilF9 z-FKy;yFzC#xn8|&eB!L~ky`dVxd3&-Ccy)+?yE1EUXtEWQ(04A1F)ftc@%J$$wF~W zSuOKBw=7hYX7v$zyl_*d4E|1w6{bSLG?;y~lrYs0aHr=e8^CG{}4A<^JKwQ5&?57 z)t!(=0B;18a&o*k@#=uUO>6+$j>hsWTW`2^e(sD_nrzW^D0P;9@Z-faH~VB6WRsV= z#>)8cc`6CadZUB;nm3G_PHYCOQe9|EauU@g5^iQbmJxSDZ5bH5^r}(`SQ^*VvIzr% zK$Rs6s=O{E6va)NY2fF8$^^lml3%B?O~uk}QM|8a)U++`$TC7AY4Hfcq@HigC&VNo z?pxc2#3*otW7EHN)}|MXiy>}50PYw1XL@UufQT}5@P`)EL*P0HT*pUS6R*Z5+ln7# z;!u7;x{L0!5bjF#_Mx0X+dd6fp-##d4oe(983kulxZ_A$s4p3Z5QhyV@rJl&Lrqk6 z9PI`F4drDkON8^?%nH)AHHxJSL5ZL>V@aqw7EV7fRzF#E7WR@3p}`st4Kj#%T;)~} zs(NH!LUR3%m)3g6LeVh$b7YI2b!4Hfb+U^s>pMg81z8Ng56HP#*~^i+Gw9ys<&W#7 zzmW%_xx!e0!|1RXp{U#ms!fX8Op*81?E`eZfi+9}jM6)s;>Ml1Gc++AkP}90DSQfZ zXLmY5_;C*$;)DA_^M>hMTo0M))j{YDc()Cq3}~Bbd!-b$Wdso7v7)rsh{{xT1JJZr z#Fi$Y6@Z{B>pOcGur_l+5uJy?1{2Wm4e&I2A)_#EDFx2_J_DVO;t72zt;ZwUM`IP< zlM|$G{WL!-M=CKgH(xPC!8rZJihJ>E`s+UwG^3rBJ1bAt)$faVwbjRUj%;I7U1ikR z6n55b&MnZC*+a^-9}-{D0{|3=F$9H{XC1Uma1d}_`3AHxFKTlUphCxmp<7zvNY&x7|Nwi0WuEg zKPaF1#G5NaUD)|}od6^r0KUq$x~4{!oA{^+JJ}_7TO<|&A%HQ%ULdk~h<1JU(3#$Y zNxq!k?UCqU*wYDg2fGg{25YHd2 z8nTKB++B@E#;ynf6_%!>LDWp0J=J?evpph!JOUH2%F=|opGgcv|dE5jP(Xd9o@>XQ&gRwyN&!pFMcV=M+sVR)h8cm zAsmsGrGfJn8@>ofeMug4rKw9TSC+xqm3#`~G&-3sD=*tpvW2!zu&O+wU;HBsO)y0) z)*@uo)g-bHJ0q$2B;`viNEJ$2)~_^OMA>l56o47O7luwo;UlVwp5BGidc8za^FIlS zZ*9xZg`g30?{Y_;$i?4)Vw4xre@)Bh<3dWzR6`HFF|Rb39g*V>N74tQeWAX&a$MfHyf8g1TuEC`uPj*^EquIe zGmaZCvv8(73+hN4%Cs-RW7Kp1ViXW)UMYjmsF`W!WD)r;U>#y*7aa=qsYG1?VY6d2 zdD@AH0%mBd)@!uGEBWtCpA$%>&RT1V%UMb_-9At!feZp_$OUhYsX zJ2ce{{f88+j8|2L4H2BH>#eM-uTxvEr|s9Vs;)*VPy<;v?<~mO%tVncFqQ9-ehNy{ zPU$BI3sZws!g++|PUZ&Nl#Cl1@^r_Ak}$mlUZ zIlf>l97QMHRZEx~HQfW51*kXZu^05>T}Wv^QIj61P*tK)J{(`32|$(ZVt>j4SF?$* zCa+^9$j|E>G(->=*ibi3n{a64alfvRBsb046%*Gpe^s<{RgCx9fCHC6rhyUY05V;< zlcl(_Cf>|Fg6O-Z>6?bGG>sY5M9M>I!6%OhwS5P1{B_OsmD7ht!ffUAaq}0>U$}Dq z%K7oam1#j%9+j1Y;X(k51lVcQNL5B)h;CLTmesb*br>9E1F4z;3uQ$nw)rPe7+?a# zoQ7}pay|i{jSQ%bi)b9tsHk6>QnF4YQ_{9Mz8BQFT&W(l) z#q+>O2a^__$LQj!m8(|b9X4zZl^c#%*2m=JVu1>dbQCLh)>Lk;U4S}e_h8d z9uky?;v+Ha>)i*B$w^l(40+;TMEn>5B`ut+!ovCGE6Y&D&7o`+OC@yQxpC7>RPiwY z)k$YqBwy@s03B>`-wbb5N%{0dDz(+xdID_*Liu2KJTi>S;(Hf-{PD-1%gsH1%%$gj zDgP^ZIbX{=Z`j1C7fhXW!PJ5a3&wplKmRM2FZsqlUV8cDjsI9M=klr7d}aDS4w+Xp zV%D4s=gk{3f5z;o^S(aiOP79i(--Dl_m#pQt}6O(>kI!|cJZQRb1xls%~b_ouNzmg zY2M7;9Zy#Ak-UtIo;ss&@$EuQynuKU{9 zJJx@9Q{ipjy5bwRFWUO;89%sj!qmF5?{4{e)lIine5?9jzID^R>$lx{b5q^T>qhOp zCHJl!KizuucmJjOfvV|0`j;yX-n#RvKfGnZ-CKWf$Jg(zE!&c;|Ir>i%xm_e&nWbN;{n;K=QJU)i_!8(;eAT~{5cDSdeN?d{K8p5FVv zezb08yeHMVyr=E@M;=(-w(n<8+;`376A#oM{{DB4cK_S)@Y&X;?gI~g>*qhc=g2R9`cT8^hpzayL$AzuYTulv?m5%3 z|H(tQ9zU}6 z|MS1N?b+yCzl;9)nP}VZe_r>$qdOYUp1$!v4!`*GUmQC5*Pou=_x-c)yz$u2Uy54Z z{9i|Yf9l%*ed?a>Uq|W3|9#zCk34hcCvTit|Hof$d;QGT-~VdI>!<(qwUZ})_2j8n zpR9Q0$?yK*@t*(l>!$af`j^}O@Vr3$-v7gWZ@&H? zM?QY~$#>s;`;FKC`u4xR`{u7c_*44}@1A-8&p-U=%~#)j>pwnt_koYzIr`pPfBNA4 ghu;75+aLV-^$-6Neemu(@4fft2Op;1|KRWc7aQ_HN&o-= literal 0 HcmV?d00001 diff --git a/makefile b/makefile index 929fd8e9..b7c3b5c5 100755 --- a/makefile +++ b/makefile @@ -306,7 +306,7 @@ vrstest.exe: vrstest.$(OBJ) $(16LIB) gfx.lib $(DOSLIB) palettec.exe: palettec.$(OBJ) $(16LIB) gfx.lib $(DOSLIB) palettel.exe: palettel.$(OBJ) $(16LIB) gfx.lib $(DOSLIB) palbomb.exe: palbomb.$(OBJ) $(16LIB) gfx.lib $(DOSLIB) -pcxtest2.exe: pcxtest2.$(OBJ) gfx.lib $(DOSLIB) +pcxtest2.exe: pcxtest2.$(OBJ) gfx.lib $(DOSLIB) $(16LIB) #planrpcx.exe: planrpcx.$(OBJ) gfx.lib maptest.exe: maptest.$(OBJ) 16_map.$(OBJ) 16_head.$(OBJ) gfx.lib $(DOSLIB) $(16LIB) fmemtest.exe: fmemtest.$(OBJ) diff --git a/src/lib/16_tdef.h b/src/lib/16_tdef.h index 083f2fc2..75ff0f24 100755 --- a/src/lib/16_tdef.h +++ b/src/lib/16_tdef.h @@ -207,6 +207,8 @@ typedef struct{ sword tileplayerposscreeny; /* player position on screen */ /* needed for scroll and map system to work accordingly */ } pagetileinfo_t; +#ifndef PAGET +#define PAGET typedef struct { nibble/*word*/ id; /* the Identification number of the page~ For layering~ */ byte far* data; /* the data for the page */ @@ -225,6 +227,7 @@ typedef struct { //TODO: find where they are used sword delta; // How much should we shift the page for smooth scrolling } page_t; +#endif //from 16_in //========================================================================== diff --git a/src/lib/16_vl.c b/src/lib/16_vl.c index df741a2b..1207c846 100755 --- a/src/lib/16_vl.c +++ b/src/lib/16_vl.c @@ -880,10 +880,10 @@ void modexPalSave(byte *palette) } -/*byte * +byte * modexNewPal() { byte *ptr; - ptr = mAlloc(PAL_SIZE); + ptr = malloc(PAL_SIZE); // handle errors if(!ptr) { @@ -891,7 +891,71 @@ modexNewPal() { } return ptr; -}*/ +} + +static struct pcxHeader { + byte id; + byte version; + byte encoding; + byte bpp; + word xmin; + word ymin; + word xmax; + word ymax; + word hres; + word vres; + byte pal16[48]; + byte res1; + word bpplane; + word palType; + word hScreenSize; + word vScreenSize; + byte padding[54]; +} head; + + +static void loadPcxStage1(FILE *file, bitmap_t *result) { + long bufSize; + int index; + byte count, val; + long int pos; + + /* read the header */ + fread(&head, sizeof(char), sizeof(struct pcxHeader), file); + + /* get the width and height */ + result->width = head.xmax - head.xmin + 1; + result->height = head.ymax - head.ymin + 1; + + /* make sure this is 8bpp */ + if(head.bpp != 8) { + printf("I only know how to handle 8bpp pcx files!\n"); + fclose(file); + exit(-2); + } +} + +void loadPcxPalette(FILE *file, bitmap_t *result) { + byte val; + int index; + + /* handle the palette */ + fseek(file, -769, SEEK_END); + val = fgetc(file); + result->palette = modexNewPal(); + if(head.version == 5 && val == 12) { + /* use the vga palette */ + for(index=0; !feof(file) && index < PAL_SIZE; index++) { + val = fgetc(file); + result->palette[index] = val >> 2; + } + } else { + /* use the 16 color palette */ + for(index=0; index<48; index++) { + result->palette[index] = head.pal16[index]; + } + } +} void @@ -920,6 +984,422 @@ modexLoadPalFile(byte *filename, byte *palette) { fclose(file); } +bitmap_t +bitmapLoadPcx(char *filename) { + FILE *file; + bitmap_t result; + long bufSize; + int index; + byte count, val; + + /* open the PCX file for reading */ + file = fopen(filename, "rb"); + if(!file) { + printf("Could not open %s for reading.\n", filename); + exit(-2); + } + + /* load the first part of the pcx file */ + loadPcxStage1(file, &result); + + /* allocate the buffer */ + bufSize = result.width * result.height; + result.data = malloc(bufSize); + if(!result.data) { + printf("Could not allocate memory for bitmap data."); + fclose(file); + exit(-1); + } + + /* read the buffer in */ + index = 0; + do { + /* get the run length and the value */ + count = fgetc(file); + if(0xC0 == (count & 0xC0)) { /* this is the run count */ + count &= 0x3f; + val = fgetc(file); + } else { + val = count; + count = 1; + } + + /* write the pixel the specified number of times */ + for(; count && index < bufSize; count--,index++) { + result.data[index] = val; + } + } while(index < bufSize); + + loadPcxPalette(file, &result); + + fclose(file); + + return result; +} + + +tileset_t +bitmapLoadPcxTiles(char *filename, word twidth, word theight) { + tileset_t ts; + FILE *file; + bitmap_t result; + int i; + + /* open the PCX file for reading */ + file = fopen(filename, "rb"); + if(!file) { + printf("Could not open %s for reading.\n", filename); + exit(-2); + } + + /* load the first part of the pcx file */ + loadPcxStage1(file, &result); + + /* get the number of tiles and set up the result structure */ + ts.twidth = twidth; + ts.theight = theight; + ts.ntiles = (result.width/twidth) * (result.height/theight); + ts.palette = result.palette; + + /* allocate the pixel storage for the tiles */ + ts.data = malloc(sizeof(byte*) * ts.ntiles); + ts.data[0] = malloc(sizeof(byte) * ts.ntiles * twidth * theight); + for(i=1; i < ts.ntiles; i++) { + ts.data[i] = ts.data[i-1] + twidth * theight; + } + + /* finish off the file */ + loadPcxPalette(file, &result); + + fclose(file); + + return ts; +} + +void +oldDrawBmp(byte far* page, int x, int y, bitmap_t *bmp, byte sprite) +{ + byte plane; + word px, py; + word offset; + + /* TODO Make this fast. It's SLOOOOOOW */ + for(plane=0; plane < 4; plane++) { + modexSelectPlane(PLANE(plane+x)); + for(px = plane; px < bmp->width; px+=4) { + offset=px; + for(py=0; pyheight; py++) { + if(!sprite || bmp->data[offset]) + page[PAGE_OFFSET(x+px, y+py)] = bmp->data[offset]; + offset+=bmp->width; + } + } + } +} + +//* normal versions *// +void +modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp) { + /* draw the region (the entire freakin bitmap) */ + modexDrawBmpRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); +} + +void +modexDrawBmpRegion(page_t *page, int x, int y, + int rx, int ry, int rw, int rh, bitmap_t *bmp) { + word poffset = (word)page->data + y*(page->width/4) + x/4; + byte *data = bmp->data;//+bmp->offset; + word bmpOffset = (word) data + ry * bmp->width + rx; + word width = rw; + word height = rh; + byte plane = 1 << ((byte) x & 0x03); + word scanCount = width/4 + (width%4 ? 1 :0); + word nextPageRow = page->width/4 - scanCount; + word nextBmpRow = (word) bmp->width - width; + word rowCounter=0; + byte planeCounter = 4; + + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + + MOV DX, SC_INDEX ; point at the map mask register + MOV AL, SC_MAPMASK ; + OUT DX, AL ; + + PLANE_LOOP: + MOV DX, SC_DATA ; select the current plane + MOV AL, plane ; + OUT DX, AL ; + + ;-- begin plane painting + MOV AX, height ; start the row counter + MOV rowCounter, AX ; + MOV DI, poffset ; go to the first pixel + MOV SI, bmpOffset ; go to the bmp pixel + ROW_LOOP: + MOV CX, width ; count the columns + SCAN_LOOP: + MOVSB ; copy the pixel + SUB CX, 3 ; we skip the next 3 + ADD SI, 3 ; skip the bmp pixels + LOOP SCAN_LOOP ; finish the scan + + MOV AX, nextPageRow + ADD DI, AX ; go to the next row on screen + MOV AX, nextBmpRow + ADD SI, AX ; go to the next row on bmp + + DEC rowCounter + JNZ ROW_LOOP ; do all the rows + ;-- end plane painting + MOV AL, plane ; advance to the next plane + SHL AL, 1 ; + AND AL, 0x0f ; mask the plane properly + MOV plane, AL ; store the plane + + INC bmpOffset ; start bmp at the right spot + + DEC planeCounter + JNZ PLANE_LOOP ; do all 4 planes + } +} + +void +modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp) { + /* draw the whole sprite */ + modexDrawSpriteRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); +} + +void +modexDrawSpriteRegion(page_t *page, int x, int y, + int rx, int ry, int rw, int rh, bitmap_t *bmp) { + word poffset = (word)page->data + y*(page->width/4) + x/4; + byte *data = bmp->data;//+bmp->offset; + word bmpOffset = (word) data + ry * bmp->width + rx; + word width = rw; + word height = rh; + byte plane = 1 << ((byte) x & 0x03); + word scanCount = width/4 + (width%4 ? 1 :0); + word nextPageRow = page->width/4 - scanCount; + word nextBmpRow = (word) bmp->width - width; + word rowCounter=0; + byte planeCounter = 4; + + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + + MOV DX, SC_INDEX ; point at the map mask register + MOV AL, SC_MAPMASK ; + OUT DX, AL ; + + PLANE_LOOP: + MOV DX, SC_DATA ; select the current plane + MOV AL, plane ; + OUT DX, AL ; + + ;-- begin plane painting + MOV AX, height ; start the row counter + MOV rowCounter, AX ; + MOV DI, poffset ; go to the first pixel + MOV SI, bmpOffset ; go to the bmp pixel + ROW_LOOP: + MOV CX, width ; count the columns + SCAN_LOOP: + LODSB + DEC SI + CMP AL, 0 + JNE DRAW_PIXEL ; draw non-zero pixels + + INC DI ; skip the transparent pixel + ADD SI, 1 + JMP NEXT_PIXEL + DRAW_PIXEL: + MOVSB ; copy the pixel + NEXT_PIXEL: + SUB CX, 3 ; we skip the next 3 + ADD SI, 3 ; skip the bmp pixels + LOOP SCAN_LOOP ; finish the scan + + MOV AX, nextPageRow + ADD DI, AX ; go to the next row on screen + MOV AX, nextBmpRow + ADD SI, AX ; go to the next row on bmp + + DEC rowCounter + JNZ ROW_LOOP ; do all the rows + ;-- end plane painting + + MOV AL, plane ; advance to the next plane + SHL AL, 1 ; + AND AL, 0x0f ; mask the plane properly + MOV plane, AL ; store the plane + + INC bmpOffset ; start bmp at the right spot + + DEC planeCounter + JNZ PLANE_LOOP ; do all 4 planes + } +} + +//* planar buffer versions *// +void +modexDrawBmpPBuf(page_t *page, int x, int y, planar_buf_t *bmp) { + /* draw the region (the entire freakin bitmap) */ + modexDrawBmpPBufRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); +} + +void +modexDrawBmpPBufRegion(page_t *page, int x, int y, + int rx, int ry, int rw, int rh, planar_buf_t *bmp) { + word poffset = (word) page->data + y*(page->width/4) + x/4; + byte *data = (byte *)bmp->plane[0]; + word bmpOffset = (word) data + ry * bmp->width + rx; + word width = rw; + word height = rh; + byte plane = 1 << ((byte) x & 0x03); + word scanCount = width/4 + (width%4 ? 1 :0); + word nextPageRow = page->width/4 - scanCount; + word nextBmpRow = (word) bmp->width - width; + word rowCounter=0; + byte planeCounter = 4; + + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + + MOV DX, SC_INDEX ; point at the map mask register + MOV AL, SC_MAPMASK ; + OUT DX, AL ; + + PLANE_LOOP: + MOV DX, SC_DATA ; select the current plane + MOV AL, plane ; + OUT DX, AL ; + + ;-- begin plane painting + MOV AX, height ; start the row counter + MOV rowCounter, AX ; + MOV DI, poffset ; go to the first pixel + MOV SI, bmpOffset ; go to the bmp pixel + ROW_LOOP: + MOV CX, width ; count the columns + SCAN_LOOP: + + + + + + + + + + MOVSB ; copy the pixel + + SUB CX, 3 ; we skip the next 3 + ADD SI, 3 ; skip the bmp pixels + LOOP SCAN_LOOP ; finish the scan + + MOV AX, nextPageRow + ADD DI, AX ; go to the next row on screen + MOV AX, nextBmpRow + ADD SI, AX ; go to the next row on bmp + + DEC rowCounter + JNZ ROW_LOOP ; do all the rows + ;-- end plane painting + + MOV AL, plane ; advance to the next plane + SHL AL, 1 ; + AND AL, 0x0f ; mask the plane properly + MOV plane, AL ; store the plane + + INC bmpOffset ; start bmp at the right spot + + DEC planeCounter + JNZ PLANE_LOOP ; do all 4 planes + } +} + +void +modexDrawSpritePBuf(page_t *page, int x, int y, planar_buf_t *bmp) { + /* draw the whole sprite */ + modexDrawSpritePBufRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp); +} + +void +modexDrawSpritePBufRegion(page_t *page, int x, int y, + int rx, int ry, int rw, int rh, planar_buf_t *bmp) { + word poffset = (word)page->data + y*(page->width/4) + x/4; + byte *data = (byte *)bmp->plane[0]; + word bmpOffset = (word) data + ry * bmp->width + rx; + word width = rw; + word height = rh; + byte plane = 1 << ((byte) x & 0x03); + word scanCount = width/4 + (width%4 ? 1 :0); + word nextPageRow = page->width/4 - scanCount; + word nextBmpRow = (word) bmp->width - width; + word rowCounter=0; + byte planeCounter = 4; + + __asm { + MOV AX, SCREEN_SEG ; go to the VGA memory + MOV ES, AX + + MOV DX, SC_INDEX ; point at the map mask register + MOV AL, SC_MAPMASK ; + OUT DX, AL ; + + PLANE_LOOP: + MOV DX, SC_DATA ; select the current plane + MOV AL, plane ; + OUT DX, AL ; + + ;-- begin plane painting + MOV AX, height ; start the row counter + MOV rowCounter, AX ; + MOV DI, poffset ; go to the first pixel + MOV SI, bmpOffset ; go to the bmp pixel + ROW_LOOP: + MOV CX, width ; count the columns + SCAN_LOOP: + LODSB + DEC SI + CMP AL, 0 + JNE DRAW_PIXEL ; draw non-zero pixels + + INC DI ; skip the transparent pixel + ADD SI, 1 + JMP NEXT_PIXEL + DRAW_PIXEL: + MOVSB ; copy the pixel + NEXT_PIXEL: + SUB CX, 3 ; we skip the next 3 + ADD SI, 3 ; skip the bmp pixels + LOOP SCAN_LOOP ; finish the scan + + MOV AX, nextPageRow + ADD DI, AX ; go to the next row on screen + MOV AX, nextBmpRow + ADD SI, AX ; go to the next row on bmp + + DEC rowCounter + JNZ ROW_LOOP ; do all the rows + ;-- end plane painting + + MOV AL, plane ; advance to the next plane + SHL AL, 1 ; + AND AL, 0x0f ; mask the plane properly + MOV plane, AL ; store the plane + + INC bmpOffset ; start bmp at the right spot + + DEC planeCounter + JNZ PLANE_LOOP ; do all 4 planes + } +} + #define COREPALSIZE 9//27 //3*9 void VLL_LoadPalFilewithoffset(const char *filename, byte *palette, word o, word palsize, global_game_variables_t *gvar) diff --git a/src/lib/16_vl.h b/src/lib/16_vl.h index 2390cf8d..0612a9bf 100755 --- a/src/lib/16_vl.h +++ b/src/lib/16_vl.h @@ -204,8 +204,21 @@ void modexFlashOff(word fade, byte *palette); /* palette loading and saving */ void VL_SetPalette (byte far *palette, video_t *v); void modexPalSave(byte *palette); -//byte *modexNewPal(); +byte *modexNewPal(); void modexLoadPalFile(char *filename, byte *palette); +static void loadPcxStage1(FILE *file, bitmap_t *result); +void loadPcxPalette(FILE *file, bitmap_t *result); +bitmap_t bitmapLoadPcx(char *filename); +tileset_t bitmapLoadPcxTiles(char *filename, word twidth, word theight); +void oldDrawBmp(byte far* page, int x, int y, bitmap_t *bmp, byte sprite); +void modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp); +void modexDrawBmpRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp); +void modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp); +void modexDrawSpriteRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp); +void modexDrawBmpPBuf(page_t *page, int x, int y, planar_buf_t *bmp); /*pbuf version*/ +void modexDrawBmpPBufRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, planar_buf_t *bmp); +void modexDrawSpritePBuf(page_t *page, int x, int y, planar_buf_t *bmp); +void modexDrawSpritePBufRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, planar_buf_t *bmp); void VL_LoadPalFile(const char *filename, byte *palette, global_game_variables_t *gvar); void VL_LoadPalFileCore(byte *palette, global_game_variables_t *gvar); void VL_SetCorePal(global_game_variables_t *gvar); diff --git a/src/pcxtest.c b/src/pcxtest.c index a29c6175..1c3aa9c9 100755 --- a/src/pcxtest.c +++ b/src/pcxtest.c @@ -24,8 +24,8 @@ #include #include #include "src/lib/16_vl.h" -#include "16/src/lib/bitmap.h" -#include "16/src/lib/16render.h" +//#include "16/modex16/bitmap.h" +//#include "16/modex16/16render.h" #include "src/lib/16_in.h" #include "src/lib/16_tail.h" @@ -64,7 +64,8 @@ void main() { } //0000 PCXBMP = bitmapLoadPcx("data/koishi~~.pcx"); - PCXBMP = bitmapLoadPcx("data/chikyuu.pcx", &gvar); +//0000 PCXBMP = bitmapLoadPcx("data/chikyuu.pcx"/*, &gvar*/); + PCXBMP = bitmapLoadPcx("data/maryai.pcx"); // PCXBMP = bitmapLoadPcx("data/koishi^^.pcx"); // PCXBMP = bitmapLoadPcx("16/PCX_LIB/chikyuu.pcx"); //---- p = planar_buf_from_bitmap(PCXBMPPTR); diff --git a/src/pcxtest2.c b/src/pcxtest2.c index 5dd8505f..dadb2c45 100755 --- a/src/pcxtest2.c +++ b/src/pcxtest2.c @@ -24,7 +24,7 @@ #include #include #include "src/lib/16_vl.h" -#include "16/src/lib/bitmap.h" +//#include "16/src/lib/bitmap.h" //----#include "src/lib/planar.h" static word far* clockw= (word far*) 0x046C; /* 18.2hz clock */ @@ -85,7 +85,8 @@ void main() { } //0000 bmp = bitmapLoadPcx("data/koishi~~.pcx"); - bmp = bitmapLoadPcx("data/chikyuu.pcx", &gvar); +//0000 bmp = bitmapLoadPcx("data/chikyuu.pcx"/*, &gvar*/); + bmp = bitmapLoadPcx("data/maryai.pcx"/*, &gvar*/); // bmp = bitmapLoadPcx("data/koishi^^.pcx"); // bmp = bitmapLoadPcx("16/PCX_LIB/chikyuu.pcx"); //---- p = planar_buf_from_bitmap(&bmp); diff --git a/src/scroll.c b/src/scroll.c index 10ef02fd..4eb61a3d 100755 --- a/src/scroll.c +++ b/src/scroll.c @@ -37,7 +37,7 @@ extern boolean pagenorendermap; unsigned int i; //#ifdef FADE static word paloffset=0; - byte *gvar.video.dpal; +//--00 byte *gvar.video.dpal; //#endif // byte *ptr; byte *mappalptr; -- 2.39.5