From: Michael H. <mh...@us...> - 2000-10-26 17:16:18
|
Update of /cvsroot/pythianproject/Prototypes/GLBitmapDemo In directory slayer.i.sourceforge.net:/tmp/cvs-serv7229 Added Files: GLBitmapTutorial.html frmMain.dfm frmMain.pas gadgetcollage.bmp glBitmapDemo.dpr Log Message: added GLBitmapDemo --- NEW FILE --- <html> <head> <meta http-equiv="Content-Language" content="en-gb"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>OpenGL Bitmaps tutorial</title> </head> <body> <p>This tutorial will hopefully explain to you how to display colour bitmaps of any size in OpenGL, using the glDrawPixels() command. It will also teach you how to use a separate alpha bitmap to let you define transparent areas in the picture. There are several ways of displaying pictures in a GL window, the one that I found to be mentioned most often is using a textured quad, but this has several disadvantages not least of which is the 256x256 size limitation. So, how do you load and draw bitmaps of any size into the frame buffer?</p> <p>The first problem we encounter is the fact that OpenGL does not have any support for the BMP file format used in Windows, or any file format for that matter. The glDrawPixels command is fairly simple, it takes a pointer to some memory, the image size and the way the image is layed out in memory (i'll look at this in a minute). So how do you load pictures? Well, you could read the picture file directly but this is a pain and means that you can't use libraries to use new file formats. Here's the solution I came up with, just load the file using and library you want (in Delphi this means the VCL TBitmap object) and then use the GetPixel routines to retrieve each pixel one at a time, placing it into the memory buffer at the correct location. I can hear some of you scream now about how inefficient that is, but remember we only have to do this once when we first load the bitmap, and if you'd like to make the routine more efficient then that's fine but for now simplicity is my aim. So, we first load the bitmap and allocate the memory buffer:</p> <p><code>var bmp: TBitmap;<br> PixData :Pointer;</code></p> <p><code>bmp := TBitmap.Create;<br> bmp.LoadFromFile("picture.bmp");<br> <br> PixData := AllocMem( (bmp.Width * bmp.Height) * 3 ); // multiply by 3 because of RGB data<br> </code></p> <p>Notice that I said, "in the correct location" in the previous paragraph. This is something that took me a while to clock, but OpenGL draws bitmap data from the bottom left corner, not the top left. Obviously this means that when we load the picture we need to place the top left pixel of the bitmap file into the bottom left pixel of the memory :( OK, I'm going to show you the code that translates an X, Y position in the bitmap to a pixel offset. I'll take you through it one step at a time.</p> <p><code>oy := (PxHeight-1) - oy; // now y is OK<br> pxoffset := ox;<br> <br> if oy > 0 then<br> pxoffset := pxoffset + (oy*PxWidth);<br> <br> pxoffset := pxoffset * 3; // move into position for RGB data</code></p> <p><br> Here, OX and OY are the positions we want to translate and pxoffset is the result. The first thing we do is invert oy, to take into account the difference in opinion about where bitmap origins should be located. The reason we take 1 from PxHeight before subtracting OY is because measurements of height/width are not usually zero based. We assign x to pxOffset, then check that oy > 0 , because if it is we need to do some more work. We simply multiply oy by PxWidth to account for all the rows we've "skipped". Finally, we multiple the result by 3 because in fact each pixel takes 3 bytes, not 1 (for the red, green, blue components right?) Sorry, I know that's not a very good explanation but you get the general idea.</p> <p>Ok, so here's the loop that does the work:</p> <p><code>for y := 0 to pxHeight-1 do<br> begin<br> for x := 0 to pxWidth-1 do<br> begin<br> c := b.Canvas.Pixels[x,y];<br> red := TColorQuad(c)[0];<br> green := TColorQuad(c)[1];<br> blue := TColorQuad(c)[2];<br> <br> pd^[ XYToOffset(x,y) + 0 ] := red;<br> pd^[ XYToOffset(x,y) + 1 ] := green;<br> pd^[ XYToOffset(x,y) + 2 ] := blue;<br> end;<br> end;</code></p> <p>As you can see, the loop goes through each pixel in turn. The TColorQuad stuff is just to extract the separate rgb components from the Delphi TColor type. Once we have this, we assign each component to the offset + 0, 1 or 2. Now pd points to the pixel data OpenGL can accept. One more thing before we draw, this line must be added to the OpenGL init code:</p> <p><code>glPixelStorei(GL_UNPACK_ALIGNMENT, 1);</code></p> <p>This tells OpenGL that the data is aligned to every 1 byte (ie isn't aligned). The reason for this is because some processors are optimised for accessing data on certain byte alignments so if you're willing to use a bit more memory you can improve the time required for the card to access your pixel data by aligning it to every 4/8/16 bytes or whatever and telling OpenGL about it here.</p> <p>Finally, we need to actually DRAW the damn thing :) The location that we draw the bitmap to is controlled by something called the raster position. This is simply a point which OpenGL maintains like any other vertex and that can be moved around using the glRasterPos commands. Because it's a point it's affected by matrix transformations though, so you can scale it and rotate it, but remember that this won't scale or rotate your image, just its starting point. Remember also that the bitmap will be drawn upwards, not downwards.</p> <p><code>glDrawPixels(pxWidth,pxHeight,GL_RGB,GL_UNSIGNED_BYTE,pd);</code></p> <p>This says, draw a bitmap of width pxWidth, height pxHeight, pixel type "red, then green, then blue" and that each pixel is represented by an unsigned byte. Finally, we give it the pointer to the pixel data! There, that wasn't too hard was it? </p> <p>The reason we need to tell the GL that we're using unsigned bytes is because pixel data can be represented in numerous ways. Not only can you use bytes for RGB data in the usual way, but you can also use floats and integers like other GL commands. Data can be stored as RGB data, colour index data (you need to be in colour index mode for this), RGBA (like RGB but with an additional alpha component), depth data (you can write to any of the GL buffers using this command), stencil indexes (see the excellent NeHe tutorial on stencil buffers if you're curious at <a href="http://nehe.gamedev.net/opengl.asp">http://nehe.gamedev.net/opengl.asp</a>, luminance (the weighted sum of the RGB components) and that's just a selection.</p> <p>You can magnify, reduce and flip your image using the glPixelZoom() command. This lets you specify a magnification factor for each axis - so a zoom with x and y equal to 2.0 would map each pixel to 4 pixels. Fractional zoom factors are allowed, as are negative factors, and these are what flip the image.</p> <p>Finally, by modifying the code you can easily add in alpha transparency to your images (although I haven't tried this). To do this load two images, one which is the normal image and another (still 24bit) image that is greyscale and defines the alpha channel. By this I mean that each pixel in the new image maps to the alpha value of each pixel in the original bitmap. An alpha bitmap is white to mean totally opaque, black to mean transparent and shades of gray to represent partially see-through. Once you've made the alpha bitmap you make the following modifications:</p> <p><code>for y := 0 to pxHeight-1 do<br> begin<br> for x := 0 to pxWidth-1 do<br> begin<br> c := b.Canvas.Pixels[x,y];<br> red := TColorQuad(c)[0];<br> green := TColorQuad(c)[1];<br> blue := TColorQuad(c)[2];<br> <br> alpha = alphabmp.Canvas.Pixels[x,y]; { NEW }<br> <br> pd^[ XYToOffset(x,y) + 0 ] := red;<br> pd^[ XYToOffset(x,y) + 1 ] := green;<br> pd^[ XYToOffset(x,y) + 2 ] := blue;<br> pd^[ XYToOffset(x,y) + 3 ] := alpha; { NEW }<br> end;<br> end;</code></p> <p><code>--------------------------------------------------<br> <br> glDrawPixels(pxWidth,pxHeight,GL_RGBA,GL_UNSIGNED_BYTE,pd); { GL_RGBA changed }</code></p> <p><code>--------------------------------------------------<br> <br> </code><code>oy := (PxHeight-1) - oy; // now y is OK<br> pxoffset := ox;<br> <br> if oy > 0 then<br> pxoffset := pxoffset + (oy*PxWidth);<br> <br> pxoffset := pxoffset * 4; // move into position for RGBA data, 4 components now</code></p> <p><code>--------------------------------------------------<br> </code></p> <p><code>// allocate enough memory for the new component<br> PixData := AllocMem( (bmp.Width * bmp.Height) * 4 ); // multiply by 4 because of RGBA data</code></p> <p> </p> <p>I hope this tutorial has helped you understand how to draw bitmaps and how to do some more advanced things with them.</p> <p>-mike </p> <p><a href="mailto:mh...@su...">mh...@su...</a></p> <p> </p> </body> </html> --- NEW FILE --- ÿ Font.ColorclWindowTextFont.Heightõ Font.Name MS Sans Serif Font.Style TextHeight Exit1Click FrameTimerIntervalOnTimerFrameTimerTimerLeft --- NEW FILE --- unit frmMain; { GL Bitmap demo (C) Michael Hearn 2000 mh...@su... } interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ExtCtrls, GLPanel, OpenGL, Textures, Trace; type { This demo shows how to write pixel data from a bitmap file directly to the frame buffer - no need to worry about textures etc. However, it is horribly inefficient, in a better implementation the pixel data would be read directly from the bitmap file like in the TTexture object. However, for simplicity I will use the slow but easy to understand GetPixel routines to make a copy of the bitmap. } // we use this to store the pixel data from a bitmap TPixelData = TByteArray; PPixelData = ^TPixelData; TMainForm = class(TForm) GLPanel: TGLPanel; MainMenu: TMainMenu; File1: TMenuItem; Exit1: TMenuItem; FrameTimer: TTimer; procedure FrameTimerTimer(Sender: TObject); procedure GLPanelGLInit(Sender: TObject); procedure GLPanelResize(Sender: TObject); procedure GLPanelGLDraw(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } // Animation trackers can go here animSquare: integer; // this var will be cycled through 1..360 // which states the angle of the square. By // incrementing this every frame we can create // a rotating square :) Px :PPixelData; PxWidth, PxHeight :integer; procedure SetProjection(Sender: TObject); function BmpToPixelData(filename:string):PPixelData; end; var MainForm: TMainForm; implementation {$R *.DFM} procedure TMainForm.FrameTimerTimer(Sender: TObject); begin { Add code to advance animations etc. here } inc(animSquare); if animSquare >= 360 then animSquare := 0; // now redraw the screen GLPanel.GLReDraw; end; procedure TMainForm.SetProjection(Sender: TObject); var gldAspect : TGLdouble; begin // Redefine the viewing volume and viewport when the window size changes. gldAspect := GLPanel.Width / GLPanel.Height; glMatrixMode(GL_PROJECTION); glLoadIdentity; gluPerspective(30.0, // Field-of-view angle gldAspect, // Aspect ratio of viewing volume 1.0, // Distance to near clipping plane 100.0); // Distance to far clipping plane glViewport(0, 0, GLPanel.Width, GLPanel.Height); InvalidateRect(Handle, nil, False); end; procedure TMainForm.GLPanelGLInit(Sender: TObject); begin // Add GL init code here // Any enable/disable commands that affect the entire app should go here // // Enable depth testing and alpha blending // glEnable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE); // uncomment this line to enable alpha blending try Px := BmpToPixelData('gadgetcollage.bmp'); // go gadget go! except on E:Exception do begin ShowMessage('BmpToPixelData() failed: '+e.message); px := nil; end; end; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glDisable(GL_STENCIL_TEST); end; procedure TMainForm.GLPanelResize(Sender: TObject); begin SetProjection(Sender); // this sets up the view // init any variables here animSquare := 0; end; procedure TMainForm.GLPanelGLDraw(Sender: TObject); begin // // Clear the color and depth buffers. // glClearColor(0.0,0.0,0.0,1.0); // clear to black glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // reset the matrix to it's identity (original, unmodified) matrix glMatrixMode(GL_PROJECTION); glLoadIdentity; glMatrixMode(GL_MODELVIEW); glLoadIdentity; { ADD YOUR DRAWING CODE HERE } // scale and rotate glScalef(0.5,0.5,0.5); glRotatef(animSquare,0.0,1.0,0.5); // // Draw the six faces of the cube. // glDisable(GL_BLEND); glColor4f(1.0,0.0,0.0,1.0); glBegin(GL_POLYGON); glNormal3f(0.0, 0.0, 1.0); glVertex3f(1.0, 1.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); glVertex3f(1.0, -1.0, 1.0); glEnd; glColor4f(0.0,1.0,0.0,1.0); glBegin(GL_POLYGON); glNormal3f(0.0, 0.0, -1.0); glVertex3f(1.0, 1.0, -1.0); glVertex3f(1.0, -1.0, -1.0); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(-1.0, 1.0, -1.0); glEnd; glColor4f(0.0,0.0,1.0,1.0); glBegin(GL_POLYGON); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-1.0, 1.0, 1.0); glVertex3f(-1.0, 1.0, -1.0); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(-1.0, -1.0, 1.0); glEnd; glColor4f(0.0,1.0,1.0,1.0); glBegin(GL_POLYGON); glNormal3f(1.0, 0.0, 0.0); glVertex3f(1.0, 1.0, 1.0); glVertex3f(1.0, -1.0, 1.0); glVertex3f(1.0, -1.0, -1.0); glVertex3f(1.0, 1.0, -1.0); glEnd; glColor4f(1.0,1.0,0.0,1.0); glBegin(GL_POLYGON); glNormal3f(0.0, 1.0, 0.0); glVertex3f(-1.0, 1.0, -1.0); glVertex3f(-1.0, 1.0, 1.0); glVertex3f(1.0, 1.0, 1.0); glVertex3f(1.0, 1.0, -1.0); glEnd; glColor4f(1.0,1.0,1.0,0.75); glBegin(GL_POLYGON); glNormal3f(0.0, -1.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(1.0, -1.0, -1.0); glVertex3f(1.0, -1.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); glEnd; // add bitmap code here // px contains our data in RGB format 8bit per component, 24 bits pp glLoadIdentity; glRasterPos2d(-1,-1); glClear(GL_DEPTH_BUFFER_BIT); glDisable(GL_DEPTH_TEST); if px <> nil then glDrawPixels(pxWidth,pxHeight,GL_RGB,GL_UNSIGNED_BYTE,px); glEnable(GL_DEPTH_TEST); end; procedure TMainForm.Exit1Click(Sender: TObject); begin Close; end; function TMainForm.BmpToPixelData(filename: string):PPixelData; type TColorQuad = array[0..3] of byte; var b:TBitmap; pd :PPixelData; x,y:integer; c:TColor; red,green,blue:byte; function XYToOffset(ox,oy:integer):integer; var pxoffset:integer; begin { 0 1 2 3 4 5 6 7 8 9 PxWidth=10 0 X X X X X X X X X X PxHeight=3 1 X X X X X X X X X X 2 X X X X X X X X X X } pxoffset := 0; oy := (PxHeight-1) - oy; // now y is OK pxoffset := ox; if oy > 0 then begin pxoffset := pxoffset + (oy*(PxWidth){-1}) {+ 1}; end; pxoffset := pxoffset * 3; // move into position for RGB data Result := pxoffset; end; begin Result := nil; b := TBitmap.Create; b.LoadFromFile(filename); pxWidth := b.Width; pxHeight := b.Height; // allocate memory for it, assume RGB data (3 components) pd := AllocMem( (b.Width*b.Height)*3 ); // now for the inefficient bit - copying the data pixel by pixel // from the Win32 GDI to our own data structure. for y := 0 to pxHeight-1 do begin for x := 0 to pxWidth-1 do begin c := b.Canvas.Pixels[x,y]; red := TColorQuad(c)[0]; green := TColorQuad(c)[1]; blue := TColorQuad(c)[2]; pd^[ XYToOffset(x,y) + 0 ] := red; pd^[ XYToOffset(x,y) + 1 ] := green; pd^[ XYToOffset(x,y) + 2 ] := blue; end; end; b.Free; Result := pd; end; procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin if assigned(px) then FreeMem(px); end; end. --- NEW FILE --- BMV D'L/(9Y=6X>7]B8eH?^>3\8.rL@|UFsK8ZDc8%oD5|OD]4+a;6hD>Y5/]80kB9xNA{Q>tN6zU;dJmUtM7cQVD QAl;+wJ=kD6^:0eB8fB<Q-'S0,X83^?<O62?0-ÿüøÿÿüÿÿüýýýøúúüþÿýÿÿþýÿþýÿÿýÿÿýÿÿýÿÿýÿþþþþÿýýÿþ÷ûöÿÿüüýù÷üûúÿÿñôùýüÿÿúÿþ÷ÿÿûÿýüÿÿþÿþøù{~ÿÞÚWD´^ÿÝÿß ÿçzÿìwÿÙeóÍ]úÔnÿâùà~úä~ÿëÿçyúÞrÿæ{ÿã}þÖpöÓqÿà}ÿåüÞyþÝvñÏk÷ÖuÿãûÜúØÿÙÿÖÿ×~ÿÞ|ÿåÿâþÓrûÎlþÔqøÖrúáyòÝtÿãzÿàO( SAY;(-"cfM¢¨üýûïìõøôÿëçóíçøðëúüøÿýúÿ÷öúûúþýùÿüøÿÿþÿÿýÿöïôùöøï÷÷ëöôÿýÿæóÿFn*mÒÿÛÿÎüwÉøwÉùÒÿÜÿyÀòÇÿÉÿ|ÂøÚÿÇùÎþyÂôÒÿËÿÓÿÎÿËÿ ÐÿÉùÆõÔÿÚÿËüL«|ÍÑúÿÛúÿìÿÿïþÿóÿÿíÿÿäÿÿÔüûÑÿÿÅþýÊÿÿ»÷÷ÆþÿÈÿÿ»ÿÿ¨òôËÿÿÅýÿ»üÿØóXrX~*r²NæpÃÿwËÿrÅøØÿÐùÑÿyÃûÔÿËÿ,n¡g²æpÆü" ¿5ÎâÿÕÿRÅOÎS¥íc h¿á®ÿÿ´üÿºÿÿºüÿ¸ûþ¾ÿÿºúþ»øüÆÿÿÄÿÿ¿üøÆÿþÌÿÿÕúÿÒõÿsçQ¬Pê+{ÎmÄ+|Ñ?Ù6Ò#iÎ%iÒ(nÉ*qÉ>|à.lÖ#bÔZÍ dÕ*lÕ0nÌ8xÍ0sÊ0uÌ$hÁc¼%jÇ$iÆ[¸a½>zÓD}ØGè/hÃ<s°I Z@4nTD\>+T/wM:¤ugdXpeYQriyWJmM@iY[D5n[N\MDYOHG@=@>=fhhµº¹¤¢¬µ«¨¤OJGTDEcGFd?;sIBi<1tK<pM9W7 R3^<%d?+\3$_5(f>2^:0V4.ÿöòÿóóÊÆÅ¡ ~skdrifjegWSYijntvwb`_ZXWWTVJFQE?VPKh3 'uÜÐäÿùÿÿûÿû÷ýÿúÿÿúÿùòÿÿøÿçÙëndS`ÿ÷ÿÿýÿÿùúÿýÿÿõýiFJIüɯÿÕÿÚøÖrñÖhüâxøßyîÐqõÔwÿàôÔpñÖgûãqÿé|ÿéÿçÿæÿáÿå~ÿÞqðÏbýÝtÿà}ÿãÿæýà~üß|ÿáþÞ}øØuþÞzÿæÿå|ÿâtÿçzÿäâÇ}9) xty½¼¾ÚßÝÊÑÌÉÐÍÒ×ÖÐÑÕÊÇÐÍÊÓÐÐÖÑÕÖÕÜÙÉÓÍËÒÏÐÑÕËÎÖÛèöÒÔÞF-)a<4D%$@!$J%'N&'U*'T,'H'$G*&S3-E%T61N3/5 ¢ÊÆÅ{}}§¡RZPKB96 O--b:;X,-R&'h<;G< pdvL?~OAN@WM¢ngZT¬zte[dZZOg[kK@dKAiYSC75VQR£§¨ £©ª ^UQF30jMI_94b7.rE:pG8f@.Y8%W8#dA-fB0]6']6(d<0W8/T@?MDG+*.:;?@;=mbd ¶¥©ÓÅÐîæðýüÿúýûöúôîñèåæäèèîÃÁÕ% ; ¢ÿøÿÿùÿÿûÿÿüÿÿýÿüûÿùöÿÿûÿþôÿÿùÿïàîZM[¨·ûûÿïðúçäíÿûÿDZ¶<¨gÿÞ©úÓüÜ}÷ÛvÿãÿèøØ ÿâÿßñÔyíÔnôÞtûãþäÿàýÛÿâÿçýÚsñÎfÿäÿéÿàüØÿáÿáÿÞþÝýÛ}ÿßÿâúÝzþàwúÛtîÏtïÕȺº¸¯·°·º½Â¾ÅÈóüÿïûýîúüæòôë÷ùìõøôûþð÷úò÷úöýÿöÿÿòûþîúüòûþõøü÷öúúöûû÷üûúþòüÿÌì÷Ïáw²Òx¼ç~Éÿ{Éÿq¹õ~ÆüÒÿØýáÿäÿÙÿÔÿÉÿÐÿÍÿÙÿÖÿÒÿÍüÒÿÊüÓÿÏþyÊ÷zÎøäÿÙÿÒû|Òü|ÐúÙþÕùÛÿÚÿÖÿd°ÚÞÿ¾Þ¯éÿ¹õÿ¯óÿµûÿáÿw½åk¸æÞÿ}ÕþuÍöÛÿÕÿÄõÖÿØÿàÿåÿÕÿÑÿÕÿÏÿ~Éý~Çùr¾îtÂðØÿtÉöÛÿÌÿÎÿf¢ô2pÎ=é0|Ö!m¨?§¿üÿÌÿÿÉÿúËÿúÉÿüÇÿýÅþÿÅÿÿÀýùÅþûÏÿÿÌýÿÁôÿq©Ú?~ÈIæ>|àCé:{Ý1vÓ>ß5yØ8wß.lØ3pØ-lÎ8wÓDÞ4mÐ.eÍ6qÔA~à2qÓ5wÖ7z×AÜ1pÈ=vÌXß^Ý]ØEq±<d¤ÆÜèúõöÿôîùÿöÿ <P[¥¿Í¹ÙìÏõÿÌõÿÐþÿËûÿÅùùÍÿÿÍÿÿÈÿÿ½÷ý½öÿÆÿÿÄþÿÃýÿÀùûÆÿÿÂúûÉùÿz»¸ÔÞïÐÖÛÇÍÌÏÕÔ ¦ trq !uxvÈÉÅÏÐÌÍÎÌËÍÍÈÊÊÂÄÄ ¢¢ÄÆÆ¥§§®°°ÍÏÏÏÑÑÌÎÎÏÑÑÅÇÇÉËËÌÎÎ TTT''' ²Å«Ü¿»Þ¾¿×²¶à¸½Þ³¶Ý°³Ñ¢ªÎªÞª»äµÅß¶ÅÞ¶ÁÛ²¹ÝµºÜ·¹ÚÀÀýôñÿþýÿýÿíæëüûýø÷ùùöøÿùüÿýÿÿýÿÿýÿÿþÿûúüýÿÿûÿÿûýþÿþÿÿþÿÿùüÿüýîôïðõóþùû÷ïöûðúÿüÿÿûÿûÿÿïùùïýÿìýÿÚòÿ·ØÖÉ÷Ñÿ×ÿÔýÛÿÛÿÐ÷Øÿ¢åÿÛÿÖùÓöàÿâÿÏõØÿÒüÏûÓÿÖÿÊõÐøßÿÝÿÕÿËûÉûÍÿsÂÿ J¢y¹ÿßÿÍÿÑú~Òö~ÔøÖúØÿÖýÖüÐõÛüÕõÜýßÿÐÿp¯éÍÿÛÿ8Í Q¥3zÒ8xÖ.hÈK åDáAâ6zÙ1vÓJå;xÚ2zàOïr°ì¨àÿÇþÿÅüÿÃúÿÇýþÇÿÿÉÿÿÆÿþÇüÿÎûÿÐûÿÆý3d®>|Ö?áFä;×.nÌ:wÙWø@{ÞJâKàCÚFÞZõ>}Ù8zÍ9{ÎCÛ5kÂ1b¨Ek¡1ClÑÕòþõÿìßïêàíùñûÿûÿøõ÷öôôù÷÷ú÷ùÿüùÿñæfI: (&573;.BMªÉÓÝÅËÒÄÈÍÀÉÍÀÍÕÃ×â¡´7`y¦Ë©Õú¢Ðò³ãÿ´Òë</7J()O.2O03E)(E)"O2$M- Z;2A)#/#!&&&¡§¦´ÀÀt ~{p}§²ª»°¢oYGW8!ª kyO2_FH,TD8Ä·k}v ¬§}°¨HcZ=XOáûõìÿþÑèäzIe__~w¢ª<?)zsX|mMxU^u\:K4zfGÔ¿¤}k n_UE5>/K;*aO>_E5N/ kJ;`>1U5(]@2T4)\8.h?6[4+sTKÿôîöììúùûûÿÿûÿÿÎÒÍhlgÿÿþÿÿÿþøùÿüÿͽÈ{qû÷ÿùýÿõÿýóÿþðÿÿíÿÿëÿÿëÿýíÿýîÿüîþýïþÿïþÿíþÿêÿÿåÿýãÿÿÞöÿìüÿíóÿÿúÿòà÷58nÿõÿþ÷þÿÿþû÷òÿÿû±¥¥sdhëÛâÿéñÿØàÿèïÿ×ÞÚ±¹uwN]¢y̢ʢ߳²â³µß¯µÞ®ºå·ÃêÂÇû×Ýÿíüÿñÿÿëûÿèöÿîûÿóûÿóóüóðûíñÿûÿÿúÿÿüÿñøóëõïû÷üÿúÿÿ÷úÿýÿÿþÿÿûüøøøúüüûýýúúúÿþþþüüüúúÿþþýÿÿúÿþöþýûþÿÿúÿÿòÿÿöÿÿøÿÿúÿþûÿþùûÿþÿÿþÿøò÷ÿ÷ÿÿùÿ÷ïöèææÔØÍÑÔŸµ¦¨¢Á¹Ã¨?8qdd°NY³9T¯?mÁXÝÕÿâÿáÿàÿÕÿ|ÄúÐÿÜÿÛþÛÿÑÿÅýÊþÍþÓúÑýwÇÿ"o¾ ),";?2NU7Tb9H=TdµÇÒÆÐ×ÉÒÕÄÏÓ¿ÏÖºÐÜIh},Uu¼âªÙÿªÙÿ¿òÿÆäý:+3B !E%&G'(I*'O/)N-$D$V617" '"#ÍÕÕ¡s §¥z º±£{gUO2jR\@£y\bJS9+~qiËÉÁs~v¢~ mzH`V>WMzìÿûñÿüëÿúìÿÿÙòîTok@YUl~§µ©fl[20tXnMjFzb>^iQ-\E%À¨×Á¯Ä²¡xQA1/F0$tZLU:,y^PeJ<Y<.^>3eA7[1*U0(_E9ÿõìÿÿüôùøúÿÿïöó üýûÿÿÿÿýÿÿûÿ,"9md ðíÿúýÿùÿû÷ÿþóÿÿòÿÿðÿÿðÿþðÿþïÿýñÿýñþÿîýÿìýÿêÿÿæÿÿæÿÿÙîýêúÿôüÿúúÿÿøÿiYp %/IU6Wj=g~5L(<WuÀÔÕ½ÌÈÌÙ×ÃÓÙ±ÁJh«Ë¯ÜÿÊøÐþ¦Úÿ¹×ð<+8F!#V52@b97W+*S)*F""V6;ÃÇÌwn~w´«mU7fLmQW>hNjJ7Q>7©¢{£k{}2G>~z³«óÿþñú÷øÿÿøÿÿòûþôÿÿÅÓÒYihEVR©PVCDD,yqSwiEu^8f=rE[=T9ê½¥´»¥zsVF?D8.]OCK;.U@1Q7)]=2lG?g?:tPJ]C<ÿÿ÷þüûúÿÿ÷üýûÿÿcaaùóôÿþÿÿüÿÿúÿçÜðbUmÞÒî|ÞÜòýûÿþÿýýÿÿúÿÿøÿÿõþÿóýýðüüóÿÿôÿÿòþÿðüÿíýÿæøÿÕêòÄÙè¿ÐëÎÝ÷íüÿåðøöþÿáçîegrö÷ÿóñÿáÙðaSk¸¢ºÿæúÿøÿÿÞâ¤xyY-.྿ÿúÿÿëôò×áà½Ë¯¯Ù¯¶éºÂÞ¯¸Ú¬¸îÉÓÿî÷ÿòûÿñýýóÿÿøÿÿüÿÿøþýïóüîðÿñòÿôöÿñõÿüÿÿþÿò÷ú÷ýÿûüÿøõþØÑÔéâߨÙÐéíáÝÝÏ£THBüîïÿýÿÿüÿýþÿúþÿúÿþúÿþöýúûÿÿÿüÿýõÿÿûÿóëòèÞäàÕ×ÿýýÿÿü÷ýøøÿüöÿüøþýûýýüþþýÿþúüöúúìÿÿõÈ«¦tSZeKc¦Å~½j}°GbOm¤`¾Lqµ6c¬9r½A|Ä<p¶9o¶MßGåIíZ£ùRã[äc¤îb¥ð{½ÿg¦ÿXµO¯(ZºQàU£ W(X£½âÎíÿÂãöÓöÿÝýÿµÍë]cgUqSzcxf|qxt#"+dei rqs®ª°ÈÂÍÕÐÙ¼»½ÍÎÌËÎÌÊÏÍÏÔÓÏÓÔ¼ÀÁº½ÁÉÌÐÈÍÐÌÏÓÊÌÍÏÏÏÝÙØÊÈÈklp #' /2'3&?@b7\$RtBn ;H{ÁÓÒ³ÃÊÅÖé¯Äê^y¥¨Î³Üÿ ÍÿËû¦ÕûÂÛõC1>S.0Y85O,(a86S)*H!#? #7 %¿±·¬¦«¥¨¦¤}_J+Q4¡}_uYeOhUgM==+ \SPÿÿÿÆÑÎ1E@|{ª m|8PFª¿·bwoL[WíøõûÿÿýüþýþÿîñõúÿÿøÿÿéóóôÿÿäòîWd\bl`bjYIL3JF){qO|Up\3}e;g>tT0R0ybǨ»¡¸¦¨( TD3ZC3Y<-iF9Y0'a72hC?P73ÿû÷üýûöüûúÿÿ¯¯°«¬ÿùüÿúÿÿúÿÿ÷ÿ}pØËåÿöÿúùÿõöÿÿþÿÿÿÿþýÿøüý÷üýöþþ÷ÿÿöÿÿôýúôÿúóÿùïýùïýüîÿÿêýÿá÷ýåþÿÎæòÐäïìþÿéøÿòûÿðõÿ±rlµ¨Î_Mvÿíÿÿîÿ§¤W9LirÿõôÔ¹µÆ´³ýðòûíóÿïøÿïüÿæñíËÖЫµÒ§°ã¶¿Ý¯»êÂÍÿéôÿñúÿûÿÿúÿüøþÿûÿÿüÿÿöúÿïòÿëîÿìñüèíùëñüòøþöÿÿøÿÿøÿüùÿÚèæêþùîüø÷úøÿþþDz±.rTS«ÿô÷ÿüÿÿýÿÿýÿÿÿÿýÿûõûöúûÿÿýÿöõùÿþÿÿóñA51QB?³¨¤öòíÿÿûÿÿüðîíÿüþÿýÿÿþÿýûúÿÿôÛͺaQgC9]AAͼûûÿòûÿñýÿóüÿêñÿÜàøÕÚù¾Êì°Ð£ÆËwÉ;[§/UaëmûQÞH~ÜZøBè%oÍ(kÇ1f·PxÀ¬ì&7jA+6R15@Os{[dsy{¬\x¡Tx®oß6nµFÌÞÿÏÿÊûËÿËÿ ÇÿÎÿÑÿ~ÇÿÈÿÌÿt®öR×=oÇ$V¶9mÒAxÙKÝMÔ]ÜM¸ÀøÿÄüÿÁú÷ÌÿÿÊÿÿÅýþÊÿýÍÿûÌýûÓûÿÍëÿtÆK~Ä_ëCÍFÐJ ÔOÝE~ÙB~×FØ8wÇ<vÈOÖdágÐW 1Tb#* ^jdûý÷ÿõøûìôÿòÿôæñòìíóïîúõ÷ùñûøîþüòÿüøþÿýÿÿíøG / !YK 4 %* " @i;t§ÇúÍÿÓÿÚÿËøÊõåÿçÿÔûÓýØÿßÿÎÿÊü×ÿÇóÏù}Ëúæÿy¸üQÉ_Ç¡ÍöÄðÿÓÿÿÆúúÄüýÄÿÿÊÿÿÅþÿËÿÿÇøöÕþÿÚþÿÇëÿBkª\àYëPßMzÕdÚOl±DMJE|&=04D6:YJGmUUmUUZKHaUO«ÿøõÿûÿÿ÷ÿôæøÿ÷ÿøôÿû÷ÿøóüÿøÿÿûÿÿüÿÿþþÿ÷úæÀÒe6P ŵÿú÷ÿÿþþýÿûþÿðóûúýÿúüÿýýÿÿýÿÿýÿÿýÿÿýÿÿþÿÿþÿûþÿúÿÿûÿÿóùøöÿþñÿþ>UMew¢ToeyEXO¢ôûöüýûÿÿþÿûüþüüýÿþûÿþýÿÿýÿÿÿþÿÿþÿÿýÿÿýÿÿýÿÿþÿÿþÿýþÿûÿÿúÿÿøÿÿøÿÿúÿÿûÿÿýÿÿùúþýþÿúüýûýþÿþýÌÆ¿eLBW:,M,W4&F'N2'Q:2ÿþüÿûÿÛÛá`bcýýýüúùÿþÿýûÿopô÷ÿûýÿõùúúÿþøÿü÷ÿû÷ÿûõÿþóÿÿòÿÿòþÿóýÿõýÿøþÿúüÿììø¼»Ë ´¢¡»¸µ¨¢Ë{z¡| æòÿêýÿâøþéÿýîÿþñþüúþÿüõÿmZsÿöÿõãôüê÷ÿóüº£«¥úèï¹£¨W@Ev_dÔÀÅcX[VORtoqunqi^atkn»´·ÿüÿÿöþøàèÿíôþðöÿöüÿüÿÿüÿýóùôíðÿþÿýýýýÿÿîððÿÿþý÷øÿûøÿÿ÷»¼²uqf¡sj\u×ÑÄÿÿõÿÿøýÿûúýûüÿýûÿúýÿûõûðÿÿùuyhEOqPW=$R7; ruhce§ª®ûþÿýýÿÿþÿÿÿþöúïÿÿôÛ̹[I5,>80,ED·jn¬nt½¨ ¯rqy|gLPXAE}jghUH[B8gEKW5?YDFbSPaNKfNNT28`=GtSbI/G+<, P??u4Bv<^Dg.D`¡³ÛöÿßÿÿÚÿÿÎöÿÓûÿÍ÷ÿÓþÿÅðÿÓýÿÍöÿ¦ÑüGs¨ZÄÀüÙÿÑÿ|½ðÄô¢çÿÛÿÐ÷{ÈïËõÔÿÍýÇùÚÿÝÿl·å{ÆôÊùÒÿvà!S³ÓÃõÿÍÿÿÂü÷Èÿÿ¾úùÀûýÇÿÿÈÿþÉÿüÍÿþÑÿÿÏüÿ·äÿ^Å8hª[ÉaÄOn¡WhPPxREeh~pz}wvxlvjZah[]xjkäÓÖÿðùîàìîæ÷ýúÿòóýõ÷ÿûøÿþöÿýòüÿòúÿ÷ùÿúþÜÅÓx]q # !0 ):<Q$B[%@ #*#9D.8$8C,3), .>=N:N+Tk5_|?b&J $2"-&, ! $,%BQ)Fa'H ' 1 ) 1Af"V N]L ?O I ,* _aa z+ ] OE 3 7 Znv1 ,02/. 7&).#4/(+z"(kn#VU6 <)?*"3+uiuøòÿ÷÷ÿ¬¯¾"XUeû÷ÿ·µÒ°åðÿëùÿóÿÿöÿÿïüú·ÊϧÄÒ¾çþ^°cÀ¦Ýÿ×ÿÜÿÕÿÑþãÿæÿÇío¨ÏCx£Uºo¡ÝÍÿ¯íp©àÕÿuÌôãÿÜÿÖþÕü×ýÙüØùÕöÜÿÏõ¬áÿ¬ÝÿÁ÷;k¥aϽôc}¢mqÕ¾Æÿåã][M}?5K@v80MHd)-b21/urc´¾¸ÐßâßæõàçøíùÿèþÿÙúÿ´àø~·Þ M~FËc¹ïpÌûlÊõéÿ~Ùÿj¿ìÞÿëÿrÔöNªÍ9«?y±Ï¹ëÿÎܼÞäàüüêÿÿñÿüóöôö÷õöþýíòõÿöÿúé÷ TTQZ[Xa d \ ,{ E,5%0$$ +#+< %@^T{6Y-T0WT|¬)S8dÂÞÅëýÐóýÝÿÿÚÿÿmªa®Àá©âÿÙÿÛÿÓøâÿÐ÷Òó¬çÿ_ %G2PiÁ;a%WsºæßÿßÿÙÿÓûÑøÓùÚýÞÿàÿ¨æÿ¦áÿ¤ÖÿÉüÙÿ©Ôÿµð7Y".Xÿõÿ°h9;k77HFp)%}20@Co+2AJTToQ@¨nuhboqÈÒêÝìÿØ÷ÿºçüU§dyÄðsÁöÚÿáÿtÏÿ[ºæfÅðeÄïkÉ÷áÿdÐònÛûnÑ÷tÌõv¾íÀìx¹à>z6ez¿åñßÿÿæÿýôÿþ÷ÿøóûôùþüþüÿðêõ *G RMD LNX[V > 3 S6/W8/eF=`A8P1(\?6U8/P1(]=7U1+E_\\31\45ÿáãÿÝáÖ·ºL22ÿõôÿüùýýÿñùÿ2<dU^ÆÌÿÊÐÿÕÜýëöÿñýÿõþÿ÷ÿþùÿýùÿýúÿýúÿþúþÿúýÿûÿÿúÿÿõþûøÿþõÿÿôÿÿíöÿyÜìùìûÿóÿþúÿûÿÿûÿþúÿûýû÷ü÷øüôúÿïøÿçõÿ¯¡µÇåþÿèÿÿÒÞð!%>ÌÅæÂ¶Úôçÿÿöÿû÷ÿúûÿúüÿ÷ûÿýÿÿý÷ü9+7WAT`Da±ÿòàèÓ¸¹£zpXãÈ~ÿãÿêÿçÿíùä{óØ3 H G 7 Jais f Al YH{T"U(Z,]@s1[?`LmU|'c[S| \WM$X%[']IS N ] n%u~" /7#"+ =);"6r*8%x)5 $%~(* /.'-!(/6,,h)%S3- N`/1 EVO #' >SP¼Ôÿ~ØÿjÆùoÍûoÑûcÈîxàÿ_ÃåãÿêÿãÿfÍínÕötÙùqÕòïÿbÊçkÕôìÿïÿÔÿwÅðçÿÔûàÿÝýÌôÔÿÖÿ5k)Qqµ»×ÿ¬Êû3X;z»û ÞÿmÀó{ÓüÔùÔöÓøÓúÕýÖÿÖÿÖÿtÉöqÆóÑþyÊ÷ÔþpÄî|ÓûÙÿÌÿ¥ÐÿZy¦8>8K0$*:l1?K/ B# bD?_NR*-I)Fr]ÐÑÿg½ñeÅówàÿwçÿPÀîKºêeÎÿ_ÄñiÉñx×þdÄèlÍóuÙÿjÏüxÙÿjËýlÊøZ½éYÅïkÔÿsÏÿÛÿeÂúa»ôyÏÿàÿkÅã]o gLU¬ýÜ»ÿÛøÎ÷ÈÿÑÿØïÄsûÕ}ìÇrÿÝÿÜù×~ÿéÿÝ{ÿäzúÔhñÊbþÓB +!'x$%¢, ¹:+$²;%º7# 4(;,}"¨7'0'76)/+4t,8V2B)-? 0 °3±',+- #¢,¤(ª2&,$00l!)p/>W,A,'B !$µ¾Çôÿ¶íÿ²ëÿÉøÿÃîÿ¼Ù\£¹âÿÄå`§«ÚðÄöÿÁöùÈýúÎÿüÐýúØÿýàÿÿÙÿþÓÿÿÏÿÿÒÿÿÑþÿÍþÿÇÿÿÃÿÿ¿ÿÿÄÿÿÆÿÿÉÿÿÌýÿËüþËüþÎþÿÕþÿàÿÿàÿÿÖýÿÏÿÿÄûÿÂùÿÇüÿx«ÌÇé½ìÿ½ëýÁòüËüÿÆùÿ VaN\)Ub+K^GVv>ElovÏÜÿ¾×ù±Ïò¼àÿÂçÿ¿åÿµÞþ°Þý°Þÿ®Ûÿ«ÛÿÎÿÌþ£Ñÿ®ÛÿÊóÐøÑúËö¬àÿÑþÙÿ£ÜÿÔÿ¦Øÿ¼÷W¹ @k ^Y!ZY;vVM0u n!r '4"5$¡5#)¢' ¤" ²7-®/ °0¥&´4§! &9) *¡- '$y(+^'0J*=3.I!;_ l x0co"y '¡3!¤2!ª4!©0 5e{ÃLp?a~Dbu\kt,,,C4+aD6X1"`1#l8,c0&i?3qNAiH?V:3O<7ÿÿüÿÿÿðúúëýü®®ßùù×òïìÿÿíÿÿïþúóÿþéüùïÿÿíûùöÿÿúÿÿðõôûýýþÿýÿÿûýüò@8+VG7nZrR;zR9sJ4xWHZ>7P97?15ek~ ¡ £&¨2&2+*+d%T$1 §°ÇôÿÇýÿÃÿÿºùÿ¬ßùj¶*\x!Sqb¹¯àÿÆúÿ´ëÿ¿ûÿ¾ûÿÇÿÿÊÿÿÊýÿÌüÿÎþÿÈùûÄýþÄýþËüþÌüþÉüþÅýþÂþþÂþþÅýþÊýÿÎÿÿÌÿÿÉÿÿÆþÿÆþÿÈþÿÅøúÌýÿÍþüÌúûÐûÿÖþÿ¤Æê¥Í·ßüÅóÿÌýÿÍþÿËöÿ§Ðç D\;MPW/^f3RiPdgqÃÉÞþÊæÿÁçÿ¶áÿ·ÞþÃéÿÍòÿÁèÿ®Üÿ©Ýÿ¨âÿÔÿÏü¤ÙÿÓþ©Ýÿ£ØÿÉýª×ÿµãÿ£Ôÿ£Öÿ®åÿ¥Üÿ¦Öÿ®ÝÿËý/b"S*[%Z%^T,c "S%SN%W&\%[Ix9ie̼ö¿÷ÄøÍýÐû£ØÿÌ÷ÒÿÎüÓÿ¤Øÿ Ôÿ Õÿ¡ÖÿÓü¦Ùÿ Óþ£Ôÿ¥Øÿ¬àÿÄäÿD5=Z01_03X%,R!)U&.a9>\<A4#QCN3+<-$@Sfg§Dd^}q£q-/0L>8jPD\9,e8...@8d...C[?4nTMlYRwsúõôûÿÿôÿÿã÷øÐêêåÿÿ··Öñîìÿÿîÿþíþú»ÌÉòÿþðúú÷üýýÿÿÿþÿÿþÿùúøñóíýüò0-]UD}lWhP8y[@yW?eD1\>3K3-N@BU\m+7@]xn¥JcwvNT[($#I=7^KDR51Ö´´ß·¼Ù´¸Ó³´çÏÑXFMÿøÿ0-MÁÅõÌÕÿ",z YÆÌÿ¼ÀûÂÆÿÁÈùÇÓ÷Ùæÿéøÿïþÿïÿÿíüÿðüÿðþýðþýðþüðþüîþýîýÿîýÿóÿÿòÿÿóýÿõþÿ÷ÿþõÿýõÿýñÿýëüÿíÿÿáúöæÿÿÞúûäüÿ½Ëû£Óâíÿîùÿáìÿåîÿ ·åëÿñóÿóóÿûöÿ| < yÔòÿ¾æøË÷ÿÆ÷ÿÐüÿÉ÷ÿÃôÿµèü¹ëÿÃöÿÊè¡ÚðÀûÿ¿úüÆÿÿÊÿÿÈþÿËþÿÌÿÿÃüû½ÿþ½ÿþÄýþÇýþÅýþÂþþ¾þþ¾þþÆÿÿÈþÿÇýþÆüýÄýþÃÿÿÅþÿÃþÿÀüÿÂüÿÌÿÿÉùûÔýÿØúÿ´ÙªÉð¿çÿÆ÷ÿÈþÿÊÿÿ½ëÿ´Õ<^@YIP*af-Rf?WuUd {«ËàÿÄãÿ¢Ëì°Üû¸àý¶Û÷¼Þû½ãÿÙÿÎùÚÿÑûÏø¤ØÿÍö ÔÿÐÿÅù§Ñÿ¯×ÿ£ÐüÎø ×þÖýÒûÎù³çÿbÂ%UMuMr#\ HuP WMJN YL1a4aÆÿÃÿÈÿ¡ÑÿÏýÐûÔÿÌ÷ÑÿÐþ Ôÿ ÔÿÑþÖÿ£ÚÿÖÿÔÿÎù¢ÓÿÐûÎ÷´Òï8'0S'(a/3W#*^)2s@HQ%+F"(P5>G6?61:*-;/;Pko«HiZylEUb'+0JA>TA:X;4c?7d<7c?9P3,fOGaKE\LF©ÿýþýþÿôýÿçøû¥§×ðòàúú×ïíìÿÿçüùåöó«ªÚææøÿÿöúûÿþÿøõ÷ÿþÿÿÿÿÿÿüÿÿùEE7MK9{pZiX=`J.y\AiG0fD4W<2TBAhah7<K.C &@Olt«aybr!$,5-.YHEW?9R32Ö±³Ü²¹Ú±¸×´¸àÃÆRAJöéùkf²ÆÐÿÙläÎÐÿÄÉÿ¿Æý¿ËõÌÚ÷Úêûãóÿêúÿíþÿîýÿîþýîþýîÿüîþýîþýîýÿêýÿèÿÿèÿÿêþÿíþÿòÿÿòÿþòÿÿðÿÿéúÿëþÿâüüäÿþâýÿãøÿ×ãÿÉÛæúïþÿÐáôæøÿ®ÕÅÑõóùÿìíÿ÷ïÿÿõÿÒÆêh]} [mÃñf¿øc¼ÿGéc¼ÿsÕÿæÿkÑô{âÿpÖÿiÑüiÑüoÓýèÿx×þx×þvÙÿqÛÿxêÿ^ÙûhàÿtâÿqÜÿYÇñ]Êö\Åö\ÆûOÃøK½òiÍÿ`¿ðkÐ÷ÜþB¬×êã÷ÿÔÚåñî÷ÿüÿ '.+>;3L=4bG=eB8d90Q*"cIBfWN<0*]TPÿÿûòôôøÿÿôÿÿñÿÿ£µ´k}|¡³²éüùÁÔÑÅÖÓîÿüðþýðþýïýû¿Í˺ÇÅðúúÅÏÏ¿ÉÉôÿýõÿý×âÚ$!wcÙ¬]@+R4!_C2]C5M>501('#'$ 33Ymh0EC VPKfPKV52eAA฽ൾݯ»à±ºè¹Ááµ»jpD(5ÿíÿ!AÁÂÈÿ®µþ &!s+. ¦©!2¡* &¤+ $8 G-9"9'y&7/3"v, U-28;PJ|¦ÕÿÛÿx×ÿèÿvÛÿmËösÍülÈùxÓÿpÊíéÿ×ñãÿÙÿàÿ= £¹ÅÑñüÒøÿËõÿÉôýËùÿÄ÷úÇúýÈöþÌøÿÀîÿ½îþÁöÿºòý·ôø¿ýýÃÿþÃÿþÅþÿÇþÿÈÿÿÊÿÿÈÿûÄÿúºüûÃÿÿÁúüÌþÿ«×öoÁ§ÔùÄóÿÏÿÿÎüýÌõÿÆçÿÍ Ñ5Gp6NlCW KZ=L7I7N5Om¢Ê³Ðü¯Óÿ«×ÿ ÓþÑùÑùÒý¦Øÿ¥ÖÿËõÜÿ°ÚýÁâs7Nh&<1>Ob£µ¼Òä¯=Um&=W2N&A(%+)7 #" 5"</"#.6#+").60]jBq$TxHt3c lXMnRGnMDjFFW17e@H4aMYòêõswêôþª}öüÿ÷úÿ><B%![CKX6<T,.à¶·Û³¸Ó³Ï§²Ð¨´â¸Éâ½ÑåÇযodwt¡8bl¢ÎÙÿcn§`j ½ÆÿÆÎÿ²¼ø½Çÿ¼Åþ½Æø¾ÄñÌÔù×ßýäïÿíúÿíýÿêýÿâúÿßøüäüÿÝøüÜúûàþÿâÿÿåÿÿêÿÿêÿÿëÿþåÿùãý÷êÿüîûýøúÿÿùÿª£¸ÜÞößéÿÞìÿËÙöÝçÿ½Âá|{ìéÿrqÛâñîôûýþÿÿýÿþóÿYO\ c^uÑütÔühÏöfÑ÷j×ývâÿlÖÿhÎùnÑýnËü{ÖÿrÌÿsÍÿpÊÿdÁùcÄüfÎÿgÖÿbÓþ\Éõ`ÄôoÈû}Îÿ ÔÿÚüÔê*VcÂÜãôþÿóõýÿüÿÿûÿâÌÑ 7'=7 NYOÓÞÖúÿüøûùýÿþÉÍÈ÷þùôýúîüúéúýêÿÿ¢¾ÅpÐôþØÿÿÊôÿWÈóÿÒûÿPwÖùýáúþëøööÿüïüôöÿûôÿûïý÷øÿü?FA:;7=<863.KHCQLIa\[LDE ~0*=4¬9,¨%°64 f,&4)1 ,=}´Ìøÿ¤ÛÿÖýØÿÏñäÿ¥íÿÍîÖûÝÿÖÿÕÿÒüÕÿÕù»êÿÜùÿ§ XQB +1 41®:#1#/4a#9)@8SÙÿ|ÚþSÈåjßüw×ûnÅíÜÿpÈð}ÔöçÿëÿæÿpÂò`©ãt´õ={»{Æúâÿ¤ëÿËÿÿßúþ³Á¶L`C'/@7Ugn§¸Ëðÿ¯àÿªåÿÜûâÿ£æÿ¬ëÿÐïÖö¢ÞÿßÿØÿßÿàý©çùÈúÿÛûú©¡[XPo`^ùåêÿ÷ÿÌÈÛåïÿßùÿÀëÿÊïzºãßÿæÿj¼æpÃöjÃöc¿ò}ÜÿnÑý~åÿnÕülÒütØÿ@¥ÙS·ífÍÿWÄøLºîK¹íj×ÿcËÿ[ÁõuØÿmÐÿU¹é[Áñl×ÿfÑýhÒÿvÜÿiÊüiÅørËþÛÿ{ØÿfÌýP½óUÈÿUÉÿTÁù^Áók»ä Øõf%&K))_1&J±pǪ{cQ, :)C44),'( 0"¦9$±9#»;&Á:&¹2¦&¢$©( ¸5½5»7 ¸:((§:¯=¶2º3´7"®4¬+°1«1#->$?!*%3 .¢?)¤:#+"&.x#9HA+*Th½èÿràþ[Ìì}ÞÿxÕüqÓû}ÞÿwÑóêÿÝþåÿ{Ðÿ[¨á"b£xµ÷ãÿÖÿÇåÅúÿáúÿ>N=exgÛòî´¾·ÌÑ÷ÿ«Ûý£Ýÿ¡âÿ£çÿ©êÿ³ïÿ¦Üý¨Þÿ¡ÛÿÕûÓùÜþ×ñ§éü¢Ùâ¼æëäÿÿ½ÄOTcuuááÿïõÿÛîÿxÃZ·|¸æ×ÿÕÿçÿ{ÐøuÍü]¸ëqÍÿäÿmÍõuØþrÚÿsÚÿwÝÿD¦ÖU¶ènÑÿaÊýQ½íYÇ÷cÏÿdÌûgÍýxÚÿu×ÿkÍûmÒÿ{ãÿkÔÿ_ÆójÎþlËýyÔÿ|ÒÿxÑÿ~ÞÿvßÿVÇÿL¿üL½ûgÎÿÝÿáÿÇØ0@F>PSoE.S.aIÆ¢ 9lAqHxAo ª4 £- ¬1«(².¨+¤,¡.,6¦C'/+('!,$#!(./>X*@-EhÎéäÿÛÿåÿtâÿe×ÿtÜÿäÿyáÿzàÿhÉûG ÙGÎÌÿ}Äýp¹í7®[ÁÁáÿá÷ÿÏëÿ¯ÑéÃíÿÅñÿÇîºåÑü±ìÿÞÿ ãÿÔöØü Ûÿ ÝÿÙÿÞÿßÿÖþØÿÚÿ§ëÿ Çêm®Õf¢Ðy±èq¦ß´ì´én¨Ùl¯ÜÕÿÖþ ÝÿêÿØüÞÿtÒÿB¡ÓqÎÿvÕÿxÙÿîÿwÝÿwÜÿäÿiÊöpÏûtÖÿqÙÿnÙÿn×þmÕú{áÿ{ßÿuÖúyÙýxÙÿxÙÿnÐøiÍ÷rÓÿâÿtÑÿpÉüsÉÿyÕÿgÓýLÂìeÝÿL½õ^ÀöÐûÒë\|! ¢#¥4 2%4 «:*¡7&¢<)6 ¤6$2$% 66u27i:C@'5)/wq±ÃàÂßmÁÝêÿèÿïÿ(ºN±ãa½ðnÀðØÿÙÿyÌòçÿzÐú>{T;{«UÆyºæÝÿ£ßÿ{´ëj¥ÖÅï¬èÿ³íÿ ÙÿÕýÚÿÒúÛÿèÿàÿlÁîp¶òj§éb¡Ýo±ì{Äÿp½ü~ÌÿÖÿÝÿÏûÚÿ×úÝÿßÿäÿåÿÚÿsËùb»íU²ãmÍûkÏùuÙÿjÎønÏûiÊöjÌôkÐ÷n×þiÕÿXÅø@«ÞlÒýyÙÿvÖþdÄìoÎöyØÿgÆíjÉñ}ÝÿrÑümÌø{ÙÿwÔÿ{ØÿoËþdÃôaËô\ÇíoÒøÕøÅâTu *#,I10 \ -9KO]y¯Ò´Ëñ´Ñö®Òø¼æÿ³äÿÏýÐÿÍÿÌÿÐÿÐÿÐÿÊôÖÿÎõ£Øýáÿ°ãÿ²åÿ¥ÙÿÍøÒÿÏùÑù×þÔøÎ÷ Ñÿ¢ÑÿËÿÊÿ ÐÿÎþËùÎ÷ÓöÔ÷ÏøÌ÷¦Üÿ¦Üÿ¡×ÿ£Øÿ©Þÿ¡ÕÿÍûÒÿÌþÎÿÌÿËÿÈÿÇÿÀþ·ö~²øn¢é~¯ù²újÛ}ÆS=Pf9<X-*^7/^:2P/&W3+c?7b>6jD?b20e33e68Y-.wJMÊ¢Q'(_64hB>Y5/_@7bF;eH:a?2pJ>wLCtB<XR[Pi_vYUvdk.'<¯Òåÿu²ÐôÿÑûÿÒüÿÑûúÚÿÿÚûþãþÿÙïû KZmº¶Îò¶Ðô¶Ô÷½àÿºäÿÒýÍüÎÿÓÿÔÿÏüÍøÒùÔùÒõ±æÿ´éÿ®áÿ¨Ûüáÿ°äÿ§ÛÿÒúÐùÒý¤×ÿ¥Øÿ£ÓÿÎÿÊþÊýÌýÓÿÕþ¨Ýÿ¶èÿµåÿ¬Ùþ¨Õû¥Öþ¤×ÿ®áÿ®àÿáÿ«ßÿÐûÏýÏÿÏÿÆÿ¼ùµö½ÿ~´û¼ÿ³úpá¬õjÛaÏzÃ@.Eg>E\31^91`D9fJ?f@<^52\4/`83i>;h=:h<;W.,DñËÉuROL,'iIDdD?N.(uQKqIDzKGo:7ZWSP\V|MEd_nTTr~(´Éáÿr°ØýÿÅðùÌüýÊüúÉýýÐýÿáÿÿÚïþÏàó$6ZYi ej¨|{©tqup§pk¤pjXPndn`YMa_u=<LJvIFW1-d`¤@ nHDg?:kA<h;7n?;f73k;7b96]B> éÀqÿÚtÿÕlÿÑfÿ×kÿÚqÿá~ÿá}ÿâ{ÿæ}ÿâÿÊ}q$3!B&2 ##!-(:.=+9!;"©F** <£8²?³>½I2¯A5-#¥,¦(©*ÃB'ÌG+³3 FC E7 !5ew«Àæ¸Ïõ·Ñö¼Ùþ¶ÝÿÐþÑÿÐÿÓÿ ÕÿÔÿÑüÑúÑöÐó§Ûÿ±æÿ³æÿªÝþ¦Ùú¤ÖúªÚþ²ãÿÐûÑÿ£Õÿ©Úÿ«Ûÿ§ØÿÒÿÍþÑÿÖÿ×þ¢×ü§Ùý«Øý¯Ùþ³Ýÿ§Õþ£Ôü¨Ùÿ¥Õÿ¢Ôþ¢ÔþË÷ËûËÿÊÿÂÿÂÿ¹ÿ µýx¦ó±û±öqÚx¡æeÓdÎÆF6Mg@HW0.Y4,V:/V90]64a56b52_50`52i>;lA>_63A¶½O1,qSNK-(fC?e?;d74OMFEQQPO]ZVOzUQr[_|s9 ÃÆäÿp³ÎúÿÏÿÿÉýýÍÿÿ¾úúÉÿÿÌõþßþÿáüÿMbw);mfsrwyyli°yr§mhfa£lg¨rk`UWNNIURNLnA=P'$°ieN*$nHDf<7m@=l=9l;9d40k:8`52N/.& ¯(¼5§' ±3¢"§%®,µ4 ( 1 7¥@§@ ª;%¦1('©-9ª49*'1+3,4/1*1% 4,T-/PLX7Rg@e D7 2["%c$&s46VH?* ( Q'(S$&? `'(E< ,$ ª0©5¥2#§+%¦,, /3&)+)4/1,.2k?V,.Q7kàÿâÿxãÿrÜÿ'ÇS·ñpÔÿ@ÑpÎü{ØÿâÿöÿzÞûkÕíûÿûÿdÝ÷}ëÿyâÿëÿlÖûH³ÕqÝÿuãÿxéÿqçÿiâü{õÿvîÿzîÿtäÿváÿíÿ}åÿjÐó~âÿyØÿdÀñ>ËhÇósÕý|çÿtàÿoÛý}èÿçÿoÑïÜÿL§Î;ÃuÖÿ3ÆiÊü{áÿvÞÿcÎê~çÿzßÿs×úoÎöeÃîuÑúÚÿjÂðkÄðjÈìhÂáÝýÖéKhe:;1A)#T22I+08 ", :N!\&%SOIENJN? C? = 8 -- $$$ /#,4'2"6'¢2&)"$*¥<)¦3·C ¬>-§6§2%¤*£.),& :(®E* «5" ' #¦3610&8,3'67T3N!KUÁßÿ|áÿ{èÿkØþ6 ÏlÒÿmÒÿ(ºxÙÿæÿzÜþzÞûyàù{æûyëümæönåúqÞúvÚüøÿäÿ+³qÛúrßûiÚômáøqéü}õÿmãöyéÿrÞö}äÿ|âÿòÿ{Þþðÿäÿ_´äEÌuÎú{Ûÿ|áÿsÛøtÜù ìÿ{ß÷wÔí|ÓõrÇïO«ÖvÓÿ9ÍdÄùqÔÿwßÿtßúìÿvÞûvÚütÕûsÒú}ÜÿãÿtÏüzÕÿqÏúyÑù Ó÷ÒçC\X1,P.!a3+]34O'(D?JX ZMQaZG0 B/ >MP {sl³§~r~k\ymtev_PvaR}m]WH8*xhÛÆ·N7(U:,aTkH;f>2g=1l?4|NCj<1d6+`<2UB; ( 0& ! 4:Fb+>Y*B^1Qn%Kk0R}°Ü¥Æó´ÖÿµÜÿ¬Øý¤ÕýÉôÎù Óþ ÓþÏúÐû¥Ùÿ«ßÿ«ßÿ¤Øÿ£×ÿÒú£Öþ¬ßÿªÞÿ¥Øÿ¨Úÿ¨Øÿ¡ÒÿÍÿÏÿÓÿÕÿÒûÎ÷¬Ýÿ¨ÙÿÎÿÊÿÒÿÓÿÐÿÑÿÆþÇÿÇÿÆÿ¸ú»þÂÿzómå`ÕkÜiÕ_È`ÄMm®pÎnÉc¼lÉa{½iÀÀU7Pg5?f3:m<>h>?W-.m9@}KMb:._=-dA7d@8X3+]80iE=mLCM.%E* Ø¿µ²M7,E/$_D:L/&rSJ|\V{\YnQM¦H.' I61L@@®¯³sz}~i{|Qbev ¤³µL\[#% .4 8: 60 1% > 0- # 9> |-9',7#7%ik w(t("dW_o £*¬4¤3±?º@½= ¬)¦#¼8.½@+²@¡7 <9 +§7#¢1¦/«&"³11§;*¦C-¢@.3 46 m4%_:>3E + z"+|,6&z1#\ Zlg[V a v!°0µ6¥/°=¼C·8 £!¹7*®4°C£@¡@£A)+¥2%'¡(¬)&¯0/2$6"8$3:% 4p2"b898A=¾ìÜÿsÛøpãø~ðÿsãùïÿcÑû3 ÓlÛÿ|èÿîÿïÿìÿnÙôèÿ éÿtÚñöÿoÙðpØõwÞÿ;¡ÄfÏðnÛ÷öÿrçünæùuìÿhÜósãúyèþëýìÿèÿ|Ôø{ÚûpÑõoÔÿ®gÑúnØýìÿ|ãÿ|àÿwÞþxãþmÜöùÿxãÿßÿR«Ý ~¬rÕÿl×ùqÞþXÆärßÿ_ÆíqÓûäÿtØúqÕ÷jÒ÷nÔÿ`Ã÷èÿÚÿ§ãÿ2Zf1 ^ fmpv "'«,+´2%ª* ª/ ' U65b65V*0X_eAAS--e4<e4<mEGtOQzRT[27b6<k?Ej>Dc:?W26\;?D),E347++4,,.*)'%$342675755-'(C8:~nossliyupgÚ¿µ¤a[Pjl`~y ]WL}kZ䯳°z¯súʾįŢ¼²Íº«ØÊ·ËÁ¯¤ trg }ROK~yvxxoheLBB/(%H@@UPMFBAPMIWOOPGD?/0UA@[@CU69c?E$ O (´¹Ï¦«Õ©°Ñ¥¬Õ©¯ã»¼üØØÿëêÿëíÿìñÿôýÿïû÷æñúéòþîõÿñõÿùýÿùÿ\DNÿðóÿïóÿñüøä÷ÿé÷ÿîéÌ¡¬w4ÿËpýÐgúÓfÿçÿÜvýÐnÿÔrÿâÿäûÛwùØqóÌbüÕkóÑmëÃxc*o%{ ,"klv("r# fahgy##$%*¥(*§'"£&³A#¯B 7«>¸@¿E³8°7µ9'¦.¦3/'2 6)¤6*±4&²0#3-&(7#A*?&C(A% < s?/Q:?&-FV«ßÿëÿvêÿwêþqãúuéÿOÅî"ÈtíÿbÛû]×íhâòuñülæö|òÿñÿïÿñÿwáøtÚ÷èÿçÿrÑø|ÝÿïÿyáþgÔðwäÿxåÿ}èÿtßûxáüèÿéÿw×õ~âûyàûkÒóJ²ÕQºÛ~èÿqØøqØùmÑôtØúvÝøjÔìyäÿn×øgÌóäÿS»ê;§ÖYËôiÝÿaÕô}ìÿñÿ}ÝÿÜÿ~ÙþÝÿâÿ|ÜÿlÊõrÇïàÿ¨Á'2')5 0 ) + /jBr UKPVW|yMjR"<E^©j~ÉÒ¥Ô©¬Ð§¬Ú¶Þ¯¸çµ¿ë¼Äⷺݸºÿäåÿðôÿí÷ÿíûþéøöáðúæóýëòÿòóÿòñÿùÿ«x{üìíÿòõÿìõúäöÿøÿÿïëÃxf)ôºhúÈhÿ×rþ×oûÑlüËiÿÐnÿÝxÿÚtôÑjöÑiûÑgÿØnöÒnôÊt;~3*$ vj sy% njjgy&42!)-%,! !,"#%! , - - 0/ WB7 Þ¢fó½|z]1 ¦7¨9¢236=%(©3 6!9&9*8)<,1¥5#¥5(/'/3h)=8B }rtôâÛ`?+jKJ FT¸ðÿþÿ{îÿgÞ÷\Ñìpåÿpæÿøÿxîÿöÿ~ïù ñüìùqáîpéùsîÿuìÿxìÿñÿ~æÿqÐ÷]¶âqÊöìÿ~ëÿwïÿmíÿeåúháûoÜøçÿ~Ûôxà÷oßó}êÿìÿyãûvàøvÝøæÿðÿ|âÿxßÿrÙùlÕövßÿiÔöèÿ|×ü|Øûæÿòÿ{ìÿoäÿnßÿjØúkÓökÌòfÂíuËùÓÿÖÿÔ÷Óô»ã0T *5 ++ 1+ ¤1¤0-.,¥7©5 ,µG%£9629!@)5 3¹J"±@% / 0 0 *! B=ZYPxscn\p]iSuT{Ve=tN O21e[CnVsX¡fLy_«~[«k4m*y0m+Y'rK{\¡ePxi§±®æÍÙÿ»Ñû·ÐúÉëÿ¯ÚÿÎúÊø¡Òÿ¢ÓÿÌüÊüÏÿ ÒÿÉýÎÿÏÿÎÿÌÿÈÿÏÿÃÿ~·ü»ÿ¼ÿqàmÜ«îqÜmÓ{¡áoÛlÓsÏ|Â5B\(%"$,$$, R@AwacuZ]pSVvY\sVYqVYoWYmWYmWYmWYmWYmWYt\\t_^p\[t`_t\^mPSY6:nFKnEJjBGQ,.a??``ur²´]XwMFsIBmF>^91\80hG>tSJqPGpQHbA8kJAuTKdC:wVMgH?vZOlVKWH?jb[e`]YWW437++1ûûÿûþÿøýþûÿþûý÷*)KE:qlXZDlVkViT¨ua½ tªqbºr½wźyªxl}q¯u¢uheYg]UJ¢zn©wڷΫ¡}ZPZ3+a70j@9wMFpF?g@8oKEqM;c@ìÉ þÛÿàuþÛfýØhüÒrõÄx¾Nt4 NI¥sunoig¤~|khlluwdi`gbjks´Ó³Ñ¨¯Ó§À[_k>Agjݰ³È YbשµÇ¨×«±Á\)½UÿÏüÒoÿâuÿÔiÿÒiÿÒkÿÖoÿÛuÿÝzÿÚ|ý×yõÑmûÔlÿÐlÿÎtÝDòVôOã?áCìPòRðOøWôTæKêN÷X÷XÿdÿfðSìVÁh5F¤=¨;±B"¯>©5´>!º@(¬/¸5!¿8"º1²) ¦" & "('!))& ³?«=«@£8¤8¯C$.:!¯H(¢9³G(A).%19'=9:RNA9Áµóÿ¤÷ÿx×þhÎñwáÿwâþ{àùáûßú{ÓñyÒôáÿxâÿváÿoÐñÞýíÿoÔôcÌíyàÿòÿ|ÛõtÕñ{áþwåÿqßýyãûëÿçþóÿußö}çþïÿk×ïrÞöðÿtßûíÿîÿußþp×øoÖ÷iÐñtÝþnÛûnÜúxßúqÔðvØölÍîgÈézÕôÙô°íÿ¥Ìèk~( '! /2 5 4 2 79 &$A>7\F=hoc}o¯o]¤gK]@ mTmUtXvTpK{W©V92qX>qT©{\½\Ä{V¾zK²g(i mhXi5pFsW\M¹»Ëú¹Õþ´Õü¡Êñ¤Ôþ¤Öÿ¥Öÿ¢ÓÿÎÿÍÿÎÿ ÒÿÊÿÅýÈÿÃýÅÿËÿ¿û ºù~´û|±út¤ìtèrãoÞw¡âyßpÐnÎgËsÑÓ~¹EIa@=FRGI3&$8)'`LKs^]pXXu]]nVVmXWmXWlXWlXWmXWmXWoWWqWWmSSpXXkVUlWVpUXtUX`;?h?DX,2b9>^79b>>gCCc=;jA>nA>`0,m:7h52~NJb^¡rn½µnikfjelg~ZTiE?lHBK.' Ë»µÕÉÅÿüùÿþþÿûüÿýÿÿüÿûüÿöûüôÿýôÿüûÿü3*!zrqSHj^_R`Sm_j]²zo±xo±wqÈ®vqÎÖøÂ»ó¾´à© ¼|¦lfLE§vng_[-%j>7mC<zNGvJCvIEuHDj=9nA=vLGgA/wT)óÒÿÜ{ÿÞnùÕ_÷Ï^þÍiÿÌuÿÎÿÙüÌlÿÖoÿèÿØxõÎkûÒoÿÎnÿÔsÿÙtÿØpÿÒmÿÍlÿÌnÿÍoþÔqüÕkÿÖiÿÒfÿÍiÿÎtöÅwâ°vs;TTN§vxr{jvjykzhunw¡rzio§{Ï£ªÒ©°Ç¤Ñ¡§Ô¥¨ß¶´¶U\¤v¾¡Çªà°¼gcs;ÂTÿÆzÿÏrÿÙnÿÕfþÒgüÏfùÐiýÕoÿÛvÿÛxþÒuöÊmúÐmýÐiÿÑnÿÎvçIöUÿ[üUñQîRóVõWñSñRôVíSâLëVêYølê_æ\ç^ÖxMÝtS¿Q3²E%¯D©=¯A³C%³@%¨/³5½7»6¯05´A&@$®D%¡:2¤9)/§9!¦4¯?(¦6"'&0"2$3(¥984E,HA6UTvµÛ¦èÿåÿYÀçmÛÿ~ìÿêÿíÿíÿÞÿ|ÚýnÒõmØý{æÿyÜøßùêÿzáüoÚöpÛöóÿïÿ~æýwáùzèÿ óÿöÿñÿ~åøéüyâ÷õÿöÿqàözèÿñÿwäÿðÿìÿyãÿæÿèÿtØûr×ýpÙÿmÙÿpÞÿtåÿsäÿfÒôjËïÚûæÿ¶Íce}K:O.( $ #! ?0,O*,D&$:31E71D!, 9TLuk_l]fT\FkS«w\ÃsR»uH©k@rRpUt\v\]<fEK0/{W@¢nV¼qTÇvVÍyVÊUÄk3e#faT|`+sIkOSH÷ÍÿÁï®Öÿ¨Õÿ Òÿ ÓÿÐÿËýËÿÐÿÏÿÇÿºô½úÁÿµõ´ô¼ÿ³ö~«ï´û«òqßqÚnÙmÖtÛqÔlÊkÊlÍrÎ~Ìpy¥62K-#/*# 0$"2#!dPOmXWhSRjUTmXWmXWmXWmXWoWWoWWqWWsWWrVVsYYoWWnVVqTW{Z^iAFc:?d8>d8>`8:]77c==g@>h=:rB@uDBQOp:9PObaONKJs;: MLJI~KINL US^[a^nkhemj¥|z¥|zmk`^´õÏÍÿøóÿøòÿÿ÷ùçÜîØÍ°¥~uÕª¡Ètk¿ºÀÅ}I=Ѻ}}IB·|´y°{q³}r´}p³|o¨rg ka¢mcLB TJ[PrG>rI@xQHjF<mIArNFkG?kF>jE=f@.[5ðË÷ÌuþÓlüÕiüÓlÿÐuÿÎvÿÎpÿÐoÿÒmúÐk÷ÎkùÏnüÐqùÍp÷ÌoúÐoýÕkÿÔiÿÏiÿÍmÿÑuÿØwþÝpøÚi÷ÕdûÔhÿÑoþÎnùÐmûÐy÷ÁÈhz=#h-`Yceflr|htgskw`lkw¼Å¡À¨Î£°Ì¡¬Æ¤Ë£¥Õ¦¨ä²²Í½|p>( oIùÃÿÐÿÖüÆgÿÙtúÏhÿÒkÿÖoÿØsÿÖsüÐküÍkÿÏqÿÔvþÐkÿ×qÿÎkÿÄmðW÷\ðTðUæQî]ë]ç^æ`òoÿ±ñ§wæ¢sûºì« ýºÿ½ÿǦÿÆ¡éw÷|ºV: =£A«B!ªB¤=«E"µJ%°>®3 2¯8¯:§3"2!8!: 66', ))¢8'4%1%6,;+0$,(::-0£5;/9Y,M+C)'DUtÍìØö{ßüyÝúòÿîÿsÔõwßÿôÿpÛÿsÞÿwÛô èþñÿíÿ{îÿsèýuéúoáòvãùuáùjÕñn×òåûëþçþóÿ ìÿ}çÿjÖîjÕðìÿvãÿkÖòtÞýqÛú}çÿèÿ ìÿvÚülÎöbÂ÷bÂ÷_ÄêsÕówÎé¡åÿÌëdy5/B@-]#.y4>g#.4 3 / .5755( sI¢p4â°dýÏwÿÖwþÑpÿÙwüÇfÿÓoþÍgÿÑhþÍgÿÑmÿÕsÿÖsÿÒmÿÎjÿÍmþÎnûÔlÿàuÿÜwûÅnÝUíhúªuõ©uõ¯ÿÅú³ú³ÿ¿¢õ¶ñ»ïÀ¡ë¿¢ì¥꿤ù̱óǪôɨòˤÿÓí®ñ§õ¥ÅnS7£7B!»P*¯B¯=¸B¼E½K"²C#¢2¤;(>$34¨:1«:*¨4#©4³?(®=# .&06/%,&;- 7*²>7§//¢1529](1!6A]§ªñÿìÿÔó~×ùtÛüëÿaÉîq×úzÞú|âùußöwçýxîÿbÜô{õÿxîÿíÿåÿtÖþqÔúwÛýwÜüvàÿíÿxáÿ}äÿçÿyÝÿ{ßÿoÓõyÝÿiÍïaÅçyàÿhÏðmÖ÷qÛúoÕøjÄóáÿ§âöÂáêunqBRv/2y2/@8;30)87^=- /- 0«:*¦3«2¶<&«4¹C&µ= ,'' =-$©/#½92¶00¡.1~14Y8<%-(Van©¼ÏçâÿæÿhÊìjÕ÷ìÿèÿäÿéÿyãúvæýwîÿdßùnêÿ]ÔîbÎð{àÿ~àÿoÎùoÓöèÿnÖù|çÿlÔ÷pØûèÿåÿáÿnÐòíÿ`ÂäFªÌnÕöqØùíÿðÿuÛþãÿ¥ìÿd£R^^Q1,|;387*'6,8)0"| ,'nZ1 1- --- NEW FILE --- program glBitmapDemo; uses Forms, frmMain in 'frmMain.pas' {MainForm}; {$R *.RES} begin Application.Initialize; Application.Title := 'GL Bitmap Demo'; Application.CreateForm(TMainForm, MainForm); Application.Run; end. |