From d91977d23fc156cf7c42ff4dd2596cad1629c299 Mon Sep 17 00:00:00 2001 From: Plagman Date: Wed, 4 Oct 2006 09:54:25 +0000 Subject: [PATCH] VC project git-svn-id: https://svn.eduke32.com/eduke32@307 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/build/include/glbuild.h | 7 +- polymer/build/include/polymer.h | 7 +- polymer/build/include/polymost.h | 1 + polymer/build/src/baselayer.c | 2 +- polymer/build/src/engine.c | 4 +- polymer/build/src/glbuild.c | 15 + polymer/build/src/polymer.c | 109 +++- polymer/build/src/polymost.c | 2 +- polymer/build/src/winlayer.c | 2 +- polymer/polymer/polymer.sln | 20 + polymer/polymer/polymer.suo | Bin 0 -> 71680 bytes polymer/polymer/polymer.vcproj | 885 +++++++++++++++++++++++++++++++ 12 files changed, 1020 insertions(+), 34 deletions(-) create mode 100644 polymer/polymer/polymer.sln create mode 100644 polymer/polymer/polymer.suo create mode 100644 polymer/polymer/polymer.vcproj diff --git a/polymer/build/include/glbuild.h b/polymer/build/include/glbuild.h index 81bbf1f02..546207c4e 100644 --- a/polymer/build/include/glbuild.h +++ b/polymer/build/include/glbuild.h @@ -117,7 +117,12 @@ extern void (APIENTRY * bglVertexPointer)(GLint size, GLenum type, GLsizei strid extern void (APIENTRY * bglTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); extern void (APIENTRY * bglDrawArrays)(GLenum mode, GLint first, GLsizei count); extern void (APIENTRY * bglDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); - + +// Stencil Buffer +extern void (APIENTRY * bglClearStencil)(GLint s); +extern void (APIENTRY * bglStencilOp)(GLenum fail, GLenum zfail, GLenum zpass); +extern void (APIENTRY * bglStencilFunc)(GLenum func, GLint ref, GLuint mask); + #ifdef RENDERTYPEWIN // Windows extern HGLRC (WINAPI * bwglCreateContext)(HDC); diff --git a/polymer/build/include/polymer.h b/polymer/build/include/polymer.h index d21723430..152545d1f 100644 --- a/polymer/build/include/polymer.h +++ b/polymer/build/include/polymer.h @@ -30,7 +30,8 @@ typedef struct s_prsector { GLfloat floorcolor[4], ceilcolor[4]; GLuint floorglpic, ceilglpic; // elements - GLushort* indices; + GLushort* floorindices; + GLushort* ceilindices; short curindice; int indicescount; @@ -57,7 +58,7 @@ extern _prwall* prwalls[MAXWALLS]; int polymer_init(void); void polymer_glinit(void); void polymer_loadboard(void); -void polymer_drawrooms(long daposx, long daposy, long daposz, short daang, long dahoriz, short dacursectnum); +void polymer_drawrooms(long daposx, long daposy, long daposz, short daang, long dahoriz, short dacursectnum, int root); // SECTOR MANAGEMENT int polymer_initsector(short sectnum); int polymer_updatesector(short sectnum); @@ -66,7 +67,7 @@ void PR_CALLBACK polymer_tesserror(GLenum error); void PR_CALLBACK polymer_tessedgeflag(GLenum error); void PR_CALLBACK polymer_tessvertex(void* vertex, void* sector); int polymer_buildfloor(short sectnum); -void polymer_drawsector(long daposx, long daposy, long daposz, short daang, long dahoriz, short sectnum); +void polymer_drawsector(long daposx, long daposy, long daposz, short daang, long dahoriz, short sectnum, int root); // WALL MANAGEMENT int polymer_initwall(short wallnum); void polymer_updatewall(short wallnum); diff --git a/polymer/build/include/polymost.h b/polymer/build/include/polymost.h index dab711dd8..62aa0374c 100644 --- a/polymer/build/include/polymost.h +++ b/polymer/build/include/polymost.h @@ -36,5 +36,6 @@ typedef struct pthtyp_t pthtyp * gltexcache (long dapicnum, long dapalnum, long dameth); extern palette_t hictinting[MAXPALOOKUPS]; +extern float gtang; #endif // !_polymost_h_ diff --git a/polymer/build/src/baselayer.c b/polymer/build/src/baselayer.c index 65bdddd7b..a5309675f 100644 --- a/polymer/build/src/baselayer.c +++ b/polymer/build/src/baselayer.c @@ -34,7 +34,7 @@ static int osdfunc_setrendermode(const osdfuncparm_t *parm) char *modestrs[] = { "classic software", "polygonal flat-shaded software", - "polygonal textured software", "polygonal OpenGL", "blah" + "polygonal textured software", "polygonal OpenGL", "great justice" }; if (parm->numparms != 1) return OSDCMD_SHOWHELP; diff --git a/polymer/build/src/engine.c b/polymer/build/src/engine.c index 5597346ac..decc9e428 100644 --- a/polymer/build/src/engine.c +++ b/polymer/build/src/engine.c @@ -5683,7 +5683,9 @@ void drawrooms(long daposx, long daposy, long daposz, if (rendmode == 4) { - polymer_drawrooms(daposx, daposy, daposz, daang, dahoriz, dacursectnum); + polymer_glinit(); + polymer_drawrooms(daposx, daposy, daposz, daang, dahoriz, dacursectnum, 1); + bglDisable(GL_CULL_FACE); return; } diff --git a/polymer/build/src/glbuild.c b/polymer/build/src/glbuild.c index 4005897c0..c4fd23677 100644 --- a/polymer/build/src/glbuild.c +++ b/polymer/build/src/glbuild.c @@ -102,6 +102,11 @@ void (APIENTRY * bglTexCoordPointer)(GLint size, GLenum type, GLsizei stride, co void (APIENTRY * bglDrawArrays)(GLenum mode, GLint first, GLsizei count); void (APIENTRY * bglDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); +// Stencil Buffer +void (APIENTRY * bglClearStencil)(GLint s); +void (APIENTRY * bglStencilOp)(GLenum fail, GLenum zfail, GLenum zpass); +void (APIENTRY * bglStencilFunc)(GLenum func, GLint ref, GLuint mask); + #ifdef RENDERTYPEWIN // Windows HGLRC (WINAPI * bwglCreateContext)(HDC); @@ -271,6 +276,11 @@ int loadgldriver(const char *driver) bglDrawArrays = GETPROC("glDrawArrays"); bglDrawElements = GETPROC("glDrawElements"); + // Stencil Buffer + bglClearStencil = GETPROC("glClearStencil"); + bglStencilOp = GETPROC("glStencilOp"); + bglStencilFunc = GETPROC("glStencilFunc"); + loadglextensions(); if (err) unloadgldriver(); @@ -386,6 +396,11 @@ int unloadgldriver(void) bglTexCoordPointer = NULL; bglDrawElements = NULL; + // Stencil Buffer + bglClearStencil = NULL; + bglStencilOp = NULL; + bglStencilFunc = NULL; + #ifdef RENDERTYPEWIN bwglCreateContext = NULL; bwglDeleteContext = NULL; diff --git a/polymer/build/src/polymer.c b/polymer/build/src/polymer.c index 85ecfc26d..4fa2e4470 100644 --- a/polymer/build/src/polymer.c +++ b/polymer/build/src/polymer.c @@ -58,7 +58,8 @@ void polymer_glinit(void) bglGetFloatv(GL_PROJECTION_MATRIX, polymostprojmatrix); bglGetFloatv(GL_MODELVIEW_MATRIX, polymostmodelmatrix); bglClearColor(0.0f, 0.0f, 0.0f, 1.0f); - bglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + bglClearStencil(0); + bglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); bglViewport(0, 0, 1024, 768); // texturing @@ -93,6 +94,8 @@ void polymer_glinit(void) bglEnableClientState(GL_VERTEX_ARRAY); bglEnableClientState(GL_TEXTURE_COORD_ARRAY); + bglEnable(GL_CULL_FACE); + bglCullFace(GL_BACK); } void polymer_loadboard(void) @@ -118,18 +121,16 @@ void polymer_loadboard(void) if (pr_verbosity >= 1) OSD_Printf("PR : Board loaded.\n"); } -void polymer_drawrooms(long daposx, long daposy, long daposz, short daang, long dahoriz, short dacursectnum) +void polymer_drawrooms(long daposx, long daposy, long daposz, short daang, long dahoriz, short dacursectnum, int root) { int i; if (pr_verbosity >= 3) OSD_Printf("PR : Drawing rooms...\n"); - polymer_glinit(); - i = 0; while (i < numsectors) { - polymer_drawsector(daposx, daposy, daposz, daang, dahoriz, i); + polymer_drawsector(daposx, daposy, daposz, daang, dahoriz, i, 0); i++; } @@ -169,7 +170,7 @@ int polymer_initsector(short sectnum) return (0); } - s->indices = NULL; + s->floorindices = s->ceilindices = NULL; prsectors[sectnum] = s; @@ -347,9 +348,10 @@ void PR_CALLBACK polymer_tessvertex(void* vertex, void* sector) { if (pr_verbosity >= 2) OSD_Printf("PR : Indice overflow, extending the indices list... !\n"); s->indicescount++; - s->indices = realloc(s->indices, s->indicescount * sizeof(GLushort)); + s->floorindices = realloc(s->floorindices, s->indicescount * sizeof(GLushort)); + s->ceilindices = realloc(s->ceilindices, s->indicescount * sizeof(GLushort)); } - s->indices[s->curindice] = (int)vertex; + s->ceilindices[s->curindice] = (int)vertex; s->curindice++; } int polymer_buildfloor(short sectnum) @@ -366,10 +368,11 @@ int polymer_buildfloor(short sectnum) if (s == NULL) return (-1); - if (s->indices == NULL) + if (s->floorindices == NULL) { s->indicescount = (sec->wallnum - 2) * 3; - s->indices = calloc(s->indicescount, sizeof(GLushort)); + s->floorindices = calloc(s->indicescount, sizeof(GLushort)); + s->ceilindices = calloc(s->indicescount, sizeof(GLushort)); } s->curindice = 0; @@ -398,17 +401,25 @@ int polymer_buildfloor(short sectnum) gluTessEndContour(prtess); gluTessEndPolygon(prtess); + i = 0; + while (i < s->indicescount) + { + s->floorindices[s->indicescount - i - 1] = s->ceilindices[i]; + + i++; + } + if (pr_verbosity >= 2) OSD_Printf("PR : Tesselated floor of sector %i.\n", sectnum); return (1); } -void polymer_drawsector(long daposx, long daposy, long daposz, short daang, long dahoriz, short sectnum) +void polymer_drawsector(long daposx, long daposy, long daposz, short daang, long dahoriz, short sectnum, int root) { sectortype *sec, *nextsec; walltype *wal; _prsector* s; - float ang, horizang; + float ang, horizang, tiltang; double pos[3]; int i; long zdiff; @@ -425,7 +436,7 @@ void polymer_drawsector(long daposx, long daposy, long daposz, sh polymer_updatesector(sectnum); polymer_buildfloor(sectnum); } - else if (prsectors[sectnum]->invalidate) + else if (prsectors[sectnum]->invalidate || 0) { if (pr_verbosity >= 2) OSD_Printf("PR : Sector %i invalidated. Tesselating...\n", sectnum); polymer_updatesector(sectnum); @@ -442,6 +453,7 @@ void polymer_drawsector(long daposx, long daposy, long daposz, sh ang = (float)(daang) / (2048.0f / 360.0f); horizang = (float)(100 - dahoriz) / (256.0f / 90.0f); + tiltang = (gtang * 90.0f); pos[0] = -daposy; pos[1] = daposz; @@ -452,26 +464,69 @@ void polymer_drawsector(long daposx, long daposy, long daposz, sh bglRotatef(horizang, 1.0f, 0.0f, 0.0f); bglRotatef(ang, 0.0f, 1.0f, 0.0f); + bglRotatef(tiltang, 0.0f, 0.0f, -1.0f); bglScalef(1.0f, 1.0f / 16.0f, 1.0f); bglTranslatef(pos[0], pos[1], pos[2]); - bglEnable(GL_TEXTURE_2D); // floor - bglBindTexture(GL_TEXTURE_2D, s->floorglpic); - bglColor4f(s->floorcolor[0], s->floorcolor[1], s->floorcolor[2], s->floorcolor[3]); - bglVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), s->floorbuffer); - bglTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), &s->floorbuffer[3]); - bglDrawElements(GL_TRIANGLES, s->indicescount, GL_UNSIGNED_SHORT, s->indices); + if (!(sec->floorstat & 1)) + { + if (root) + { + bglDisable(GL_TEXTURE_2D); + bglColorMask(0, 0, 0, 0); + bglEnable(GL_STENCIL_TEST); + + bglStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + bglStencilFunc(GL_ALWAYS, 1, 1); + + bglVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), s->floorbuffer); + bglTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), &s->floorbuffer[3]); + bglDrawElements(GL_TRIANGLES, s->indicescount, GL_UNSIGNED_SHORT, s->floorindices); + + bglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + bglStencilFunc(GL_EQUAL, 1, 1); + bglColorMask(1, 1, 1, 1); + bglEnable(GL_TEXTURE_2D); + + //bglDepthMask(0); + polymer_drawrooms(daposx, daposy, daposz - ((daposz - sec->floorz) * 2), daang, dahoriz, sectnum, 0); + //bglDepthMask(1); + + bglDisable(GL_STENCIL_TEST); + bglEnable(GL_BLEND); + bglBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + + bglBindTexture(GL_TEXTURE_2D, s->floorglpic); + bglColor4f(s->floorcolor[0], s->floorcolor[1], s->floorcolor[2], 0.5f); + bglVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), s->floorbuffer); + bglTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), &s->floorbuffer[3]); + bglDrawElements(GL_TRIANGLES, s->indicescount, GL_UNSIGNED_SHORT, s->floorindices); + + bglDisable(GL_BLEND); + } + else + { + bglBindTexture(GL_TEXTURE_2D, s->floorglpic); + bglColor4f(s->floorcolor[0], s->floorcolor[1], s->floorcolor[2], s->floorcolor[3]); + bglVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), s->floorbuffer); + bglTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), &s->floorbuffer[3]); + bglDrawElements(GL_TRIANGLES, s->indicescount, GL_UNSIGNED_SHORT, s->floorindices); + } + } // ceiling - bglBindTexture(GL_TEXTURE_2D, s->ceilglpic); - bglColor4f(s->ceilcolor[0], s->ceilcolor[1], s->ceilcolor[2], s->ceilcolor[3]); - bglVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), s->ceilbuffer); - bglTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), &s->ceilbuffer[3]); - bglDrawElements(GL_TRIANGLES, s->indicescount, GL_UNSIGNED_SHORT, s->indices); + if (!(sec->ceilingstat & 1)) + { + bglBindTexture(GL_TEXTURE_2D, s->ceilglpic); + bglColor4f(s->ceilcolor[0], s->ceilcolor[1], s->ceilcolor[2], s->ceilcolor[3]); + bglVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), s->ceilbuffer); + bglTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), &s->ceilbuffer[3]); + bglDrawElements(GL_TRIANGLES, s->indicescount, GL_UNSIGNED_SHORT, s->ceilindices); + } // walls i = 0; @@ -632,7 +687,8 @@ void polymer_updatewall(short wallnum) i++; } - w->underover |= 1; + if (!((sec->floorstat & 1) && (nsec->floorstat & 1))) + w->underover |= 1; } if (((s->ceilbuffer[((wallnum - sec->wallptr) * 5) + 1] != ns->ceilbuffer[((nnwallnum - nsec->wallptr) * 5) + 1]) || @@ -680,7 +736,8 @@ void polymer_updatewall(short wallnum) i++; } - w->underover |= 2; + if (!((sec->ceilingstat & 1) && (nsec->ceilingstat & 1))) + w->underover |= 2; } } diff --git a/polymer/build/src/polymost.c b/polymer/build/src/polymost.c index a0cbefbfd..01a142004 100644 --- a/polymer/build/src/polymost.c +++ b/polymer/build/src/polymost.c @@ -101,7 +101,7 @@ static double dxb1[MAXWALLSB], dxb2[MAXWALLSB]; static double gyxscale, gxyaspect, gviewxrange, ghalfx, grhalfxdown10, grhalfxdown10x, ghoriz; static double gcosang, gsinang, gcosang2, gsinang2; static double gchang, gshang, gctang, gstang, gvisibility; -static float gtang = 0.0; +float gtang = 0.0; double guo, gux, guy; //Screen-based texture mapping parameters double gvo, gvx, gvy; double gdo, gdx, gdy; diff --git a/polymer/build/src/winlayer.c b/polymer/build/src/winlayer.c index 455ed703d..b2a5bd2c0 100644 --- a/polymer/build/src/winlayer.c +++ b/polymer/build/src/winlayer.c @@ -2733,7 +2733,7 @@ static int SetupOpenGL(int width, int height, int bitspp) 0, //No Accumulation Buffer 0,0,0,0, //Accumulation Bits Ignored 32, //16/24/32 Z-Buffer depth - 0, //No Stencil Buffer + 1, //No Stencil Buffer 0, //No Auxiliary Buffer PFD_MAIN_PLANE, //Main Drawing Layer 0, //Reserved diff --git a/polymer/polymer/polymer.sln b/polymer/polymer/polymer.sln new file mode 100644 index 000000000..861a726e9 --- /dev/null +++ b/polymer/polymer/polymer.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymer", "polymer.vcproj", "{6D68F889-28E5-49C1-A23B-448285B092A5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6D68F889-28E5-49C1-A23B-448285B092A5}.Debug|Win32.ActiveCfg = Debug|Win32 + {6D68F889-28E5-49C1-A23B-448285B092A5}.Debug|Win32.Build.0 = Debug|Win32 + {6D68F889-28E5-49C1-A23B-448285B092A5}.Release|Win32.ActiveCfg = Release|Win32 + {6D68F889-28E5-49C1-A23B-448285B092A5}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/polymer/polymer/polymer.suo b/polymer/polymer/polymer.suo new file mode 100644 index 0000000000000000000000000000000000000000..e1e9d0f2732e07c92a999da6cd5cb3288d0a845e GIT binary patch literal 71680 zcmeIb1)v>8*0p^igy8Nl+=PS#BE%rULllC$3>IR97$mq1ZiBl+a2VW~!JUCY2N`B? z7{g_JkpFqkS`pSLsvwXKs%xfpo^eA(N1V*vLEX6WYV?&y~2cIaqyb#z;F zBXoOo2Xsf&ym!VMYbU)O*_K#f~dk}gsdIm8~j6skJt=FccU8Q+5+o}C#M)Plmul-9IKyJHn)<*Hqe7B`Md(#?r=hO7^cK^Cr zIR57BXJ1upCk@qOX&3`+uSNgY-(%Jq7mh+b_oi9&fBW!~sByv=unc-U>OMvPw+)^U zuIT^9k`>Vos4>8}VZZBy7X9D2vkE#R{olU025SE|4%rv%|LdZC(e+UKzp4g`@iWJ8;t?>Bx8uNqGA8n?=bkMZ`pgmzs9Y)(dmb6 zb;@o>4ZQ+trsT8!bIp{0LudQK_YwEEoebnG??{bIpq36GO4^sE{ycR~EvKeti7_3| zOaE#)YEf+zWf)3X>KIW*Q!ab-jEHU&tU>>qn{>=u zsU|v|KfRhUrlZOL(jCSbb;K~`@-c75wn@}MQ<10}`OiZ-wcKYc|6TFF$w?8?RQ|v}Ex={KKzE59(GJENZ8GXEG8 zvaQ+R{IASk#L2h`bsksd|3d;VqHP-R?!PhhKek%Sj(kID3yyz#es^u)tj#gQS)Aj> zL0sVtK>N^I`tWact_pi#2Xgh-1&`HfE!{!u!S-Z!C)bPZ`mD<5Zg})y>#AH0b)_%w zR~>Qd^WC&M`jm6ERvIr`t##_#x;k&2on>3II!m3MDR$+0Zv=Ji2=8^y!PRljh*q@m zT0a{}s~-jH{H54p{ZB3Q|7Jzo(@yO%HDjB4I{|J}#<)Fb0nU{g_VH~vU(=JevoQWI zOQJ=5?N4o37n7=Uuo1L{hNWn_1YG}BuW>x489n~;_*+CdSM~Qldh~`4da~G)<0@1tFtF1k7j<#G@f4NoTX?(9jD-SWL<0o*Q?{Jt!`*_PBZ+w zm|Kf$_2cZcYG_vaU%CCSPYH)t^Bzx|A4_Ql(FbgM_JSG8znSgXb;()jf16fg-`HwB zSy!Vct(N5rMYaBgqB6ddmeQj^oU7I^hSJzxE zL%}y?>)7~bFIW(JzE_m>S35gW2VS*~;NSk}Fe1Y+JY5wU!so`Wvt7aR3U@eZHJl~y zR*kQYIzyRLdRDtuS4@pq>rA8PG?m_1)-y&X4Oe=%nnsyMP?~+H(GiUvs8tk#-N$GPWlYJMDlC*^pzB(*iBky^RV ziYv9+dG&g>RvK5OjJl1Lro4Z{b2yClF^*W}Y@l}bY`!zn8j6zCW*B2>AFeT5N0X}Q zjZMj1ADgv$D$bh`!**d?^$L4t>Z$(NYx^(5{?m%Z^}bWL_2Kjw*KLM>*Ft-c(x6$W zamR(Bv`OPaarWz~rJDZPE9!g_bup3BxR&CK&Us($_`G79J+nXK%>00kP(%%oTMsidw1XYvpi#dXt$*W9nGqQG4C!Y_683*H^RB zqKtO?(OaCE){d|@Da}fYYIvlcIalbXb>`}8rGCY+u~=?@^ZMvw=2OO%hF7$cDs|QV zJ{-Fx$FVp6Y9po0P zz1d=1vDG_ww&&F1LT%-KjcG*m#*Vc%&g{bewKKR9$2cozaLTq|t@lJdqm4!3ru)kt z9CfiW?3`scj<+GR3w?cm?k|j_rY3w>dhbP?NzK;sbk12@op$oze5?hwB|1kw&xvh~ z&V|m6&Vzc*pzr+H1<(c2h0ul3MbJgj#n8pkCD0|&rO>6(Wzc2O<kx?#JcJ2czqw8=$TgZHR7!Zj5e%Zi;S(ZjNq&Zi#M%ZjEk(Zi|}t z_ShZJpQ1a4+Znq{@KEe-=&*bqfgOpCLU#|h2X+iP79EFgo4KCj9K=FQ&)@By>y@1XAx-7KYR#p|zubRswmcr5s~OGT`2UrQ#z<57yN)qE z@%U}fUC|lM-!^<;j^FfO^bhhXY8$h?{|;4NM~im%MwO{l-VJAadN15x!uj#9;XVnc z->2ce4Clwch5L6n+r@vveG|@)#YuI1vMlyb$0@~eDe${BEyo`@57DtjaXbmEjw^DG zC35<$o{f$Tfz>fWKgR?){fzyJ@jkE`_vMW9a{3w16=Qf{WpseCTd1G$S}{fkR>v;6 z!@}9V56{MvN`5DYJ0qO86wVBHNy%?Acre?p45!O4{DTzh{L2&gwn4q}DX-f<0PzyK zcmv)T>Bf z@;bNCjEZnSJC5j=jED}hjb=1EoAte9^P!-lZ#=b(Tuz+pv;bp&LkIO zQll9alY-fi(S>tY+k$h4Vm{;?atYM%+yPaL|0|(#R;YFnv^lB_L2F}w?YSVYpKDJL zcK`1BZ)JQMyZW7(wUYYySzE<5dT!cz!gZKxnY4<>WBC-H<#R5rc#bT)VPgPlbKeA2 zI-*6@)}nIlnZM!i?sFij9E~1SMU~1a*do1~!S<^=vdy$k3%)1T@ON);G2V~mv+-Z? zdQY*Az3x+r@!kmSHJ{?xuk=H`=JR7Q-kb06Yk|0E~PJnF#HT8(Xb9iaBK z!amjY4QuPl2cB9BQ!Rhl?>U;D%u4>(kmzKW%#fz?FQRnKv+=*= zUwxk1xM3YM?lmRr8tGweYTWk^W2@cr(`rSffmf5QQ<@EKHj0hLp>M8)p2 z6{?Iti|r$;Os&jvM(c~vbJ2@YIV+(!mIuPM!#;#652N~dRv$qXSF7ago32_Z#cXs( zu&Y+e&*HZc_^@zZ5eNsOM})g498~4raK8z+DBLsQ-Uzo8C9eDK-hk_|gVB(6hykI_3nyHh5Q(>wVyzZz;9 z6S!({wYWBy?@L-U)1qtl*6P=bYpKjfDnn+mM72AowKeDBzRkL%xBfKJE3cF_yz90f z_3qvIDes$hCAG#za-VlDr&iqI@N5pFb^3&dV})(9e$Bs9c{6R|k7*OmH2xIspW&b? z{|fi-aJJ+BgqxFSE?fj{oyfjoIQz=YEox8D--^{wu5-)U(`8+;a`U3=wW>W)wkcN5 zHrtP3-O;5#R!+P+2{`9G8C!6VKyU$Dc@!(hM7#1>xW~h}@BVYw@;wP#?E4F_^2>0R z?`I3vM)Orp@_DQelMc>yc}!ZziGgAWcJI)s$A@({mmM@(mWJ zN*nasaPv@Ya^28*twN+jIOjVZ!)+YS^`1?_9UabnjtO^CxP{?P4tILV?~HKghg$-_ z3&LGe@|zs)>TuT1HQ}x=`P~ri_Hd3qcZB<8$?sR;9tyVr)I7zDa9G^;5kV_YStGPw1&+_T0rbF8*`ajRxv!EtRv`F5EoW?X#g6 z=bglj4_C}t{J4L(!?0H1%IM*!ax$7qtzN;%ZI!raOWGQ&92w5mb5yuyiIr{On%jwy zHsM^MYa7nh?IMp(;f%L(_L5%UC9$i8(`DUoeM{U%;WjRDn}ypv+`R0&4cN1`ZHe14 z+)m*zm0|ob-{B>0T)6S!Y&m;_wTFgtWwQ%dIXayAo)0$P3rgJNaF>Q#mhH!Ym0yK( zu6a+m_re+TKL(rEXW=aC`|9EE&!+yVSHP zc9n4b!T&H(WO%st;1OVD&v13%y}}(H&h#zz-VXO^IQN}{@z{M^Wn6YF`z(HQg{y;`8>}o9&Pcm-xDMg0tB&D1hck~=!1j}F z;ly3yw{FR=A9zi+^$*t-+&6xkg>xRVdAL#G9Bp$DZR|h^1 z+!uR(iMtSN*)IuazBhuMLEKd0+LM?uwIkN@v8i(4+_ilV!WLzoK=AcACSnWjBCyAC zNr}4=TnBeciF+V^50<#!g?p{Uy&dko68Fb&e=2cbfGx}4OI#fXXj$4~i}G~`>(?us z^T%P}j@S_;zj0vqolxR_26o@WOWY0dyQ#$88@~ri+?(-xyTpAO?u!z)0258~T?kv0 zc@c0IxW!7`u3*bDES$%2I@selv*dRn*z_(A=ehg@T!;O##C<-0?Hc$?toiEKoPo3r zwiUMEb^zDG?HG=tSB8SkV_3;=Z2Tsa{PqL4#c%&`_UQxTcThO z6wZ841)JV!CGH|{HSUHpy=%bkdu_?@ruf}l^1Bt>1;5)%es_V*dxos`-$?pKLSAqwJ^LY1*-%%yM zQ@{?lmxQyg9v#2!*~zjvhugsfkc+VOR|L~~60+&_^V(Wf@ih7{QoUu^M*lSRqSnNU ztx?X}?|>>jQ8_OcdZEf1sGKtZXD7-~RL=c&LzVHUTvv1gsvL;Q4L}bgLtE7D)f|Q`xZA+nvF*-qbjr%F!Pe7LCBJ9D^TWMb;@*ni+u_{z6`F`G zVbCy0l-2UO*=YVhrhBNwH4Ys%4 z7|ynFQ2cHQXTGb!&Bj23)d3vuVB;tIGpMIK7L=8{F>urduxI9&^w@ii{HHA zoK4MVVn~N@;*Q}ug|n_YhZ~ofmVV<6dB`E*EMGfjI-RiXGviqb{ImEKGcEn@V!P+% z?)a??z7?#Dr=jF@RcAVK6T|5@$%cd+AI|i)Vb)*~_sHx)ZZwU>Xt5X8^xS?W4aDMH zkCn5Yf1dPiOmyrFcXOiS@54b={s6X*e-_S2^IJ~tM%b6Irsuw&XWx-T$@=Ky-GW(p zj(6%O#;1G|e(1m}_9xTtYD}!y6D*Mt!1Y1L3$YxPR6TOB^9U`Sw2Cp`-F;mFys8AU z23Mj!<=6Q4pZsR+^u+sr)<+@J^LP6`=wTKO*@pWBTM-F;e$=-e>|cFGd?L>Xc^_g# z&8dmM=D!NtXD0t6@wY80O&x!aYP78RP3y1u*Rj#qWEn8imBaCPHeOBV-*dWY74_c^ z&l$~sGQM}(JgOpatS?5b!C*Nf#0IG187p?!x60JsFeA4KT5YUYYgW!EbQG!_j~3j| zt4#eG*bqLS67J0Snde#I&JVXK_JVL1hck~$!d)J2TkI9#t_im*_S$eahci0g67Dk! zXZe)R1HK5yRHO1`xMs9ip?$7-TJPN9j2e!Nmc1Am=K$Bi*)P3s;J$6qdBDor;W~oX z2{$mD=VMT~jl(%5+9cd~Z0&5SSAAz^EDn1%} z40lrS z1pO5K4E-Ga0{s&G8~S(DI`}8{U+BNlRjAMZVq0Oq#(sl-i`pb7X(Lm%pBeiG@wDdO z)%N0_Fb{{yXq_0=i%WzIO|VNI8A)$DD#L!?rT7>%8cajqoeN zEzt?D}Kd2 zp3T_q{SwpOJ=U_E0q%i4v&8A+ajd;;?e5?@SUII1*h3l+&TB+0QgbxFzn;uI)gt1+p0ecXB)Z|to$RK_@7|Q^6zlw@hy0D?A*)M%DfPG zHShpzpKyzS|AU{hZa8sYu<7*+XL^T$t-B+_bpiJWE0=^5PY!owI6qz$?ziFedkJhF zuY~Ihel>odmi#`8-xuLl!|!kLTk+mU@w*_L?fSy_T~qSA zHh$NIGp1Z0zgtRvx5n@GaQ62*;`hsv->>3#Z#e7aaqueGC&Jkmo&+1WejTna_&%`m z+i>ESz}52`&U9Xl-y0>rH{APN-^t<3<1FwT*ek*6M$bXdMbAUeM=wAxL@z=wMtwGZGI}ZMY|~lh73h`d zRp`~|HR!dd-&MN~y&iQI>g@9-^k(!H^j7pX^mgaO51|jEkD!mDkD(s_6Ih>(`Zf9#`ZW3*)ETX_S$&?zzJNNDbq4zq`ZD?o`YQT6 z^fmPN=pWG6(KpaH(YMgI(Ra{y(f82z(LbVpLjR2Z1^p}f0s0~O5&ALu3HmAe8TvW; z1^OlWH}vml_4*I%6Py1=|AYP){R;gW{RaIOtu~{|DYOOUj)(+nmcI%hCet!8v{UCi~7C4yrOA*nJlYXWU*EY%FOL&OWs;Sm_#0yb9QTyN7e% zHNkUW*A3_OM^CV_Svc|LVE5fJoJHFzexpl%d&F;SxKr^P7r%o`euu>G&~TRJDDYC) zqr-_011lGX6JG?jESH3<15b|MttG$P;&(^5-uT@azeh@bkH+uulHU{Yd#U92a{OKm zw+ZR}E`A@D{631`C*hpqe;Pk;dw718W?+w_ML7Lhf|bQeev8L%$#7l+Efv3xCBK#8 z*C|{t{5r>PWXW$-{6>ef{p|_19UK$R_`U~Nc`=;$x8Yt3w>I4G!>vq%_t;vZy})x~ z*9m9ZUBLFO{Yu>aV27gP!#O^80xKtl6Q2yWu1*bS+c+(L*OmOPkKc_YznkLsRLSq@ z_&pQOx&E{9`)kSXgZOCga69@9o4KSu31vXzg&f zQHa9tcCg2LXE?7<@3N4{DwBqAwe*~8{T@!~9!}f?Y#zPBx$jnB z_uaX~?GtX_5_c|mF8t05=QZD|VCBki1He~@yDi*6xZA_M5YBx63pU^432wPA{4tNN zSnEY@UH<6TH=OytnDjOXXa5+YGqQO&@fKi@cdKy5oNd9L(-GmE=KE$?Wsh*;F<|!{ z7tZa_X%?A%2?-9=}N<=$=&zn_~~*Rf9y|>gmby!7B?V1Enc+AC&T>)%LL+E zx7*k6V&_)ad$GlNT8N7m(^(8F=e5FhW`eX0C-44uWdC24_Fn)Wvs9=M8}vYvH}$%XUv&HfE1i~MJo*HRPtL5?78h7ZeH-S;PtW3h4Z+4Msz3a z^4KDeW7*FCO7YC5WAa$G8;2*w&-4xjuZ}%AoPPfX?~DCUiTfA$1h}ulnfBM<^|0TR z{1zb4$}NbsET%U<_*m@1;oNr-uzrh%)6eHU4L?5P>Aw1P1@DDjrR3KEOqP{yCBN?A zad16KegnX!w?WCzCl^f5rxuFx`F$AE+oi*UAsN5IQqA1iUshkG&HDr~J`Hljwh&?5o-Rc$aK4XpX_=dL|% z(hpnYu^HI0ck^(L0o#C`gYQuC8wMT%H$0qv`+)U3Ae?1B61+b4s1kP;xGmh-CGI@1 z$98Fnn|q!bw;olAc6&R_Fe1na&GRh2GmSC$OtzMFw9)8^qk zrU_v4IIQG%0@&i56V7z!vANBiMX9g*y_wDElaDhua+77p!a@&bqn) zY)rW%+=k$7;`c_lj&N@Vx1_@s`L5FlHy7Kj)(zrkxrT(>Fx;kabApvk!ufG?{`M?dTiF^N?^ylRl-?@Zeaa;l>GXGiFG#FMqjkD8XJ_p z(|E$J{DeXAUFZ5I3#NR-Q%7Q~WotAeJF_x7GU`M|HnK)D>Ql{T_GC1Qj0iT3XJivo zX5@%)I~VorIU7G8RqjUR2BE(SelXUS^bo522Gwsc`fTt^vHh?wqsn_|;rD*<2eJBn zh$?g9q@Pi!wE&qr+yL-A;T8+GA>88O>cZLj+k|Ty&emttQwmPpE`A;3Cs&AE?JBK! z>$Qz_%6Ap~Y!;q5*}GC#eZFz}?^I~`F8dT+eWW!nqDOINVO*Jg%L?jSsgn+@DaT;MN6C zh@W>Bgw0X!Dr|!F&VpQZ3Z-=V`zYBIw<6Q;*SL@b03Z4V+D#)#hdZ$A1?t-v0 z>RkrKXB~ysRSPpme8+>Fbud>rzZEX$@h%w7Z-vXXM;8ybOgP5{@02J7C-(VC&uQ_k zaofi3aJGxl+1KM83s&|FXItAV_<&el#PeX!31@oeg6pv7mAD(gw%c36S-xArJ7ayW z$D$g+?*}W7gcCmsmVP{($NPi?vPp~DzT!>6(wm1{59n6Jp&6@7dpzIAdCyqppKZSvO6m;u~Ll zucdFKF&!g~W9O8kMe#DrDc{u6u%;WnDcQ7op|kd`u#wdEc#f;_F^rJ;eSbpd5MJ52 zR`q8s{lS6y$B@^7|9(GCS-b|m;R}aqKZjX+b$tB`hqk1GHsmEZ4Xbl7U*@R2aA=?E zi8+{Z9fWT;j@=&zT9s0+#!%CbOZioq&iZp<15tlMY<1Yx@a)32o*=jTwSfMpKS9)^ zI+S#$KP^)EcZ)ZgGsXD!+h)xx&34>4p^Zg^pKjdjNj``8j^~V4rFpa2`Ljv~H)y!i zcyDTh#$DgJr>?)Le>mWWsKK7J@I@-Gw>+W6|BZDx_0M_yaCJD7?Qpr$IPsH=6LsOd z25VCtCs=PO`T6b-$CE9?IUa8nzmX-sQSlocZUy}Ih~NGtzXRfTP&mi2gX4E<$?vrI z`5deL$T^A6vMTSC{N9b9@9xmgInE#B=Kx#u!De8OqeVFVS~>tDTb2B_j^DQ7TC@FE zVCQW2mbjO~y%Nr=qV2%S7vaQTg3b5u;f(J8h~Gu6>dSXASii~P^t%+Stj}b*I1cX> z=vUkya9%MSPAS&LP5$w4#kUWgBY!9VAS%wjA6ESSaj3Ycua8X*&$WKjry8wmKk4Yt zI(DJtJ&4miK((KLGkW_1`QFv&?avwb&mWBJO>^i?93PPA{e9xjkFCxcj(tO?JK`0! zTtD5Ja_OWwSB_pVHnO5&h1X<878<6P(cEO@yuZSzO*z}FZ}d|S$o1Q5^UT#=9?|GkxSibyVc>H;#Z_h_mYl0$ zMo&+zS9@|s2(L`NdhUwKd9`HauZUVVg*2=TN zqBZ2v4*`4h8-?=-cLTS@?q2d69ltRpZV9kgA(O(50e|c1NA?S6+6RFR;m3wEkMqET zu@{B2EEj`^U?-RSt^@anyQ$=NbNp^C`8^Q7M@oK=#_#bGcO2OJ$I4sST8*%V0Jhb> z8_wf@FMeN_{Jsh2*Rb8!R^B{#K&)d?vj!YgWiXt1Y*6ys7HrGgKHMtcAz)>faN=FT z?z>w!Tlgrj>m{SZ*{X+ul|#abe+G8n!%BXK$M5oz-xc7&_+1@tAo!a24WgM9bu}1V zJ&tf*Jr1!MBE>ya@yqdhHGWim>p zQ$J&;_cFx=2duu6$nv#|pS`g+*z;1{7qr*1F+|R~?2&jfJY2Qi zgE{S$G2w0jUryReaZgD+f$bh|@m?9%V2gLi9F~3cJ3M|zhBK+j;0{>tA6XXHZI1#g z*Mt*0;+e;F;f%c3$M3Fi*1;2C)BANe%W`-8yw6nB{cB*;^DPZ>9`A?XRj?n08w7qG ztTan(6MJvUeOrdJ%yZc3khUei72?-ETz9sw7{9Gce%r)vyKuJm?c=vs$!}u(_AdGD z6Tg#6ekaH8)NuBr)8cn!$?vN8T~qSAHh%Y&{O*t6gWC^e*}J3AbiAk9V!$En^)YcZlDFaHg{- z*gPhNbKm{I9kB<8vz?v@c62Y^e`Fu@T}RFY&X1q_-VyGua3207uyS8G@%>=)eK4H+ zJ^|MMsc@G0A+Yj#IPn``_kAmzGm^LC_f5&~+xRu(28eZPnb!jM#I7CAc0UL_5W9Xj z<4_B*a$&eO;ERJN#~Mq-%BA7jf-eicqU0x5t}OXo6?}ckPwY5-b2#JKEnwx*aJGZT z!@W@Q`)#<_!g)-82={q7WA>NfT2aB)i(~toRyMLkIPsET>v`!Cw-4B<$&ulVoyUN+ ze+Xxtz6myT^rw={!{L2<@b1{3hI60Sv+u#-JpaqUDMyAA9|g87$CUQH7VI4F_HYg{ z_kdT!-dpm!1MHahL^x;8$AXosxOryzl&it!;j^4_9>=UcKUzOGo|jad<2y4ovYE0i z)>7KbdZTjIMjzD3?inupY>oB~XA5%n#`RFs@TlY{aP@jYYt)vrLu?Yfd8{XX%iwKF z+(uxxZ5Iwx`6=20-5E7KuPa6bkBW65-3?X7p!#_nV^L)vwAgq5-~&tC!NEU^wUr!= zI_e%9&U}vwKEA}A9DHi5jb>L=dj@L0%K50raS-)&(1?ksWlhkKyJ zJr?eX68ChtXTo_No<}{8uY|L~y^an=-wLPSyQuZ`=Wz34e;@qUSoeLc0q4FSp_`#! zWSf5fLJvXz8&1D((6iCz9IVG{9{)haEyKC*-y3jC^Vw$w9HHiq-%8-0xFb^B+c%F+ zaF(TO{A>rSfa|cUhBE@M4z`W15l+7~!JA^&4rh9Oz)Js;-+*wNmi)E>Pr`58lHYdV zpTO-<@*4qG#+LlXfjhwMU-CN|Y@a(OoON|v@JX?j`Pc^B;&4a7+0ReLa#1`hcRUQ6 zGr7)8UN!mRN4m~fzq~N}*BHC^_D5F%Z2M5&h34`b=cLzbq4bAWlq$Zu>Ct@u|IppirQHOyhQbxKYOO^th_&I#-C-I`QHbs-L7}t+^4i= z{@qS9Ubcp}O{RX%ZU@S+P9y90(^{*Zncv`>RvN`G&=+go&ckQrd6I@@*`0LkGc&XH z?oFZLT=UuD2qfG*oBCdc$I;a@z5_D#%_@&+D|FU= zw`muCwW@eZW;BmR)cUZoXZ)(g+?zVKMUP_3j?8v_R%%rB38(RV-l)2F@o0_x z-Z|(QfHqj)+aPCbyAaR`>$@7{>d?!=T^`PP>6Ku|g&V`UukU8yfAzf!TI2P-fYq?~ zWt(G%?_t;u`*1khmhW5G4f{-q`z?4VoKFn$zdG(b39tnfPeIm!eYe8)Sl_RppXt2^ zFvhWt&ek&&<^3;cW-b%?7rdZz=wi8w&TNDmYu-b z6T<;3zV(d%l{3TH|9v8IL2U69q};`DwuejN=lT65*b$_7;?cAp%l7AEt+yAzYhhmu zXC1r@whmqmR|kF_JRIv=)vPPIx5K>?&a(U+yb$)ECGIP*_49Q&>!oFjTD=r+VzXU+ z&UWo$Y%>qXet&aFSvH&_V0&;EY=@Fx8?drQILoknxV6H$@4DgE3pY1hTU04H>vsU# zO=DnbU-wrA!xi5Iww(HJ&4g)n?6z1r>w8fT6!A@Aa?Vla=R_5FGd_!Vip5lRK^^_a zqJ`hMU?+TX%6_PR$DoDZvB9U8xHE$UW}5Hz~ieA)^z97-qk&8Bi<(D zF|FS`Y#wpDz@r=GmuKd`DFPw7@etfL;K7?I>pSw$9SAsOya0&F=l4wZuJWrwQIO(&1srG zFN0a9-I{W2#dy6HrC0}@nctxt!};(%MW-=Ut5b5 zXSP=N`>s}vIx{mzvyF{s-e^0iwGPLdYkq(^+O+#<{XDq%Med@9_F%=n59O-wq22gY z?xBtteWvsN^X~XGExdoc8b^#JO4Hu8t^dKSNc>TndjEN^>RpGL-?aV~?>}D|hZ)V^ z_2q|?U{m?8{@wF!)5_hx*u0tJvt!JR=06|#7f-b`m4A26&-7$g>fiD9h}3^=#{2xD zwUJ^3TlNq3R}dUM?5E!_bchQMSb3T4$}8~`7vB+;o3YwhgV;K~=f4_8fZ9Witj*l> z@XyWFk{RENv2EvY>tdY)DW{_P*-lPFmHSaS=dKT+%Ezdja|e0lQ&g@jpYx$OLbq8< zC&b}ItXyC8BvdKpOv{5Wsxn+lVXg6Y`P>uhey&-q8tgn!ZbMXF*$9<$O=4425zGA) z-4RtrqXjpn%GA&CoF^V1&g&1wJbMTKHP$kH5Ijd|uByN9{yTd*^AoQ?H>M;Fe^YuJ zxccuuZb@XC@;9Zw-&Z`irdsUE8!e;9Ul#jm!Fhe+q4f&qHtWF1=yj@owt?R0Ak^L{ z=N$5ERJjx_{4T39wd*lCWjMh2FcMpEM*!x7^FB<$dEM>&?7R|p4cPKrAFd&80$9GklsMMn_4GsFF5yE5LJq|d&}7m7e@!NZ_(ebVX-@+mQFHecx{CdDGIQH8bnr^|PMxqv`~wAIS=KZJoaM8}PN6 z=@yi2Mplm-j&xpwd7b4ogVASZz9m^-OU2xgva3 zncu?oo4bDZxM5)V{>M`OF}B%%B;V)RnISv};`fdXz_aCh+rwz#&b*zu)W)r1mQd?a zUU$q|MB9(%_%d`hMcJxPQZPwttrHCH2w6-CwnVB^-e)rrt?T}e&@U=UABWUoo z`+l`jIk%lwRA{;b?LsYiFRxbb&I4!U`GI1ju8n9#T=hz3#>Qyo1b5xg5BKk8`eMb| zc`<`$@?E_vBY16D!4)fmdgyuU}oP ze&W8UYq4%?i*`g6uSVp|(<^=PDzWY>R=S~uUytD4vHFP>=Uj!KSKngSJ+=CY6;~Px zzrMlFD+)icvMnlSKk!OjakgLVTim_bEu49X75h)&=iM{0+X zKe4he+Kln8908n9?@x}7bVW;C6TeyOv$gvlHb=KB4QYG0q>L4dcW;@M%Kg|9$&GdW&519x*pDX9Yc-u zq%^e%VqctoWNUi;(bcD>#r4k>aPbYs85&=I?q* zE4u>HRQ}zo-@&N)P3!NhtiQUxa@<_C6r0N5NzU}d`Zp5V@@Dk-|3UtH8_JPZmFjy* z3@FY^KANF-m^3%0Od;R=$e!tK*um<9i=Cr3r<7Yj;K6HGEax?7xceiSkuf`#$aNs~>6IH8xTIA?ok{#=5J&7Or0! z{jt^EkNtgD^>tXgaQz|1i{kqrv-%yH|NKb%Zo|6!A;ydETX#Q(@wVwpi~mLIPt$mB z;E(UIyxBiz{J!n@$2xvD_Tb=;Z4COc#?OZDTKpm7=d8YKvDFXuUBudWJ0t7&_1AMd zviLHQMXViJ0I5B!xg*x4=kaXu5zw*K#hKaP0>97vvE`4Z4yU-Bn)wei^88kDg6dCN zZMAIYFaB|!IhI!wydzw!4*P(a&wwn3`pk`fey&4(W~vP;r{80!@;EBz3hooA@>^8S z=X_p5l}}MQ<+GZpe2$efkN={FqFeX-QO)KXbZ~Yf}Yn%42 zZQYgpUyP&GV0-d+WR)(gOA39)uxr*ReZ!fYYrN}+o0l71a^2DSyy=BZ4CkGp8^Nv% z-xSW(=#RmJv0sEU-!Hi(FckYYtm(;p3tkI5CyiRpR_L!94ZwB|r{C^i_Z?m0_6ED} z!QsRwgGXUc31@njfK6|5I85ac{&?5q$rAUQa4&>2-!XKap4hS2qRjKt*^CWKV&&}X z{xZ#a*p0Aq#w>p=W)tjJ;q0Rylc@J0|B2Ply7~sZ3bqx&Pp%F<3A_dN7ju6^VYB=x8P2wCX zuZHuE%VZQ$Mx*P4U3eBO1O%ZfnShcmvd7;dd_o}0D94GZVT;o-)I zvz{k}J20GOJ}BJT;cOe{gu5)<25^^$doG+~#9Ls~eLLI`@bmGTgOlTNc#c~62bnM2 zO5pj!Egz2NP^k;|dAP1{Uxe#Jr#HQo(ba>;#6nfZf|bePXttG0!?mC?-FG##r4@^G z4Clv{!u1H(5^jC4L&L`5wgvZ$-|pes!i^3$Ib0pwrQv*Ag85pfzA-^rkP4GCk9OdJ z*!Cr^3)r^VHJsJC5LoFJ&Un^6+@NrlWpKESOMaV#+b!IN_ze%YcQ`^oWuI`zhJ&gc z7w-6Qe*Ag3E5jK_uL^fZIM30Y;l2$A_1y~?TG9y`juF$k+gLwWoBG?=4KGr5CyRqx zPqIp@b!;183R0Uhg)Wb_Q6^-NG5=zD5;Wfqs3^0|ZF%MkldvZ88t96x?hc*8yxVH-+;Y zdIh2UDxCNpu>0N@uJbgX5Gc3b;`*)W3v6QcT<^?lF3DI}75lQ>%BW{iaV}DD+fTsvnJ35^|4!(p3!butXsRZ4OV%KV|^e|nC;_N}ra{=R`*vB8*V zA>Rq-Z2n!eDmc}0o0a*))IWy8_`mP6FPL(Xdo7#VyAI{nM(4}+E-h<*t~qoCEB+p$ ze#V&H!OBWp%oXW%275GJ!#T&@7OZR+t{ZsAa65%F#_SqyXgJ&ZuyDgmej~$;3g_rM zCfwL?o51ZAZelni!K82pg)^G39PY$$Mu<~_PmOg(&>HnP3(h%Gs-q2D;E#E3uEV50wN#JdRPm6WCZ#3d!71Ha)benw>j_qN2q*q&xShgzKF$E!ZY~e!aoi2Im);Yu9r$hV z5!iQ2e*OlYvyQ)qTM#@K3G9uX2kY@V%h);FJB5R)bO!$vYh=-{Ke`H7*(jV>a~lWy zyGNX|xS0(P=aF3R_ z$HP4vj>D8ye0wep%?BK^@J-<)J@A+_!!Y_pTB%IBn1r6LX&xJK#xo+S=*d8TrAlUX$ ztTH>B*%r=pw~wFP81Tl}ap5fAc<^BCgmAXW&r+77!a-Gz1}n#gYX>f#z`Y=x?eoI; z-4M?9d1JWS!a-GT4|fN)HoCT`CRaMO_aFG>E8l(N z`{U}W?-lWxcfa3Ud!L-!C!r&WVs$*dU;h4l?X7x#Lu~@v`mm2TQFo+``S51_PbB(X zl`-)3kH`9b?dE6;^cxT5|H=QV8mN8qtNuIdweJr6?b}xjW7QU|EyOunvwW~`&}gdh zq~M(Q%!hg%TX2VfUGq4!#2pFN@3<0oBG`2%=ZVF>mx0amz7qEocv1AF68ApX@v0*` z7W?)C=-0o*tq)!ju9%YnE8D}lZ!ss6TbBbfp6-Zcb5(W&Tb3~;&fgw(-y=($Z`0H7 z+7jn)3wyl2Nv}xnX|Qqa{SxO}H=L_{T;jd}TQAKsR{>TQ1)J|WC9W^ndS1W8Z47o_ z=T}9(Bfty8?OEdX0h{lBCGJSD^>=)UI}z-8Kc&Q75x=WS+$~@u+^({ZCo@cl}SQ)fZeIA3s%7}2b zwvpj}!8E|K*ix@^N`O2Rt|;Tc_zo-WKRnzurTwqX{ttxfNm>tv`;B%iLqd5#s0D<^ zmZ*P-C*Z8`S$z)a$NKzRW6OlI|LLRJZw}9D-EGA4N44(}SKkn0|M0D=wk})j{Q~6K zaAL192}P9`!mR*)F@A5A{N9eA*OzWKhWrs=@Ax!aJMepMM7|6s{u|gld~2hd?c=_= zQCWfwft4k7LW;Mj8e5C&*zWPuMeJDAE1bt!ylr*$lAl;vBb+^NO|bMj;oR48K^YKE z?AvOji{Gm^g7|y&%Kjz41LAj3IFIe%_#IL5b1acQI-HT=7zyO$aK^b)!krP$^t>Kd z&I>0#A1r-gxYfYE-Br0XocJ=Z^cCSejw>Y)pDZfs-lvPC?+9nUcS<1lhZ8>lmVPLl zeh*6^&xR8}2bO*zTwCyq638FIiCtfiely%pz;8()e+(!76Il8$;XH4SoywdUd*tQ; zI|3{aZhdg^)~kiXK~)w3n_lrIS@-P(r*w;-T(5AehZ_R7c(}F0wT9aYY@pscoafhZ zTq)Kg#Jj-RcZS8!eUAb=_MIGV3-EBTa!$A|;B&)W7H(I#%fmep4yy8GxZi|h$gO+@ zHji(@wE;g9zfChHLsfqd+Ira{+zMcS4_Z04$?wzneICv}vn40oLC@cFHV?V0!Ok&m2xn5aft`cg z9A^y&*|6_cR08@n+)f%xu&C> z6;6CM*yFe`ob&68;&*w;?~3?c70xzsb^M+y`8^-M7sDBwejC5HOMdUf@4avy$A@6+ zejb92?bLnWhf}r)C*Bflnf<+1{k-n*_gUR{SU5~&cm5bl#)ex3yqz16yTXa@2Ake9 z;W~n!1uLJ1TNzxe?YMYqzWOx-D{aGxR{$G3JA~T}+%bN|6OMIo#S@NumiFBXY*{9S zYYW~x`<_tpJ28GIhg%W9Q{s1B$?y93xsGI+jXyWV@2QgC)A4&ITzCAQjo(~UqWday zgDqe21g7(<;t9+SCBKgGTREJut_#?6)Gge~;7(xWfNP08;Tu-E5LmAJRT?)!d;`vlwp?$dC_tN()AVZRP%`|AQ$il>+k z+21txyjkXj!N!9{!nFm@16Inv*SkEN$J-`;j;n3s*EO8`tP;QO;Vf5=`1LRO4T#^M zaJJLI@!M?Puel;V0%j-lDD-Ib81z{5IP`e*=cujhf7Qa+|B{2P?`NB*ootzQ(wj5B zRocmp;h-uz#c$Ve#`K}_d%fiMM*Q9jXJ2|hejk3x>1LFA466UAn|=2)6HSQsQ<74~E+%+)u%Cft3@(iBAHX?m(9pc=@`ywS1YbC<(N>y|#}co5&!Qjxq--kNg+w^rsvEsUHa z<2cl92cmM$I*vq*XvTrU&v?)UJvN-_8W$X$j1BsE1`Z28HP$>XKu!0;a7Nw9XdQYf z>b}lmE<*>Qm!op#aRus(^Ga0Cbgn~<`q!g!=5YgRY`O_8xZA+aDvMR)cHpy7r4FaU zuN`1%xc1@1ZQO`-31=SN;@7>z^#*&@;CEU0UoDGw?H%nd3g?W^rv#MC!Z|x`Rb^^i zz9d}Fv<<7bq#y(y2P?mG~D3{~Dl<&?K-rt&tn$m5-Ge+zdg z_V3}=#z{ZxaUB8TT@B&tsCPD$!QuLVy~Ckw5>CHO!;J{%xfmI4k8tigCftN@*6E(% z_6ujUFP=(0EnFR3@jTh3;XIeF7_NhTzr?x1W}UgZ23>vb`2Tyj8$udTQ{6Z^#gnE`-d}*j{+}?9Ura^ z+!w6u6Rs`Tr#h74sg8}o2ZcK}e%rwv7w+_Mo4}nB?vilZ!%YtNi*UB9>%!d^&SSej zoGT;N!2tB}aPNdO*1sFB6~R!y_0TyJ821h5dEGDEY2mB`pAOj%>yshwyDxfr{9I9x zQ(RTB9`6t5*zrL8{u^#7IG@~57Minu--W@-BH>KOtMYc(8^U?c7meR?6s*YiCl(T^ z3uka_6K<_=w!gK*4GrhV)A(cix*(kGc{ev8H-uXWd}Fxc$qbL<@oaxB)_r~-zYoIs z(I+yj?|HG7+4%fn{FV#{RapwGEFI2sxlFiS!}Wz58g4|mesCkh?NQ={T!daH3;NVR9R*fS3+HjX1-2{wG2HcFpFdST4Cirt1#Tlr$1soO(2wHRE}VXA zGr_X{*1_s0cQ<$i>_g$|!0qi|Nbx;J@gN$tadLgE`|2_f?D^XuTxakeU}OCFaITV^ z26o@`N`8mZVXcNEv8Ly~r-eJK#C-u~x5__CoZk<$Pw$R(U(eyo;L+Gu!kOL+;5OKI zOWcAKm_w~BiY@Zp1Z-Kh2)8D9!<2P+IFEM(m||2$g#%W`f|cXL*hM%fdlbE)RD_IERV*z@~eDIFIAX_^m`BZN_KQTiKwBtP;*T?G|pca5VMG z=HW($b6gk|?!a)C`Jiy;hco_N5bnxwP?f8|#@K7Z8Jn&Hd!2ZFILmS~*!F)*IPdegZb`eiqK-Z9!051=|v9 z{h7`jVAE|CPQL}g#@~g)ncl)+W56Qe+;>rM9d@yB#^tra1F-9c+XcJ@SpV(9d46{W zuZ7(uoU!ReutW7L;oRrdaDNErzO88(hJ?AW9*1?`25kOa!|8W9*yFi697$AOp+1!R z!inz(D-VRz<-u?(x3A@49drUKTZOYPZyjz#ILkFM+&>0RNx%{7_HI{IEd_c^3Qs0gPf_LjV8( literal 0 HcmV?d00001 diff --git a/polymer/polymer/polymer.vcproj b/polymer/polymer/polymer.vcproj new file mode 100644 index 000000000..f0316893f --- /dev/null +++ b/polymer/polymer/polymer.vcproj @@ -0,0 +1,885 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +